新手来了。
TL;DR :在MongoDB中压缩数据的最佳方法是什么?它会比其他数据库系统占用更多的空间吗?
我想为类似论坛的东西创建一个数据库。我开始学习MySQL,但我不需要一个关系数据库管理系统来满足我的需要(我的大多数关系是1比1(最多是1比1),即使我有一点数据冗余,我宁愿将信息存储为文档的字段和值对,我认为对于JSON来说,它比在MySQL中加入很多表要快得多。与SQL相比,我更喜欢JavaScript。
但是现在看看存储需求,我找不到像TINYINT、CHAR(3)等。我想降低服务器空间的成本,但同时记录了很多信息(时间、评级、投票、评论、标签、因果报应、收藏等等)。我希望我错了,但是MySQL似乎浪费了相当少的空间(尽管我认为这是由MongoDB来弥补的)。
在MongoDB中减少大小的最佳实践是什么?我是否完全错误地认为MongoDB比MySQL和其他DB占用更多的空间(忽略在MySQL中连接表以避免数据冗余的好处)?
到目前为止,这些是我在上面找到的最好的文章:
如何限制MongoDB数据库的大小(数据库上的力大小限制)
https://www.compose.com/articles/sizing-and-trimming-your-mongodb/(cap数据库和发布预取空间)
https://docs.mongodb.com/manual/reference/command/compact/(使用compact,特别是在WiredTiger DB上)
https://stackoverflow.com/questions/2966687/reducing-mongodb-database-file-size(修复数据,与上面相同)
正如@Fyodor在他的回答中所提醒的那样,还有两个压缩算法: snappy和zlib。
谢谢你的建议!
发布于 2017-01-16 16:00:17
由于数据没有标准化,存储需求通常更大。
别忘了压缩。当您使用gzip时,它将使用更多的CPU功率,但是磁盘大小要比snappy小得多。这取决于你的数据。
一些MongoDB顾问对不同的压缩算法进行了基准测试,但这个文件并不公开。也许一些MongoDB的人提供了一个改进的答案;)
Snappy (默认启用)-非常好的压缩,有效地利用资源zlib (类似于gzip) -出色的压缩,但更多的资源密集型参见启动参数storage.wiredTiger.collectionConfig.blockCompressor
默认值:版本3.0.0中的snappy。用于压缩集合数据的默认压缩类型。在创建集合时,可以在每个集合的基础上重写此操作。可用的压缩器是: none storage.wiredTiger.collectionConfig.blockCompressor影响所有创建的集合。如果在现有的storage.wiredTiger.collectionConfig.blockCompressor部署中更改MongoDB的值,则所有新集合都将使用指定的压缩程序。现有的集合将继续使用在创建它们时指定的压缩程序,或者在那时使用默认的压缩器。
https://dba.stackexchange.com/questions/161069
复制相似问题