【发布时间】: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)
系列“属性:”:=>,...
这张表让我可以快速获取边的属性。
边缘类型:
键:复合(
家庭“邻居:”:
此表允许我搜索/扫描传入的边缘 或从顶点传出,属于特定类型,将是 API遍历能力的核心(所以我希望它尽可能快 在网络 I/O (RPC)、磁盘 I/O (seek) 方面都是可能的。它 还应该在图的大小上“缩放”,这意味着随着 图的增长这种类型的操作的成本应该取决于 从顶点传出的边数,而不是总数 的顶点和边。 上面的例子我会考虑 vertexid1 源顶点 属性名称:克劳迪奥我会扫描 vertexid1_out_knows 并接收列表 顶点相连。之后我可以在列上扫描 “属性:性别”在这些顶点上并寻找那些具有 “女性”价值。
问题:
1) 总则:您认为我的运营有更好的数据模型吗?
2)我可以把所有东西都放在一张桌子上,其中某些键有些
家庭将是空的(即“OutgoingEdges:”家庭不会
感觉边缘)?我想要这样,因为你可以看到所有的钥匙
由顶点 uuid 前缀组成,所以它们会非常紧凑
并且主要适用于同一个区域服务器。
3)我想我会广泛使用过滤器进行扫描。一世
猜测正则表达式过滤器将成为我的朋友。您是否有顾虑
应用于此数据模型的过滤器的性能?
【问题讨论】:
标签: database graph nosql cassandra hbase