-1

我正在开发使用 MySql 数据库和 Hibernate 来访问它的软件。我遇到的问题是,当我查找 1 个关键字时,我已经使用了 40 000 个查询,并且我正在开发的应用程序应该能够处理多个关键字。

所以基本上我们正在处理一个充满字符串值的数据库,并且必须进行大量比较。现在,我使用过滤器将所有可能的匹配项加载到内存中,并在 java 代码中进行比较。这是高度递归且缓慢的。

所以很明显 MySql 和大多数 Hibernate 都不是要走的路。谁能提供一些关于哪个数据库可以提供更好性能的信息。我正在研究 Hypertable、MongoDb、Hbase、图形数据库……但我不确定该走哪条路。

请帮忙。谢谢

4

3 回答 3

2

你的方法是错误的,你正在做一些 MySQL 本地做的事情 - 它可以将数据集存储在 RAM 中并从那里使用它,这就是你正在用你的算法做的事情。

另一件事是,对于文本搜索等特定事物 - 有专门用于此目的的已知方法和各种存储引擎。例如,狮身人面像就是其中之一。

另一件事实际上是使用某种使搜索快速的数据结构,例如trie - 这对于执行诸如自动完成之类的事情非常有用(这只是一个不必直接连接到您的问题的示例 - 它只是提示存在可以快速处理字符串的已知数据结构)。

另外,为什么您认为 NoSQL 解决方案在比较大量字符串数据时会更快?

正如其他人指出的那样 - 似乎您的应用程序设计和算法是这里的罪魁祸首,而不是底层技术。你应该在你的问题中更准确,并概述你正在做什么,你是如何做的以及你希望它做什么。当您回答这些问题时,人们可能会指出您解决问题的正确方向,因为您似乎采取了错误的方法。

于 2011-05-04T13:53:31.197 回答
0

您真正的问题是您使用 40,000 个查询。

你能解释一下导致这么多查询的问题和过程吗?

无论您使用什么数据库,您的算法听起来都太过分了,所以它总是很慢。

让我们先修复它。

于 2011-05-04T13:37:31.310 回答
0

也许我误解了你的问题,但是......

现在,我使用过滤器将所有可能的匹配项加载到内存中,并在 java 代码中进行比较。这是高度递归且缓慢的。

听起来您正在尝试在内存中完成数据库的工作?创建索引,编写更好的 SQL 查询或其他内容,但是您正在加载所有可能的匹配项并遍历它们?到那时,为什么还要使用数据库?

基本上,我不认为这是您选择的数据库(MySQL 可以毫无问题地处理比 40,000 条记录更大的查询)。我认为您的算法需要一些工作。

于 2011-05-04T13:42:51.673 回答