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

时间:2011-08-29 23:30:30

标签: java database postgresql plpgsql

我有一个存储了大量网页的数据库。

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

我想知道的是:

  • 在数据库中做一些处理,而不是在应用程序中是好的 想法?
  • 何时推荐,何时不推荐?
  • 有利有弊吗?
  • 是否可以将语言扩展到新功能(外部API /库)?

我尝试将内容检索到应用程序(工作),但是要慢和脏。我的 我不知道在数据库中我不能用Java做什么,但我不知道这是不是真的。

只是一个例子:我有一个名为Token的表。目前,它有180,000行,但这将增加到超过1000万行。我需要做一些处理来知道两个被分类为“专有名称”的令牌之间的单词是否是名称的一部分。

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

2 个答案:

答案 0 :(得分:5)

  

我的当务之急是在数据库中无法做我能做什么   Java,但我不知道这是不是真的。

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

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

  

只有一个例子:我有一个名为Token的表。目前,它有   180,000行,但这将增加到超过1000万行。我需要   做一些处理,以了解两个令牌之间的单词是否分类   因为“正确姓名”是名称的一部分。

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

我希望我的解释有意义。如果您有任何疑问,请告诉我。

答案 1 :(得分:3)

直接与数据库进行交互是一项繁琐的工作并影响性能......有几种方法可以解决这个问题...您可以使用索引,缓存或Hibernate等工具来保存所有数据在内存中,所以你不需要为每个操作查询数据库...有一些工具,如luceneIndexer非常受欢迎,可以解决你每次点击数据库的问题......