是否可以存储图表hbase?如果是这样,您如何建模数据库以支持图形结构?

时间:2012-03-26 01:54:40

标签: database data-structures graph graph-theory hbase

我一直在使用图表来分析大数据。它的工作非常好,非常有趣,但我想知道该做什么,因为数据变得越来越大?

让我知道是否有任何其他解决方案,但我想尝试Hbase,因为它横向扩展,我可以让hadoop在图上运行分析(我的大多数代码已经用java编写),但我不确定如何在nosql数据库上构建图形?我知道每个节点都可以是数据库中的一个条目,但我不确定如何建模边缘并为它们添加属性(如节点名称,属性,pagerank,边缘权重等)。

看看hbase / hadoop是如何在大表和地图缩减后建模的我怀疑有办法做到这一点但不确定如何。有什么建议吗?

此外,这是否有意义我正在尝试做什么?或者它是否有更好的大数据图解决方案?

4 个答案:

答案 0 :(得分:6)

您可以以列为导向的方式在HBase / Accumulo中存储邻接列表。我对Accumulo更熟悉(HBase术语可能略有不同),因此您可以使用类似于以下的模式:

SrcNode(RowKey) EdgeType(CF):DestNode(CFQ) Edge/Node Properties(Value)

CF = ColumnFamily,CFQ = ColumnFamilyQualifier

您还可以使用以下内容将节点/顶点属性存储为单独的行:

Node(RowKey) PropertyType(CF):PropertyValue(CFQ) PropertyValue(Value)

PropertyValue可以在CFQ中,也可以在Value

从@Arnon Rotem-Gal-Oz提到的图形处理角度来看,您可以查看Apache Giraph这是Google Pregel的一个实现。 Pregel是Google用于大图处理的方法。

使用HBase / Accumulo作为giraph的输入最近已提交(2012年3月7日)作为Giraph的新功能请求:HBase/Accumulo Input and Output formats(GIRAPH-153)

答案 1 :(得分:2)

您可以将图形存储在HBase中作为邻接列表,例如,每个raw都有一般属性的列(name,pagerank等)和相邻节点的键列表(如果它是有向图而不仅仅是节点你可以从这个节点或一个附加列到达每个方向

看看apache Giraph(您还可以阅读更多关于它的here),而这不是关于HBase,而是关于在Hadoop中处理图形。 此外,您可能希望查看Hadoop 0.23(及以上),因为YARN引擎(也称为map / reduce2)对非map / reduce算法更加开放

答案 2 :(得分:1)

我不会像“Binary Nerd”推荐的那样使用HBase as HBase does not perform very well when handling multiple column families

使用单列系列可实现最佳性能(仅当您经常只访问一个列族的内容且存储在另一列族中的数据非常大时才应使用第二个列)

答案 3 :(得分:1)

您可以尝试和/或学习在HBase之上构建图形数据库。

Apache S2Graph 提供REST API,用于存储,查询由边和顶点表示的图形数据。在那里你可以找到一个演示文稿,其中解释了行/列键的结构。运营分析'还给出了影响或受设计影响的性能。

Titan 可以使用除HBase之外的其他存储后端,并与分析框架集成。它的设计也考虑了大数据集。