gpt4 book ai didi

mongodb - 存储一个变化很大的字符串,从很长到很短::Fragmentation

转载 作者:可可西里 更新时间:2023-11-01 10:33:26 26 4
gpt4 key购买 nike

好的,所以我游戏中的每个玩家在我的玩家集合中都有一个文档,每个玩家都有 1 个字符串,该字符串是他们游戏状态的序列化字符串。所以这个字符串可以是很长或很短,每个玩家都有很大差异。

我有一个没有大量 mongo 经验的人告诉我,我应该填充集合中的每个字符串,使它们的长度都相同。所以就像在所有中短游戏状态字符串的末尾添加大量的零一样。

那么 A) 这是个好主意吗?

B) 我什至不完全确定如何找出游戏的最长长度,所以我不确定将它们填充多远以及如果以后的游戏状态超过我的填充长度怎么办?

我的 friend 说他有一个 mongo 集合因为碎片而不断爆炸,当他实现填充时,所有问题都消失了。

哦,我怀疑这很重要,但我的代码是在 php 中,显然使用了 php pecl mongo 驱动程序

感谢您的任何想法或意见!!!!!!

-戴夫

最佳答案

MongoDB 在创建时为文档分配空间。如果文档的大小增加,则需要将文档移动到新位置以容纳更大的大小。原始空间不会释放给操作系统。相反,MongoDB 最终会重用这个空间。在此之前,数据库可能会出现过度分配或有时称为碎片化的情况。

那么,你的 friend 可能发生了什么:

  • 文件已插入
  • 当字段更新时,它们的大小有时会增加,因此文档会变大
  • 文档随着它们的增长而移动,数据库变得过度分配(你的 friend 叫支离 splinter )

并且通过填充文档中的字段,您的 friend 能够确保文档的大小永远不会增加,因此他的数据库永远不会过度分配。

填充方法是有效的,但它也增加了应用程序的复杂性。通常填充是为最终将被创建的字段执行的,而不是固定值本身的大小,但想法是相同的。在您的情况下,填充听起来不是一个很好的选择,因为您无法预测字段大小。

相反,您可以考虑使用 usePowerOf2Sizes:http://docs.mongodb.org/manual/reference/command/collMod/

此配置将自动填充为文档分配的空间,并将增加 MongoDB 高效重用空间的机会,但代价是数据库稍大一些。

关于mongodb - 存储一个变化很大的字符串,从很长到很短::Fragmentation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15629385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com