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



我一直在尝试使用图形来分析大数据。它工作得很好,也很有趣,但我想知道随着数据越来越大该怎么办?

请告诉我是否还有其他解决方案,但我考虑过尝试Hbase,因为它可以水平扩展,我可以让hadoop在图上运行分析(我的大部分代码已经用java编写),但我不确定如何在nosql数据库上构建图?我知道每个节点都可以是数据库中的一个条目,但我不知道如何对边进行建模并添加属性(如节点名称、属性、页面排名、边上的权重等)

看到hbase/hadoop是如何根据大表和map reduce建模的,我怀疑有一种方法可以做到这一点,但不确定如何做到。有什么建议吗?

还有,我想做的事情有意义吗?还是有更好的大数据图解决方案?

您可以以面向列的方式在HBase/Accumlo中存储邻接列表。我更熟悉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是谷歌用于大型图形处理的方法。

最近(2012年3月7日)提交了使用HBase/Accumulo作为giraph输入的新功能请求:HBase/Aaccumulo输入和输出格式(giraph-153)

您可以将图作为邻接列表存储在HBase中,因此例如,每个raw都有通用属性的列(名称、pagerank等)和相邻节点的键列表(如果它是有向图,而不仅仅是您可以从该节点访问的节点,或者是具有每个方向的附加列)

看看apache Giraph(你也可以在这里阅读更多关于它的内容),虽然这不是关于HBase,而是关于在Hadoop中处理图形。此外,您可能希望查看Hadoop0.23(及以上),因为YARN引擎(又名map/reduce2)对非map/reduce算法

更开放

我不会像"Binary Nerd"建议的那样使用HBase,因为HBase在处理多个列族时表现不佳。

使用单个列族可以获得最佳性能(只有当您经常只访问一个列族的内容,而存储在另一个列族中的数据非常大时,才应该使用第二个列族)

有一些构建在HBase之上的图形数据库,您可以尝试和/或研究。

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

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

最新更新