最近在做医保检查,被检查的数据是 csv 格式,一般都是从目标数据库中导出的。被检查的数据都是医保收费项目,一年的住院药品、非药品收费项目达到3000万条是非常正常的。
3000万条数据一般有多大?
如果不告诉你 csv 文件大小,只告诉你 csv 文件的行数,你能否大致估出来文件大小?
我们简化一下题目,3000万个空行会占多少空间?如果 csv 文件每一行都是空行,即只有一个换行符。3000万个换行符占多少空间?
一个换行符'n'占一个字节。一个字节为1B,1024B = 1KB,1024KB = 1MB,1024MB = 1GB
-
1GB = 1,073,741,824 B
-
1MB = 1,048,576 B
-
1KB = 1,024 B
1GB 大概约等于 1000 x 1000 x 1000 = 1,000,000,000 即 10 亿字节,3000万个换行相当于 30,000,000 B 约等于 0.03 GB
即3000万条空行数据相当于30M,如果一行有100个英文字符,而不是空行,那么数据量为 0.03 GB X 100 = 3 GB。如果不是英文字符,而是100个中文字符。根据编码类型,UTF-8 中文编码占三个字节,GB2312 中文编码占两个字节。
如果 csv 文件使用 UTF-8 编码,一行中有 100个中文字符,3000万条数据,大概占 0.03GB X 100 X 3 = 9 GB
3000万条数据导入到数据库中需要多少时间?
根据网速、数据量大小,我们可以估计出最快速度。但考虑到数据库性能,一般不会达到最快速度。
9G的文件,通过千兆网线,最快需要 73 秒,即1分钟多一点。千兆网线满速一分钟可以传 7 个G。这是估算的最快速度,实际上达不到这么快。
比如:
使用 spoon 导入,速度大概 38000条/每秒,3500万条数据导入到数据库中大概需要 35000000/38000/60 = 15 分钟
全文完。
原文始发于微信公众号(生有可恋):3000万条数据有多大
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论