【mongodb使用】在设计mongodb数据模型时,总是会在 采用嵌入型文档还是 关系型模型之间纠结!!
发布于 5个月前 作者 jerrywu55 349 次浏览 来自 问答

有没有人分享一些最佳实践呢

感谢!!

其二:

我将用户登录日志 记录(嵌入)在 user schema 里面的 login_histories 里面。

这时候我想要对用户登录日志 做分页查询时,就遇到了一些麻烦!!

这个分页查询要如何实现? 求教!!

6 回复

自己顶上去。。

取数据的时候,单条数据越小越好。mongodb 一次取一个 document 的数据,如果日志记录在用户表里面的话,单个用户的数据就突然变很大,会导致查询变慢。 如果这个用户登录日志是不停增长的话,就更加不能嵌入到用户表里了。 mongodb 的可嵌入特性确实带来了一定的便利性,但设计数据库的时候,还是得考虑一些经典的数据库设计原则。 并且从查询上来说,嵌入的数据也不是那么方便查询吧? 还是分开得好。 总得来说吧,反正我是不想再碰 mongodb 了,我并不觉得它比起 sql 有什么优势。

login histories 完全应该是用另外的collection来存

@alsotang 看到一篇文章这样说的:

举例1: 就拿一个“字典项”来说,虽然并不十分复杂,但还是会关系到“定义”、“词性”、“发音”或是“引用”等内容。大部分工程师会将这种模型使用关系型数据库 中的主键和外键表现出来,但把它看作一个“文档”而不是“一系列有关系的表”岂不更好?使用 “dictionary.definition.partOfSpeech=’noun’”来查询也比表之间一系列复杂(往往代价也很高)的连接查询方便 且快速。

举例2:在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在MongoDB中,能用一个文档来表示一篇博客, 评论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。

CODE↓

db.blogposts.save({ title : "My First Post", author: {name : "Jane", id :1}, comments : [{ by: "Abe", text: “First” }, { by : "Ada", text : “Good post” }] })

db.blogposts.find( { “author.name” : “Jane” } )

db.blogposts.findOne({ title : "My First Post", "author.name": "Jane", comments : [{ by: "Abe", text: “First” }, { by : "Ada", text : “Good post” } ] }) db.blogposts.find( { “comments.by” : “Ada” } )

db.blogposts.ensureIndex( { “comments.by” : 1 } );

我的理解:

以上将评论嵌入到文章里面,看似说的有理。但是mongodb 对文档有限制,单个文档最大为16M ,感觉这是mongodb自相矛盾的地方!!评论量一大的话,集合大小肯定超出16M了。。。。

慢慢地感觉 postgresql 也支持JSON数据了,mongodb的优势渐渐抵小了

回到顶部