我希望将图片存储在NoSQL数据库(< 5MB)中,并将它们链接到不同存储桶中的文章。 Riak的链接步行功能提供什么样的速度?它是否像RDBMS一样加入?
答案 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创建一个虚拟表 别名的不同版本 表,你可以轻松做的事情 社交网络图 (朋友的朋友),和 数据结构,如树和列表。