Performance 就性能而言,是否值得为生产重命名每个mongo密钥名?

Performance 就性能而言,是否值得为生产重命名每个mongo密钥名?,performance,mongodb,Performance,Mongodb,据我所知,每个密钥名都“按原样”存储在mongo数据库中。这意味着字段“名称”将使用4个字母存储在使用它的任何地方 如果我希望我的应用程序能够存储大量数据,那么重命名mongo文档中的每个键是否明智?例如,“名称”将变成“n”,而“描述”将变成“d” 我希望它能显著减少数据库使用的空间,并减少发送给客户端的数据量(更不用说它有点让mongo文档内容难看了)。我说得对吗 如果我对代码中的每个键进行重命名(无需重命名现有数据,我可以从头开始重建),是否有一个好的做法或我应该知道的任何其他建议?注意:

据我所知,每个密钥名都“按原样”存储在mongo数据库中。这意味着字段“名称”将使用4个字母存储在使用它的任何地方

如果我希望我的应用程序能够存储大量数据,那么重命名mongo文档中的每个键是否明智?例如,“名称”将变成“n”,而“描述”将变成“d”

我希望它能显著减少数据库使用的空间,并减少发送给客户端的数据量(更不用说它有点让mongo文档内容难看了)。我说得对吗

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

注意:这主要是推测,我没有基准测试结果来支持这一点

虽然从技术上“缩小”密钥会减少内存/磁盘空间占用的大小,但我认为这样做的好处即使不是真正的缺点,也是非常小的

首先要认识到的是,存储在Mongodb中的数据实际上并不是以原始JSON格式存储的,而是使用标准as以纯二进制形式存储的。这使得Mongo可以进行各种内部优化,例如,如果您使用WiredTiger作为存储引擎(感谢您指出@Jpaljasma)

第二,假设你确实缩小了你的钥匙。那么你需要缩小你的钥匙。每一次。永远。在你的应用程序方面有很多工作要做。此外,在阅读时,您还需要取消对密钥的整理(因为用户不知道
n
是什么)。每一次。永远。突然之间,您的小内存优化变成了运行时的大减速

第三,缩小/取消缩小的过程有点复杂。您需要维护和测试这两者之间的映射,使其保持测试状态,保持最新,并且永远不要有任何重叠(如果您这样做,那么您的所有数据几乎都结束了)。我永远不会在那上面工作

所以总的来说,我认为缩小你的密钥来保存几个字符是一个非常糟糕的想法。重要的是要牢记全局:绝大多数数据将不在键中,而是在值中。如果您想优化数据大小,请查看。

注意:这主要是推测,我没有基准测试结果来支持这一点

虽然从技术上“缩小”密钥会减少内存/磁盘空间占用的大小,但我认为这样做的好处即使不是真正的缺点,也是非常小的

首先要认识到的是,存储在Mongodb中的数据实际上并不是以原始JSON格式存储的,而是使用标准as以纯二进制形式存储的。这使得Mongo可以进行各种内部优化,例如,如果您使用WiredTiger作为存储引擎(感谢您指出@Jpaljasma)

第二,假设你确实缩小了你的钥匙。那么你需要缩小你的钥匙。每一次。永远。在你的应用程序方面有很多工作要做。此外,在阅读时,您还需要取消对密钥的整理(因为用户不知道
n
是什么)。每一次。永远。突然之间,您的小内存优化变成了运行时的大减速

第三,缩小/取消缩小的过程有点复杂。您需要维护和测试这两者之间的映射,使其保持测试状态,保持最新,并且永远不要有任何重叠(如果您这样做,那么您的所有数据几乎都结束了)。我永远不会在那上面工作


所以总的来说,我认为缩小你的密钥来保存几个字符是一个非常糟糕的想法。重要的是要牢记全局:绝大多数数据将不在键中,而是在值中。如果要优化数据大小,请查看那里。

每个文档中都包含每个字段的全名。因此,如果字段名很长,而值很短,则最终可能会生成文档,其中大部分已用空间被冗余字段名占用

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

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


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

每个文档中都包含每个字段的全名。因此,如果字段名很长,而值很短,则最终可能会生成文档,其中大部分已用空间被冗余字段名占用

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

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


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

根据您使用的存储引擎,您的里程可能会有所不同。WiredTiger使用压缩例如,您是否有非常非常长的字段名?如果您不这样做,那么我不认为缩短名称会有任何影响,因为通常情况下,大部分大小由字段值决定。您是否尝试过简单地计算将使用此工具保存的数据库大小?我