想象一下,你有一套非常大的套装(比如100万+)“任务”,每套都需要一小部分“资源”(从一个非常大的集合中可能大约10个,比如说10,000+)。
我想执行一个查询,其中包含一些“资源”样本集(同样,大约10个),并且会查找使用这些资源的所有任务。最后,我想对“任务”执行更复杂的查询,例如:
我认为问题在某些方面与网络搜索非常相似,其中“任务”是网页,“资源”是这些网页上的文字。在并行问题中,我想执行诸如“给定这些单词,向我显示每个包含它们的所有网页的查询次数”这样的查询。
据我所知,这个问题不适用于常规数据库(甚至是NoSQL数据库!)。 “资源”列表需要是可扩展的,因此它不能是传统数据库中的列。它们也会有很多,所以制作一个包含10,000列的数据库似乎不正确。
我想象的是试图将所有数据保存在内存中,然后按顺序搜索它。但这可能不是很可扩展,如果我失去了力量,我将丢失所有数据......
我喜欢任何有关如何解决这类问题的指导!
答案 0 :(得分:1)
我会查看Neo4j(一个图形数据库)并查看它是否适合您的问题空间。
每个任务都是图中的一个节点。
关于Neo4j的好处是它支持属性图,这意味着每个节点都可以有键/值对。 (http://www.neo4j.org/learn/graphdatabase)。这意味着每个节点可以拥有n个与之关联的资源。
这里没有规范化,因为你会看到常规的关系数据库。只需每个节点的键/值对。
Gremlin是一个基于Groovy的DSL,它具有很好的图形遍历语法,可以与Neo4j一起使用。你可以进行搜索/查询等。用它。
https://github.com/thinkaurelius/titan/wiki/Gremlin-Query-Language