我有一个存储了大量网页的数据库。
我需要处理我拥有的所有数据,因此我有两个选择:将数据恢复到程序或直接在数据库中处理我将创建的一些函数。
我想知道的是:
我尝试将内容检索到应用程序(工作),但是要慢和脏。我的 我不知道在数据库中我不能用Java做什么,但我不知道这是不是真的。
只是一个例子:我有一个名为Token
的表。目前,它有180,000行,但这将增加到超过1000万行。我需要做一些处理来知道两个被分类为“专有名称”的令牌之间的单词是否是名称的一部分。
我需要处理所有数据。在这种情况下,直接在数据库上执行比检索到应用程序更好吗?
答案 0 :(得分:5)
我的当务之急是在数据库中无法做我能做什么 Java,但我不知道这是不是真的。
不,这不是一个正确的假设。使用数据库处理数据的有效情况。例如,如果它涉及调用可以在存储过程中组合的许多不同的SQL,那么您应该在存储过程中进行处理并从Java应用程序中调用存储的proc。这样就可以避免多次网络访问数据库服务器。
我不知道你在做什么。您是否在解析存储在数据库中的XML数据?那么也许您应该使用XQuery,并且许多现代数据库都支持它。
只有一个例子:我有一个名为Token的表。目前,它有 180,000行,但这将增加到超过1000万行。我需要 做一些处理,以了解两个令牌之间的单词是否分类 因为“正确姓名”是名称的一部分。
数据中是否有一些指示符表明它是一个正确的名称?获取1000万行(非常容易受到OutOfMemoryException)然后通过它们并不是一个好主意。如果有关于数据的某些参数可以放在SQL中的where子句中以限制所提取的数据的数量,那么在我看来是这样的。当然,您需要对SQL进行解释,检查正确的索引是否正确,检查索引簇比率,索引类型,所有这些都会产生影响。现在,如果你不能完全消除所有“不正确的名称”,那么你应该尝试尽可能多地删除SQL,然后在你的应用程序中处理其余的。我假设这是一个批处理应用程序,对吗?如果它是一个Web应用程序,那么您肯定要创建一个批处理应用程序,以便在Web应用程序查询之前为您暂存数据。
我希望我的解释有意义。如果您有任何疑问,请告诉我。
答案 1 :(得分:3)
直接与数据库进行交互是一项繁琐的工作并影响性能......有几种方法可以解决这个问题...您可以使用索引,缓存或Hibernate等工具来保存所有数据在内存中,所以你不需要为每个操作查询数据库...有一些工具,如luceneIndexer非常受欢迎,可以解决你每次点击数据库的问题......