0

想象一下,您有一个非常大的集合(例如,100 万+)组“任务”,每个任务都需要一小部分“资源”(可能是非常大的集合中的大约 10 个,例如 10,000+)。

我想执行一个查询,该查询需要一些“资源”样本集(同样,大约 10 个),并会找到使用这些资源的所有任务。最终,我想对“任务”执行更复杂的查询,例如:

  • 哪些“任务”需要比我更多的“资源”?
  • 给定的“任务”与我的“资源列表”有多接近?

我认为这个问题在某些方面与网络搜索非常相似,其中“任务”是网页,“资源”是这些页面上的单词。在并行问题中,我想执行诸如“给定这些单词,向我显示包含它们的所有网页特定次数的所有网页”之类的查询。

据我所知,这个问题不适用于常规数据库(甚至 NoSQL 数据库!)。“资源”列表需要是可扩展的,所以它不能是传统数据库中的列。也会有很多,所以做一个10000列的数据库似乎不太正确。

我想象的是试图将所有数据保存在内存中,然后按顺序搜索。但这可能不是很有可扩展性,如果我断电,我会丢失所有数据......

我很想得到有关如何解决此类问题的任何指导!

4

1 回答 1

1

我会检查 Neo4j(一个图形数据库),看看它是否适合您的问题空间。

http://www.neo4j.org/

每个任务都是图中的一个节点。

Neo4j 的好处是它支持属性图,这意味着每个节点都可以有键/值对。(http://www.neo4j.org/learn/graphdatabase)。这意味着每个节点可以有 n 个与之关联的资源。

正如您在常规关系数据库中看到的那样,这里没有规范化。只是每个节点的键/值对。

Gremlin 是一个基于 Groovy 的 DSL,它具有很好的图遍历语法并与 Neo4j 一起使用。您可以进行搜索/查询/等。用它。

https://github.com/thinkaurelius/titan/wiki/Gremlin-Query-Language

于 2013-06-20T23:34:53.747 回答