mongodb 亿级别 mysql_<MongoDB | Mysql>亿级别---数据生成及高效率导入

引言

做这件事情之前,首先

对于mysql,首先需要改改mysql的默认存储路径,以免因为硬盘分区或者挂载容量的问题,导致数据插入不成功。

两个解决方案:

对于mongodb,只需要改一下启动时命令行的存储路径。

MYSQL

1. 建表 (仅列举三个字段, 实际当中为20+ 字段)

create table device (

id int not null auto_increment,

deviceID char(16),

createDate TIMESTAMP default current_timestamp,

primary key(id)

) ENGINE=MYISAM DEFAULT CHARSET=utf8;

CREATE INDEX did_index ON device (deviceID) USING BTREE;

相比于默认的INNODB引擎,MYISAM(非关系型存储)对于批量数据插入效率较高

实际中,用python脚本生成的数据文件(txt) 大小为10GB左右,索引大小为1.7G左右。

mysql> LOAD DATA LOCAL INFILE '/path/device.txt' INTO TABLE device;

4. 按索引进行查询(非索引覆盖),普通硬盘的访问时间5秒,SSD在0.3--0.5秒,由此看出,瓶颈在硬盘读写。

MONGODB

1. mongodb启动时,关闭journal。

$ mongod --nojounal --dbpath /sandbox/mongo_data --port 27018

2. 访问mongodb

$ mongo localhost:27018/test1

3. 导入数据 (可以去官网查询import的具体参数细节)

$ mongoimport --db test1 --host localhost --port 27018 --collection device --drop --type tsv --headerline --file /sandbox/device_tsv.tsv --numInsertionWorkers 8

note: 为了提高mongodb的插入效率,我们可以采用mongodb推荐的(numInsertionWorkers)多线程操作。本质来说,就是将insert任务,拆分成多个线程来做。

a. mongodb 导入数据文件格式不支持txt, 但是支持tsv --- 数据记录用tab分隔的文件格式

b. 脚本生成的数据大小为10GB -- 11GB (device_tsv.tsv)

c. 在导入数据前,不生成索引。在数据批量插入以后生成,可以大大提高插入效率。

d. 实际导入数据库后,发现指定目录的数据存储为218GB。 导入时间不足一小时。

e. 但是查询效率表现不俗,在普通硬盘上按索引查询,在0.5秒左右。

个人感觉,所谓的数据的插入和查询,相比较而言只不过是空间和时间的相互转化利用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值