使用bitsets的社交图

时间:2013-10-06 06:36:50

标签: bitmap social-networking thrift graph-databases bitsets

我在一篇文章中发现了以下内容,这家互联网技术公司讨论了如何将社交功能融入他们的应用程序中:

  

Apache Thrift,Krati Data Store,JavaEWAH Compressed Bitmaps和JRuby   构成我们的社交图存储的远程服务的一部分   高性能持久压缩位图格式。

我试图理解这一点。到目前为止,我已经弄清楚了Apache Thift的含义(以及为什么要使用它),JavaEWAH,位集,社交图和GUI分析。 Krati数据源似乎没有一个好的wiki /教程。此外,我无法理解设置,如何使用位集和上述技术存储和处理社交图。

如果您能解释相同并指导我相关资源。或者,如果您可以建议更好的替代堆栈,如此描述。

1 个答案:

答案 0 :(得分:1)

好的,我们先提出一些基础知识:

我想,你的文章是那个:http://www.nextbigwhat.com/technology-implementation-for-social-features-297/

http://en.wikipedia.org/wiki/Social_graph “互联网环境中的社交图是描绘互联网用户个人关系的图表

http://thrift.apache.org/ 将软件堆栈与代码生成引擎相结合,构建在C ++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,OCaml和Delphi之间高效无缝地工作的服务。其他语言。

https://github.com/krati/krati Krati是一个简单的持久数据存储,具有极低的延迟和高吞吐量。它旨在与读写密集型应用程序轻松集成,而无需调整配置,性能和JVM垃圾回收。

http://code.google.com/p/javaewah/ 位数组数据结构在Java中实现为BitSet类.... JavaEWAH是Java bitset类的字对齐压缩变体。

http://jruby.org/apidocs/serialized-form.html ....

-----这是我的解释:

本文的背景是技术要求。所以他们列出了一切。在这种情况下,我想我们现在可以忽略apache Thrift,因为这只是粘合剂,它们用于将技术相互连接。此外,jrubi表单在某种程度上超出了社交图表的考虑范围。是的,社交图需要输入和输出,但表单可以解决主题细节来自哪个主题。

有趣的部分是krati和javaewah。读这篇文章很明显,他们通过会员资格实现他们的社交图。这可以是关于群体或角色或类似的东西。成员资格可以实现为位图:拥有一个位图,每个用户每位一位。可以寻址每个比特以检查用户是否是成员。就如此容易。位图由Krati组成,而不是由JavaEWAH存储/管理。 缺点是:用户越多,位图就越大。专业版:很快。

在关系数据库中,每个关系将被实现为外键2外键对(这导致一些索引开销>例如,对于键为2个整数,然后对于双索引为2 * 2 + x个整数,由此x debends在数据库上)。特别是每个组拥有大量成员资格,这可能会带来磁盘空间利用率的挑战。所以我想在这种情况下,压缩的BitMap实现在存储利用率方面更好。

UPDATE ---

可以写关于整个主题的书籍。我想我需要在这里说明一点。不过这里的好起点是:

http://www.slideshare.net/lemire/all-about-bitmap-indexes-and-sorting-them

https://github.com/jingwei/krati/commit/ab1432003e59a07269d23c1cb307625b0e8c5be2

http://en.wikipedia.org/wiki/Data_store http://en.wikipedia.org/wiki/Key-value_store(了解不同的数据库概念,而不仅仅是相对的概念)

http://dev.mysql.com/doc/refman/5.0/en/innodb-physical-record.html(了解一下外键2外键关系的成本)