MongoDB | Mysql亿级别---数据生成及高效率导入
引言
做这件事情之前,首先
1. 对于MySQL,首先需要改改mysql的默认存储路径,以免因为硬盘分区或者挂载容量的问题,导致数据插入不成功。
两个解决方案:
http://dba.stackexchange.com/questions/24403/change-existing-datadir-path
http://stackoverflow.com/questions/1795176/how-to-change-mysql-data-directory
2. 对于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(非关系型存储)对于批量数据插入效率较高
2. 生成数据的标准格式参照 --- https://dev.mysql.com/doc/refman/5.5/en/loading-tables.html (tab分隔字段)
实际中,用Python脚本生成的数据文件(txt) 大小为10GB左右,索引大小为1.7G左右。
3. 将txt文件导入mysql --- https://dev.mysql.com/doc/refman/5.5/en/loading-tables.html,耗时20--30分钟。 生成数据库大小为12GB -- 13 GB
mysql> LOAD DATA LOCAL INFILE '/path/device.txt' INTO TABLE device;
4. 按索引进行查询(非索引覆盖),普通硬盘的访问时间5秒,SSD在0.3--0.5秒,由此看出,瓶颈在硬盘读写。
MONGODB
参考资料:https://www.khalidalnajjar.com/insert-200-million-rows-into-mongodb-in-minutes/
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秒左右。
个人感觉,所谓的数据的插入和查询,相比较而言只不过是空间和时间的相互转化利用。
MongoDB | Mysql亿级别---数据生成及高效率导入相关推荐
- 基于easyexcel的MySQL百万级别数据的excel导出功能
前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在U ...
- JAVA向Mysql插入亿级别数据---测评
http://blog.csdn.net/q6834850/article/details/73726707 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 利用JAVA向My ...
- 如何生成可导入数据库的亿级别数据
1. 使用python脚本可以轻松生成满足条件的数据,具体如下 #coding: utf-8 import os, sys, time, datetime from itertools import ...
- ElasticSearch 在数十亿级别数据下,如何提高查询效率?
来源:https://zhuanlan.zhihu.com/p/60458049 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就 ...
- 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化
1.概述 转载:https://zhuanlan.zhihu.com/p/60458049 这里面主要有个filesystem cache 服务这个想法很好. 面试题 es 在数据量很大的情况下(数十 ...
- clickhouse 在货拉拉的应用实践,千亿级别数据实现秒级查询
作者:扬大平仔 前携程.网易高级工程师,现为货拉拉高级工程师.热爱技术,敢于将新技术用于项目实践. 前言 为了解决线上问题定位慢,相应不及时等问题.所以我们决定开发一套智能问题定位系统.对于我们的一些 ...
- Hadoop+Spark+MongoDB+MySQL+C#大数据开发项目最佳实践
一.前言 随着IT技术的飞速发展,各行各业都已在广泛尝试使用大数据技术提供更稳健和优质的服务.目前,医疗IT系统收集了大量极具价值的数据,但这些历史医疗数据并没有发挥出其应有的价值.为此,本文拟利用医 ...
- mysql 亿级别秒查_mysql亿级数据查询方法说明
mysql在查询上千万级数据的时候,通过索引可以解决大部分查询优化问题.但是在处理上亿数据的时候,需要用到的东西就超出索引的范围了. 数据表(日志)是这样的: 表大小:1T,约24亿行: 表分区:按时 ...
- 使用mongodb处理上亿级别数据
最近接到一个任务关于效能监控平台的开发,该效能平台要求监控日志的发送量以及成功率等信息,了解到需求,由于每天将会有平均200万的日志信息,最大接近400万,这数据还是十分庞大的,哪么半年下来起码有6亿 ...
最新文章
- Winograd,GEMM算法综述(CNN中高效卷积实现)(下)
- gorm preload 搜索_macOS系统本地文件搜索工具
- 手动爬虫之流程笔记1(python3)
- 总结缓存使用过程中的几种策略以及优缺点组合分析
- 2016年10月计算机网络技术,2016年10月自考计算机网络技术练习题及答案(2)
- Python笔记-Json转DataFrame(基金主题Json数据)
- numpy.reshape(与ndarray.reshape一样)使用方法
- 安卓application_安卓系统蓝牙配对流程分析
- html5表单与Jquery Ajax结合使用
- PS打造电影金属字体
- bootstrap表格标题Caption位于表格下方的原因
- 电信9530手机上面使用移动的SIM卡
- 请推荐几个程序员面试时自我介绍的范文!
- 机器学习 - 线性模型
- 干货 | 网络安全等级保护安全建设整改的流程、方法
- 面试题:一头牛重800公斤,一座桥承重700公斤,牛应该怎么过桥
- “无剑胜有剑”软件大师之路的一点探索(一)
- “跳槽”一词的来历竟然是这样!汗
- 【ceph】ceph osd blacklist cep黑名单|MDS问题分析
- 东华大学计算机专业分数线,2019年东华大学各专业录取分数线
热门文章
- 调用语音验证码的接口与图形验证码框架
- 《可用性测试手册(第2版)》一第1章 什么造就了可用性1.1 “可用”究竟是什么...
- scp命令报错-bash: scp: command not found
- (一二四)给类对象赋值、以及类对象的返回值
- Tripwire安装
- NodeJs+Qunit的使用方式
- 创建线程的函数CreateThread
- 3.Event Delegate
- jQuery的before()方法和after()方法
- bzoj3771: Triple