【问题标题】:Datamodel for Property Graph over HBase/CassandraHBase/Cassandra 上的属性图数据模型
【发布时间】:2011-05-24 01:05:05
【问题描述】:

我愿意将属性图存储到 HBase 中。属性图是图的节点和边具有属性,只要边属于不同的类型,多条边可以链接相同的节点元组。

我的查询模式将是询问属性和邻域或遍历图表。一个例子是:Vertex[name=claudio]=>OutgoingEdge[knows]=>Vertex[gender=female],这将给我所有claudio喜欢的女性。

我知道图形数据库就是这样做的,但如果数据集很大,它们通常不会在多个节点上扩展。所以我愿意在 NoSQL ColumnStore(HBase、Cassandra...)上实现这个

我的数据模型如下。

顶点表
键:顶点 ID (uuid)
系列“属性:”:=>,...
系列 "OutgoingEdges:": =>, ...
系列“IncomingEdges:”:与传出边缘相同......

这个表可以让我快速获取一个顶点的属性和 它的邻接表。我不能使用 vertexid 作为另一个端点 因为多个边(具有不同类型)可以连接相同的两个 顶点。

边表
键:边缘键(复合(,, ))(即 vertexid1_vertexid2_knows)
系列“属性:”:=>,...

这张表让我可以快速获取边的属性。

边缘类型
键:复合(,“out|in”,)(即 vertexid1_out_knows)
家庭“邻居:”:=>null,...

此表允许我搜索/扫描传入的边缘 或从顶点传出,属于特定类型,将是 API遍历能力的核心(所以我希望它尽可能快 在网络 I/O (RPC)、磁盘 I/O (seek) 方面都是可能的。它 还应该在图的大小上“缩放”,这意味着随着 图的增长这种类型的操作的成本应该取决于 从顶点传出的边数,而不是总数 的顶点和边。 上面的例子我会考虑 vertexid1 源顶点 属性名称:克劳迪奥我会扫描 vertexid1_out_knows 并接收列表 顶点相连。之后我可以在列上扫描 “属性:性别”在这些顶点上并寻找那些具有 “女性”价值。

问题:

1) 总则:您认为我的运营有更好的数据模型吗?
2)我可以把所有东西都放在一张桌子上,其中某些键有些 家庭将是空的(即“OutgoingEdges:”家庭不会 感觉边缘)?我想要这样,因为你可以看到所有的钥匙 由顶点 uuid 前缀组成,所以它们会非常紧凑 并且主要适用于同一个区域服务器。
3)我想我会广泛使用过滤器进行扫描。一世 猜测正则表达式过滤器将成为我的朋友。您是否有顾虑 应用于此数据模型的过滤器的性能?

【问题讨论】:

    标签: database graph nosql cassandra hbase


    【解决方案1】:

    这种类型的模型看起来像是 Cassandra 的明智起点(对 HBase 了解不多) - 但对于任何分布式存储,您在遍历时都会遇到问题,因为遍历会跨越多个节点。

    这就是为什么 Neo4J 等专用图形数据库使用单节点设计,并尝试将所有数据保存在 RAM 中的原因。

    查找特定节点或边的属性应该可以正常工作并水平扩展 - Twitter 的 FlockDB(现在显然已被放弃)就是一个显着的例子。

    您还需要考虑是否需要除 ID 以外的查找(即是否需要任何索引)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      相关资源
      最近更新 更多