当前位置: 首页 > 面试题库 >

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

彭嘉赐
2023-03-14
问题内容

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

在《 MongoDB
Developers》一书中,技巧6:不要嵌入增长无限制的字段,它说将数据连续追加到数组的末尾效率低下(但它也暗示注释是“奇怪的情况”) )。

假设我们的新系统就像博客中的“评论”一样-一直在动态增长,但有时也会发生变化或被删除。

因此,在意识到使用MongoDB可能会导致性能问题之后,还有哪些其他替代数据库(必须是水平可伸缩数据库)可以满足此目的呢?(我们不介意将MongoDB用作主数据库,而是将“注释”分隔到备用数据库。可用的选项有哪些?

笔记:

具有哈希值作为其数据类型的Redis功能符合我们的“注释”数据结构的描述-不断增长,但有时会被修改或删除-
但是我们不需要纯粹的内存数据库(我们不想花那么多时间可以将数据持久存储到磁盘时的RAM)-否则,这将非常适合我们的问题

怎么样使用CouchDB?我们尚未对此产品进行调查。它如何在不断增长的数据结构中发挥作用?


问题答案:

补充一下Thilo所说的话,“不嵌入具有无限增长的字段”的原因是,这种类型的文档大小扩展会导致MongoDB在超出分配给它的当前空间时必须移动文档。您可以在文档的“
填充因子”部分中阅读有关此内容的更多信息。

这些类型的移动相对昂贵,尤其是如果它们频繁发生。因此,限制您的主集合(最新的X等)中等效注释的大小(实质上限制增长),甚至可能预先填充该文档字段(实质上是手动填充)以减少注释添加/更改所引起的移动。为您值得。



 类似资料:
  • 我有一个循环中的python脚本 将AWS S3中的视频块下载到/filename 然后继续循环,直到AWS SQS队列为空。 剧本很棒!我已经运行了几个月了。硬盘空间会有所不同,但永远不会达到5%左右,这取决于视频的大小。 我决定把这个脚本放在docker容器中,运行docker compose,这样我就可以一次运行一堆脚本。 问题是硬盘充满了!我知道5运行磁盘上的空间会更高,但是当我完成处理后

  • 主要内容:使用 counters 集合,创建 Javascript 函数,使用 Javascript 函数MongoDB 中没有像 SQL 中那样可以赋予某个字段自动递增的功能,默认情况下 MongoDB 的 _id 字段是系统自动生成的 12 字节的唯一标识,但是在某些情况下我们可能需要在 MongoDB 的某个字段上实现类似 SQL 中的自动递增功能。 因为 MongoDB 中没有实现这个功能,所以我们需要通过编程的方式来实现。本节中我们将通过两个集合(counters 和 tutorial

  • 现在你对 大O 算法和不同函数之间的差异有了了解。本节的目标是告诉你 Python 列表和字典操作的 大O 性能。然后我们将做一些基于时间的实验来说明每个数据结构的花销和使用这些数据结构的好处。重要的是了解这些数据结构的效率,因为它们是本书实现其他数据结构所用到的基础模块。本节中,我们将不会说明为什么是这个性能。在后面的章节中,你将看到列表和字典一些可能的实现,以及性能是如何取决于实现的。

  • 商店1 第1节 第2节 2号商店 null null null 我会在'store'属性中设置区段,因为不同的商店有不同的区段。 到目前为止我认为一切都是正确的。我的问题是如何将用户分配到商店中的特定区段。会是user.company.store[3].section[1]吗?如果一个节/存储区被删除,那么节/存储区的indexOf值不会改变吗?人们通常是怎么做这样的事情的?我基本上是在创建与文件

  • 例如当前数据结构是:{ "name": "mike" } 业务迭代后变成了:{ "name": "mike", "age" : 20 } 那么如何将前者也都变成例如:{ "name": "mike", "age" : 0 } 来实现类似关系型数据库的效果?还是说做不到只能用回关系型数据库

  • 问题内容: 我的redis rdb文件的大小一直在增长,直到数据库无法运行并且连接被拒绝为止。我意识到这与某些配置设置有关-我使用的是默认配置文件。 有什么办法可以防止这种情况?我不必担心持续备份。 问题答案: 这显然在redis.conf中, 上面的文本在redis.conf中,如果您不想保存rdb文件,请在保存的三行注释,例如