这个想法是否适合数据库存储?还有其他选择吗?

时间:2013-06-20 14:53:15

标签: database nosql rdbms

想象一下,你有一套非常大的套装(比如100万+)“任务”,每套都需要一小部分“资源”(从一个非常大的集合中可能大约10个,比如说10,000+)。

我想执行一个查询,其中包含一些“资源”样本集(同样,大约10个),并且会查找使用这些资源的所有任务。最后,我想对“任务”执行更复杂的查询,例如:

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

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

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

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

我喜欢任何有关如何解决这类问题的指导!

1 个答案:

答案 0 :(得分: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