【发布时间】:2014-12-07 21:32:42
【问题描述】:
我正在对图形数据库(Cassandra 之上的 Titan 0.5.2)中的数据集进行建模,该数据库具有实体(由顶点表示)和两种类型的属性 - 实体之间的链接(自然由边表示)和标量属性(如字符串或数字)。有许多属性类型(现在大约 2000 种),每种属性类型总是相同的类型(即属性 P1 总是链接,属性 P2 总是字符串)但是每个实体可以有任何一组属性,并且属性可以是重复(即,实体 E1 可以具有三个 P2 值且没有 P1 值)。
问题是如何最好地对 P2 的标量值建模——它们应该是实体顶点 E1 的一部分吗?实体顶点 E1 和属性顶点 P2 之间的边缘上的属性? E1 和包含实际值的值顶点之间的边,标记为 P2?还有什么?我主要对每个解决方案的性能考虑感兴趣 - 即,在顶点或“薄”顶点上有很多属性,但其中有很多属性和很多边会更好吗?索引它们有区别吗? 但我也对其他考虑因素感兴趣,例如查询的便利性等。
数据集包含数千万个实体(但可能会增长,可能会增长到数亿个),每个顶点通常有大约 10-20 个属性,但有些顶点可以有更多属性,即数百个或更多。预期的查询可以使用任何属性,包括它存在的事实和它的值,并且还可能需要诸如“该实体的最大 P2 值”或“该实体是否具有满足特定条件的任何 P2 值”之类的计算。查询计划通过 Gremlin 类型的查询来完成,但如果有帮助,不排除使用 Titan-only 功能。
【问题讨论】:
标签: graph graph-databases titan gremlin