mongodb能存储excel文件吗_文本文件在MongoDB中的存储大小

前言

项目中使用MongoDB存储文本数据,通过pymongo连接DB提供python查询接口。原始文件每天增长,项目需要评估MongoDB服务器使用什么规格的硬盘,那么当文本文件存入MongoDB后,相比原始文件,MongoDB磁盘占用多少,压缩率如何,怎么可以优化磁盘占用空间。本文尝试解答这些问题。

测试步骤

测试文件:

csv文件,13,515,366行,22列 文件大小: 4.6G

(csv文件使用mongodb是因为不同的csv文件中列是不同的)

测试方法:

测试三种情况下,MongoDB中collection大小情况。

  1. 使用mongoimport将数据导入MongoDB
  2. 在第一情况下,enable mongoimport的ignoreBlanks参数
  3. 将csv文件的header都改为比较小的,如c1,c2,...,c22。

在mongo shell中查看collection的状态信息。

db.your_collection.stats(scale=1024*1024)
{
        "ns" : "kmjones.lahaina.NV.REV003_MSIP_Volume_CT_AZ5FV_17.csv",
        "size" : 9078,
        "count" : 13515366,
        "avgObjSize" : 719,
        "storageSize" : 980,
        ........
}

size:collection 大小 avgObjSize:每一行数据的大小 storageSize:collection占用的磁盘空间

测试结果:

ef17f305dd99991b025718abcc36a579.png

相比原始csv,MongoDB中会增加一列,ObjectID 大小为:13515367 * 12 /1024/1024 = 154.67 MB

除去ObjectID大小,MongoDB有 4.6G / (980 - 155)MB = 5.6x的压缩比例。

当忽略csv中空数据后,磁盘空间更小。csv的header因为在json数据时需要重复,所以小header可以减少磁盘占用。

总结:

  • MongoDB默认存储引擎是WiredTiger,snappy压缩。本测试中相较原始文件,有~5x压缩率,供硬件设施规划参考。
  • 导入文件时候忽略空的列,能够减少磁盘占用空间,但不能区分没有此列和此列为空的情形。如果此信息不重要,可以打开ingore blank以节省空间。
  • csv文件的header会占用空间,因为转为JSON文件时,header会存在每个document中,所以尽量让header更小。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值