您所指的通常被称为"密钥压缩"*.它没有得到实施有几个原因:
- 如果您想完成,目前可以在应用程序/ORM/ODM级别轻松完成.
- 在所有情况下,这不一定都是性能**的优势——想想有很多键名的集合,和/或文档之间差异很大的键名.
- 在拥有数百万个文档之前,它可能根本无法提供可测量的性能优势.
- 如果服务器这样做了,则必须通过网络传输完整的密钥名.
- 如果通过网络传输压缩的密钥名,则使用javascript控制台会影响可读性really.
- 压缩整个JSON文档可以提供更好的性能优势.
和所有功能一样,实现它也有成本效益分析,而且(至少到目前为止)其他功能提供了更多的"划算".
对于future 的MongoDB版本,完整文档压缩正在考虑中 从3.0版开始提供(见下文)
*内存中的键名查找表基本上是LZW风格压缩的一种特殊情况——这或多或少是大多数压缩算法所做的.
**压缩提供了空间优势和性能优势.较小的文档意味着每个IO可以读取更多的文档,这意味着在具有固定IO的系统中,每秒可以读取更多的文档.
使现代化
MongoDB 3.0及更高版本现在拥有WiredTiger存储引擎的完整文档压缩功能.
有两种压缩算法:snappy和zlib.其目的是让snappy成为全面性能的最佳 Select ,让zlib成为最大存储容量的最佳 Select .
在我个人(非科学,但与商业项目有关)的实验中,snappy compression(我们没有判断zlib)提供了显著提高的存储密度,但没有明显的净性能成本.事实上,在某些情况下表现稍好一些,与我之前的 comments /预测大致一致.