性能方面,重命名生产的每个mongo密钥名称是否值得?

时间:2015-11-18 14:37:01

标签: performance mongodb

据我所知,每个关键名称都存储在"原样"在mongo数据库中。这意味着一个字段" name"将在任何地方使用4个字母进行存储。

如果我希望我的应用程序准备好存储大量数据,重命名我的mongo文档中的每个键,那么这是明智的吗?例如," name"会成为" n"和"描述"会成为" d"。

我希望它能够显着减少数据库使用的空间,并减少发送给客户端的数据量(更不用说它有点可以解释mongo文档内容)。我是对的吗?

如果我对代码中的每个键进行重命名(不需要重命名现有数据,我可以从头开始重建),是否有一个好的做法或者我应该知道的任何其他建议?

2 个答案:

答案 0 :(得分:5)

注意:这主要是猜测,我没有基准测试结果支持

虽然技术上“缩小”你的密钥会减少你的内存/磁盘空间占用空间的大小,但我认为如果不是实际上不利的话,它的优点是非常小的。

首先要意识到的是,存储在Mongodb中的数据实际上并不是以原始JSON格式存储的,它实际上使用标准BSON存储为纯二进制格式。这允许Mongo进行各种内部优化,例如compression如果你使用WiredTiger作为你的存储引擎(感谢你指出那个@Jpaljasma)。

其次,让我们说你缩小你的密钥。那么你需要缩小你的钥匙。每次。永远。这在您的应用程序方面有很多工作要做。此外,您需要在阅读时解开密钥(因为用户不知道n是什么)。每次。永远。突然间,您的次要内存优化成为主要的运行时减速。

第三,这种缩小/取消的过程有点复杂。您需要维护和测试两者之间的映射,保持测试,更新,并且永远不会有任何重叠(如果这样做,那就是所有数据的结尾)。我不会那么努力。

总的来说,我认为缩小你的密钥以保存几个字符是一个非常可怕的想法。重要的是要牢记大局:VAST的大部分数据都不在键中,而是在值中。如果您想优化数据大小,请查看。

答案 1 :(得分:0)

每个文件的全名都包含在每个文件中。因此,当您的字段名称很长而且您的值很短时,您最终会得到大多数已用空间被冗余字段名称占用的文档。

这会影响总存储大小并减少可以缓存在RAM中的文档数量,这会对性能产生负面影响。但是使用描述性字段名称当然会提高数据库内容和查询的可读性,这使得整个应用程序更易于开发,调试和维护。

根据驱动程序的灵活性,可能还需要很多样板代码才能在应用程序字段名和数据库字段名之间进行转换。

这是否值得,取决于数据库的复杂程度以及性能对您的重要程度。