Nosql doesn’t mean non-relational
他们似乎建议nosql可以处理规范化的关系数据.
因此,让我们继续我之前的例子,一个CMS系统,它有两种类型的数据:文章和作者,其中文章有作者的引用(通过ID).
以下是系统需要支持的操作:
>通过id和作者一起获取文章
>获取特定作者的所有文章
>查找按创建日期排序的作者的前10篇文章
如果相同的数据存储在RDBMS上,我想了解这些操作的性能.特别是,请指定操作是否使用MapReduce,需要多次访问nosql商店(链接),或pre-join
我想限制讨论基于文档的nosql解决方案,如mongodb,couchdb和riak.
编辑1:
Spring-data project对Riak和Mongodb来说是可用的
var article = db.articles.find({id: article_id}).limit(1); var author = db.authors.find({id: article.author_id});
如果您使用ORM / ODM来管理应用程序中的实体,这将是透明的.这将是两次到数据库的旅行.他们应该是快速的反应,两个命中应该是不明显的.
寻找作者的文章只是反过来……
var author = db.authors.find({id: author_name}).limit(1); var articles = db.articles.find({author_id: author.id});
所以,两个查询,但单个作者提取应该很快,可以很容易地缓存.
var articles = db.articles.find({}).sort({created_at: 1}).limit(10); var author_ids = articles.map(function(a) { return a.author_id }); var authors = db.authors.find({id: { '$in': authors_ids }});
最后,再次,但只是一点点复杂.您可以在mongo shell中运行它们以查看结果可能是什么样的.
我不确定这是值得写一个地图减少完成.几次快速往返可能会有更多的延迟,但mongo协议非常快.我不会过分担心它.
最后,这样做的实际性能影响……理想情况下,您只需要查询文档中的索引字段,它应该非常快.唯一的额外步骤是获取其他文档的第二次往返,具体取决于您的应用程序和数据库的结构,这可能不是什么大问题.您可以告诉mongo仅查看超过给定阈值的查询(默认情况下打开时默认为100或200毫秒),这样您就可以随时关注数据增长时花费的时间.
你在这里有一个RDMS不提供的装备更容易分解数据.当您将应用程序扩展到CMS之外以支持其他内容但使用相同的身份验证存储时会发生什么?它恰好是一个完全独立的DB,它在许多应用程序中共享.跨dbs执行这些查询要简单得多 – 使用RDMS存储它是一个复杂的过程.
我希望这可以帮助您进行NoSQL发现!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。