数据结构不断增长的 MongoDB 性能

标签 mongodb performance redis nosql

假设我们正在设计一个新系统并决定使用 MongoDB 作为主数据库。数据模式非常类似于带有 [增长] 评论的博客。

在《MongoDB Developers》一书中,Tip #6: Do not embed fields that have unbound growth,它说不断地将数据附加到数组的末尾是低效的(但它也暗示注释是一个“奇怪的”边缘情况”)。

假设我们的新系统就像博客中的那些“评论”——一直在动态增长,但有时也会更改或删除。

因此,在认识到使用 MongoDB 可能存在性能问题后,还有什么其他替代数据库(必须是水平可扩展的数据库)可以满足此目的? (我们不介意使用 MongoDB 作为我们的主要数据库,而是将“评论”分离到备用数据库。有哪些可用选项?

注意事项:

Redis 以 Hashes 作为其数据类型的特性符合我们对“评论”数据结构的描述——不断增长但有时会被修改或删除——但我们不需要一个纯内存数据库(我们不希望当数据可以持久保存到磁盘时,专用这么多 RAM)——否则这将很适合我们的问题

使用 CouchDB 怎么样?我们没有对此产品进行调查。它如何处理不断增长的数据结构?

最佳答案

补充一下 Thilo 上面所说的,“不嵌入具有无限增长的字段”的原因是因为这种类型的文档大小扩展可能导致 MongoDB 在超过当前分配给它的空间时不得不移动文档。您可以在 Padding Factor 中阅读更多相关信息文档部分。

这些类型的移动相对昂贵,尤其是如果它们经常发生的话。因此,限制主要集合(最近的 X 等)中等效评论的大小(基本上限制增长),甚至可能预填充该文档字段(基本上是手动填充)以减少由评论添加/更改引起的移动可能这对你来说是值得的。

关于数据结构不断增长的 MongoDB 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9306815/

相关文章:

sorting - Redis - 寻求数据建模建议

javascript - 如何生成 404 错误而不是强制转换错误

linux - 无法连接到远程 MongoDB

javascript - SASS (CSS) 逻辑与 JQuery(Javascript) 逻辑

c# - WPF UI 自动化问题

python - Python 的正则表达式模式缓存是如何工作的?

Laravel Sail 作为生产设置

java - 当 Redis 不可用时使用默认的 Spring session

javascript - 能够查询数组中的特定索引吗? Mongoose

node.js - 在更新之前检查 Mongoose 数组中的嵌套对象 key[value]