MongoDB使用巨大的阵列减小文档的大小
问题描述:
我有一个设备,它从不同的侧面积累温度并每秒钟将它们保存到数据库中。对于每一个测量我的下一份文件:MongoDB使用巨大的阵列减小文档的大小
{
"_id" : ISODate("2017-05-05T22:07:37.924Z"),
"north_side" : [ 2660 elements * Int32 ],
"east_side" : [ 1330 elements * Int32 ],
"south_side" : [ 2660 elements * Int32 ],
"west_side" : [ 1330 elements * Int32 ]
}
这里_id
是一个时间戳,测量完成时。并为每一方完成温度阵列。完全装置每秒测量7980个温度(以uint16_t格式)。但是,将所有这些测量结果存储一个月将占用太多空间。
我从db.getCollection('temperatures').stats()
得到一个统计数据,它显示avgObjSize = 75445
字节。它每月大约6.5 GB。
存储7980温度与32位(我是否*使用32位,因为mongodb没有16位值?)将需要31920字节。对于还有哪些mongodb使用43525个字节的数据,以及如何减少这个值?
答
我假设温度在小数点后面有数字,所以它们不是整数。无论如何,mongo“默认情况下将所有数字视为64位浮点双精度值。”
所以这是每个数字8个字节,而不是4更接近你指的是平均的对象大小,其余的,我想,是控制值,数组大小等
你可以降低通过进行合理的简化(例如每边只存储一个双精度值),然后仅以十分之一或百分之一(1/10,1/100)存储差异,并将整个集合存储为仅一个字符串。像
99|101|67|-13|-23|9|17 ...
更新:甚至更好,如果你的语言支持编组,然后在内存中创建强类型的阵列和存储编组对象。仅仅将差异存储为双数的整数仍然有帮助。
感谢您的建议,我会尝试其中的一些。温度存储为Int32值,而不是Double。 – Serbin