Riak链接 - 走路就像一个连接?

时间:2010-06-16 04:38:39

标签: riak

我希望将图片存储在NoSQL数据库(< 5MB)中,并将它们链接到不同存储桶中的文章。 Riak的链接步行功能提供什么样的速度?它是否像RDBMS一样加入?

2 个答案:

答案 0 :(得分:11)

链接与JOIN(涉及笛卡尔积)完全相似,但它们在某些意义上可用于类似目的。它们与HTML文档中的链接非常相​​似。

使用链接步行,您可以从单个键开始,也可以创建以多个键开头的map-reduce作业。 (链接行走/遍历实际上是map-reduce的一个特例。)这些值被取出,它们的链接根据您的规范(桶,标记)进行过滤,然后匹配的链接被传递到下一个阶段(或者返回到客户)。当然,所有这些都是并行完成的(与JOIN不同)具有高数据局部性。

另外,map-reduce本身并不慢,你只是没有一个复杂的查询规划器来为你做艰苦的工作;您必须考虑如何根据需要查询和组织数据。

答案 1 :(得分:7)

认为单向关系和正常查询速度一样快。没有MapReduce那么慢。

自: http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/

  

Riak处理的第一种方式   这是链接行走。每个数据   存储在Riak中可以有单向   通过关系与其他数据的关系   链接HTTP标头。在规范中   例如,你知道一个乐队的关键   你存放在“艺术家”中的   斗(Riak铲斗就像数据库   表或S3桶)。如果那个艺术家   与其专辑相关联   转向链接到轨道上   专辑,你可以找到所有的曲目   在单个请求中生成。我会的   在下一节中描述,这是   比SQL中的JOIN痛苦得多   因为每个项目都在运作   独立,而不是在表格   一时间这是查询的内容   看起来像:

     

GET   /原料/艺术家/披头士乐队/相册, /轨道,_,1   “/ raw”是URL的顶部   命名空间,“艺术家”是桶,   “TheBeatles”是源对象键。   以下是匹配规范   在表单中为其指定的链接   桶,标签,保持三元组,在哪里   下划线匹配任何东西。第三   参数,“保持”说要返回   该步骤的结果,意味着   您可以从任何步骤检索结果   你想要的,任何组合。我不   知道你,但感觉到我   比这更自然:

     

选择曲目。* FROM曲目INNER   在tracks.album_id =上加入专辑   albums.id INNER JOIN艺术家ON   albums.artist_id = artists.id WHERE   artists.name =“甲壳虫乐队”   链接的警告是他们是   本质上是单向的,但是这个   可以毫不费力地克服   在你的申请中。没有   参照完整性约束   你的SQL数据库(哪个ActiveRecord   你过去曾经痛苦过。)   没有坚实的保证,你的   DELETE或UPDATE不会导致行   无论如何,变成孤儿。我们有点儿   由于ActiveRecord处理而被破坏   协会的联系   自动。

     

链接行走的地方   功能真的很闪耀   自我指涉和深度传递   关系(想想has_many:通过   大写)。既然你没有   通过JOIN创建一个虚拟表   别名的不同版本   表,你可以轻松做的事情   社交网络图   (朋友的朋友),和   数据结构,如树和列表。