引言

做这件事情之前,首先

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亿级别---数据生成及高效率导入相关推荐

  1. 基于easyexcel的MySQL百万级别数据的excel导出功能

    前言 最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了. 这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助. 原始需求:用户在U ...

  2. JAVA向Mysql插入亿级别数据---测评

    http://blog.csdn.net/q6834850/article/details/73726707 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 利用JAVA向My ...

  3. 如何生成可导入数据库的亿级别数据

    1. 使用python脚本可以轻松生成满足条件的数据,具体如下 #coding: utf-8 import os, sys, time, datetime from itertools import ...

  4. ElasticSearch 在数十亿级别数据下,如何提高查询效率?

    来源:https://zhuanlan.zhihu.com/p/60458049 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就 ...

  5. 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化

    1.概述 转载:https://zhuanlan.zhihu.com/p/60458049 这里面主要有个filesystem cache 服务这个想法很好. 面试题 es 在数据量很大的情况下(数十 ...

  6. clickhouse 在货拉拉的应用实践,千亿级别数据实现秒级查询

    作者:扬大平仔 前携程.网易高级工程师,现为货拉拉高级工程师.热爱技术,敢于将新技术用于项目实践. 前言 为了解决线上问题定位慢,相应不及时等问题.所以我们决定开发一套智能问题定位系统.对于我们的一些 ...

  7. Hadoop+Spark+MongoDB+MySQL+C#大数据开发项目最佳实践

    一.前言 随着IT技术的飞速发展,各行各业都已在广泛尝试使用大数据技术提供更稳健和优质的服务.目前,医疗IT系统收集了大量极具价值的数据,但这些历史医疗数据并没有发挥出其应有的价值.为此,本文拟利用医 ...

  8. mysql 亿级别秒查_mysql亿级数据查询方法说明

    mysql在查询上千万级数据的时候,通过索引可以解决大部分查询优化问题.但是在处理上亿数据的时候,需要用到的东西就超出索引的范围了. 数据表(日志)是这样的: 表大小:1T,约24亿行: 表分区:按时 ...

  9. 使用mongodb处理上亿级别数据

    最近接到一个任务关于效能监控平台的开发,该效能平台要求监控日志的发送量以及成功率等信息,了解到需求,由于每天将会有平均200万的日志信息,最大接近400万,这数据还是十分庞大的,哪么半年下来起码有6亿 ...

最新文章

  1. Winograd,GEMM算法综述(CNN中高效卷积实现)(下)
  2. gorm preload 搜索_macOS系统本地文件搜索工具
  3. 手动爬虫之流程笔记1(python3)
  4. 总结缓存使用过程中的几种策略以及优缺点组合分析
  5. 2016年10月计算机网络技术,2016年10月自考计算机网络技术练习题及答案(2)
  6. Python笔记-Json转DataFrame(基金主题Json数据)
  7. numpy.reshape(与ndarray.reshape一样)使用方法
  8. 安卓application_安卓系统蓝牙配对流程分析
  9. html5表单与Jquery Ajax结合使用
  10. PS打造电影金属字体
  11. bootstrap表格标题Caption位于表格下方的原因
  12. 电信9530手机上面使用移动的SIM卡
  13. 请推荐几个程序员面试时自我介绍的范文!
  14. 机器学习 - 线性模型
  15. 干货 | 网络安全等级保护安全建设整改的流程、方法
  16. 面试题:一头牛重800公斤,一座桥承重700公斤,牛应该怎么过桥
  17. “无剑胜有剑”软件大师之路的一点探索(一)
  18. “跳槽”一词的来历竟然是这样!汗
  19. 【ceph】ceph osd blacklist cep黑名单|MDS问题分析
  20. 东华大学计算机专业分数线,2019年东华大学各专业录取分数线

热门文章

  1. 调用语音验证码的接口与图形验证码框架
  2. 《可用性测试手册(第2版)》一第1章 什么造就了可用性1.1 “可用”究竟是什么...
  3. scp命令报错-bash: scp: command not found
  4. (一二四)给类对象赋值、以及类对象的返回值
  5. Tripwire安装
  6. NodeJs+Qunit的使用方式
  7. 创建线程的函数CreateThread
  8. 3.Event Delegate
  9. jQuery的before()方法和after()方法
  10. bzoj3771: Triple