熟悉的Neo4j将人际关系视为一等公民;即席查询/遍历,完整性(如果一个节点被删除,链接消失)等。它还将广告作为表示关系以及优于关系数据库连接的唯一机制。
Riak链接表示关系有多强大?他们是否可以用来回答即席查询,例如“获取每个收入超过x”或friend of a friend的人的爱好列表,假设合适二级索引的功能?通常,他们可以模拟RDBMS中的output of a join吗?
它们是否也意味着大量使用,例如社交书签系统,其中有很多人和书签的链接?或者它们是否需要谨慎使用(所有结构都必须是非循环图)?
在“不做”类别中:
答案 0 :(得分:5)
Riak中的链接只是与值一起存储的一些元数据(对外键的单向引用列表)。它们通常用作MapReduce的输入,可以用它们做任何你想做的事情,包括模拟RDBMS连接。
没有完整性检查或任何额外的魔法,比如查找反向链接。它们只是一个便利API,绝对可以通过将这些外键列表存储在值中来实现,以某种方式序列化。
对于社交书签示例,我建议使用 Riak搜索,因为它允许更灵活的查询,例如http://example.com/ *,并具有适当的分布式索引和查找。
答案 1 :(得分:3)
blinkov 的回答是正确的。不,Riak Links不适合您描述的场景。没有参照完整性检查,并且每个对象可以存储多少链接(我相信,最多255个)。
Riak Search更适合社交书签方案。实际上,社交书签网站Clipboard使用正是这种机制 - 书签作为Riak对象,并在其上启用了Riak搜索(用于标记,事件触发器和通知等)。当Ricon 2012会议视频上线时,我建议您观看剪贴板上的详细信息。
Riak + Secondary Indexes也是许多这些案例的合适解决方案。有关类似设置的架构建议,请参阅我对Which clustered NoSQL DB for a Message Storing purpose?和How to structure data in Riak?的回答。