直接在数据库上处理大量数据是个好主意吗?

问题描述 投票:0回答:3

我有一个数据库,存储了很多网页。

我需要处理我拥有的所有数据,所以我有两个选择:将数据恢复到程序或使用我将创建的一些函数直接在数据库中处理。

我想知道的是:

  • 在数据库中进行一些处理,而不是在应用程序中进行处理是一个很好的选择 想法?
  • 什么时候建议这样做,什么时候不建议这样做?
  • 有优点和缺点吗?
  • 是否可以将语言扩展到新功能(外部 API/库)?

我尝试将内容检索到应用程序(有效),但速度又慢又脏。我的 我最关心的是在数据库中不能做我在 Java 中可以做的事情,但我不知道这是不是真的。

仅举一个例子:我有一张名为

Token
的桌子。目前,它有 180,000 行,但这将增加到超过 1000 万行。我需要做一些处理来知道两个标记之间的单词是否属于“专有名称”,是否是名称的一部分。

我需要处理所有数据。在这种情况下,直接在数据库上执行比检索到应用程序更好?

java database postgresql plpgsql
3个回答
5
投票

我最关心的是在数据库中不能做什么我能在数据库中做什么 Java,但我不知道这是不是真的。

不,这不是一个正确的假设。使用数据库处理数据存在有效的情况。例如,如果它涉及调用许多可以组合在存储过程中的不同 SQL,那么您应该在存储过程中进行处理并从 Java 应用程序调用存储过程。这样您就可以避免多次网络访问来访问数据库服务器。

我不知道你在处理什么。您是否正在解析数据库中存储的 XML 数据?那么也许您应该使用 XQuery,并且许多现代数据库都支持它。

仅举一个例子:我有一个名为 Token 的表。目前,它已经 180,000 行,但这将增加到超过 1000 万行。我需要 进行一些处理以了解两个标记之间的单词是否已分类 因为“专有名称”是否是名称的一部分。

数据中是否有一些指标表明它是正确的名称?获取 1000 万行(非常容易受到 OutOfMemoryException 的影响)然后遍历它们并不是一个好主意。在我看来,如果有关于数据的某些参数可以放入 SQL 的 where 子句中以限制所获取的数据数量,这就是可行的方法。当然,您需要对 SQL 进行解释,检查是否存在正确的索引,检查索引簇比率、索引类型,所有这些都会产生影响。现在,如果您无法完全消除所有“不正确的名称”,那么您应该尝试使用 SQL 删除尽可能多的“不正确名称”,然后在应用程序中处理其余的。我假设这是一个批处理应用程序,对吗?如果它是一个 Web 应用程序,那么您肯定希望创建一个批处理应用程序,以便在 Web 应用程序查询数据之前为您暂存数据。

我希望我的解释是有道理的。如果您有疑问,请告诉我。


3
投票

直接与数据库交互是一项乏味的工作,并且会影响性能...有多种方法可以解决这个问题...您可以使用索引、缓存或 Hibernate 等工具,它将所有数据保存在数据库中内存,这样你就不需要每次操作都查询数据库...有一些工具,例如luceneIndexer,非常流行,可以解决你每次都访问数据库的问题...


0
投票

我知道对此做出回应可能已经很晚了,但仍然有人想要做这种任务并且需要像我一样的建议并出现在这里。

从我的角度来看,我认为我们可以批量获取数据,例如在这种情况下一次可能获取 10000 个条目(这可能再次取决于我们需要获取多少条目)并且 这个过程有它自己的优点和缺点,就像我们最终可能会多次调用数据库来获取批次,更好的一面是我们可以在代码本身内部执行操作,这样我们就可以了解数据发生了什么,而无需查看过程内的查询。

已经提到了另一种方法来处理数据库中的所有内容。这只是我的观点,如果有任何错误请纠正我,最终选择什么流程完全取决于项目需求。

© www.soinside.com 2019 - 2024. All rights reserved.