【问题标题】:Modeling values in graph DB - vertex or property?图数据库中的建模值 - 顶点或属性?
【发布时间】: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


    【解决方案1】:

    就个人而言,我认为将顶点属性建模为顶点的属性通常是最自然的。在使用 Titan 新的多属性和元属性功能时,情况更是如此。多属性是 LIST/SET 属性,元属性是属性上的属性。以下是完整描述这一点的相关文档:

    http://s3.thinkaurelius.com/docs/titan/0.9.0-SNAPSHOT/advanced-schema.html#_multi_properties

    http://www.tinkerpop.com/docs/3.0.0-SNAPSHOT/#vertex-properties

    您可以在属性上创建以顶点为中心的索引,以启用诸如“此实体的最大 P2 值”之类的查询。在性能方面,这个解决方案应该工作得很好。

    http://s3.thinkaurelius.com/docs/titan/0.5.0-SNAPSHOT/indexes.html#vertex-indexes

    默认情况下,Titan 只会检索您要求的属性(除非您明确告诉它不要通过query.fast-property),并且它可以在顶点的行内完成所有这些操作,因此速度很快。这里有描述

    http://s3.thinkaurelius.com/docs/titan/0.9-SNAPSHOT/data-model.html

    您必须注意的一件事是失去控制的顶点行。您提到一个顶点可能有 100 个属性,这听起来不错。如果您开始使用 100K,那么您可能会遇到使用顶点的问题,尤其是在执行 OLAP 操作时。

    需要注意的另一件事是边缘属性与顶点的特性不同。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多