我希望将图片存储在NoSQL数据库(<5MB)中,并将它们链接到不同存储桶中的文章.Riak的链接步行功能提供什么样的速度?它是否像RDBMS一样加入?
链接与JOIN(涉及笛卡尔积)完全相似,但它们在某些意义上可用于类似目的.它们与HTML文档中的链接非常相似.
使用链接步行,您可以从单个键开始,也可以创建以多个键开头的map-reduce作业.(链接行走/遍历实际上是map-reduce的一个特例.)这些值被取出,它们的链接根据您的规范(桶,标记)进行过滤,然后匹配的链接被传递到下一个阶段(或者返回到客户).当然,所有这些都是以高数据局部性并行完成的(与JOIN不同).
另外,map-reduce本身并不慢,你只是没有一个复杂的查询规划器来为你做艰苦的工作; 您必须考虑如何根据需要查询和组织数据.
认为单向关系和正常查询速度一样快.不像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"/生"是URL命名空间的顶部,"艺术家"是斗,"披头士乐队"是源对象的关键.以下是匹配规范,其中包含以下链接,以桶,标记,保留三元组的形式,其中下划线与任何内容匹配.第三个参数"keep"表示返回该步骤的结果,这意味着您可以以任意组合从任何步骤中检索结果.我不了解你,但对我来说感觉比这更自然:
SELECT轨道.*FROM轨道INNER JOIN专辑ON tracks.album_id = albums.id INNER JOIN艺术家ON albums.artist_id = artists.id WHERE artists.name ="The Beatles"链接的警告是它们本身就是单向的,但是这个可以在您的应用程序中轻松克服.如果没有SQL数据库中的参照完整性约束(ActiveRecord过去曾经令人痛苦),那么无论如何都无法保证DELETE或UPDATE不会导致行变为孤立.我们有点被宠坏了,因为ActiveRecord会自动处理关联的链接.
链接行走特征真正发挥作用的地方在于自我指涉和深刻的传递关系(想想has_many:通过大写).由于您不必通过JOIN创建虚拟表并为同一个表的不同版本添加别名,因此您可以轻松地执行社交网络图(朋友的朋友)以及树和数据结构等数据结构.名单.