`

<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秒左右。

 

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

 

0
0
分享到:
评论

相关推荐

    excel数据导入工具

    然而,当需要将这些数据与更复杂的数据库系统集成时,例如关系型数据库(如MySQL、SQL Server、Oracle)或者NoSQL数据库(如MongoDB),Excel的数据导入工具就显得尤为重要。 该工具通常具备以下关键特性: 1. **...

    MongoDBTest.

    5. **聚合框架**:MongoDB提供了强大的聚合框架,可以进行复杂的数据分析和报告生成,无需将数据导出到其他工具。 6. **备份与恢复**:MongoDB支持多种备份策略,包括oplog tailing、snapshot和云备份,以确保数据...

    json格式文件解析+c# mysql连接(初学者)

    在你的项目中,有一个名为`cfg_mongo_indb_tool`的文件,这可能是用来从MongoDB数据库导入数据到MySQL数据库的工具或配置文件。如果你需要从MongoDB迁移数据到MySQL,你需要先使用MongoDB的驱动程序(如MongoDB....

    Percona-Toolkit-3.0.3

    Percona Toolkit 是一个由一系列高级命令行工具组成的集合,这些工具主要用于执行那些手动操作起来较为困难或复杂的 MySQL、MongoDB 及系统任务。这些工具作为私有或一次性脚本的理想替代方案,不仅经过了专业开发、...

    电信设备-一种财务业务数据的匹配信息处理系统.zip

    3. **自动化流程**:为了提高效率,系统可能实现了自动化处理流程,如自动导入、分类和解析财务数据,自动执行匹配任务,并自动生成报告。这样可以减少人为干预,降低错误率,同时释放人力资源进行更复杂的分析工作...

    Excel导入数据库常用工具

    3. 导入工具:可以使用多种工具将Excel数据导入数据库,比如SQL Server Management Studio (SSMS) 的“导入和导出数据”向导,或者MySQL Workbench的“数据导入/导出”功能。此外,还有一些第三方工具,如ETL(提取...

    navicat说明书,“Navicat”是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、Postg

    - **导入向导**:支持从 CSV、XML 等格式导入数据。 - **导出向导**:可以将数据导出为多种格式。 #### 十、总结 Navicat 作为一款全面的数据库管理工具,不仅满足了专业开发者的高级需求,还为新手提供了易于上手...

    navicat 16的使用说明

    - **导入向导**: 支持从各种文件格式导入数据到数据库。 - **导出向导**: 支持将数据库中的数据导出为不同的文件格式。 - **数据传输**: 在不同类型的数据库之间传输数据。 通过以上详细介绍可以看出,Navicat 16...

    【国开搜题】国家开放大学 一网一平台 24春数据库应用试卷包03 期末考试押题试卷.docx

    - MySQL 安装后会自动生成几个系统数据库,用于存储系统级别的信息。 - **系统数据库**:这些系统数据库包括`information_schema`、`mysql`、`performance_schema`和`sys`等。 - **解析**:本题答案为A、C、D。 ...

    a5m2数据库客户端(Postgresql,MySQL,Oracle等等主流数据库)

    用户可以直接将表中的数据复制粘贴到Excel中进行处理,或者从Excel粘贴数据回到数据库表,极大地提高了数据导入导出的效率。 3. **数据差异比较**:A5M2提供了一项实用的功能,即首次执行和再次执行的数据差异比较...

    数据库抽出脚本并生成代码的工具

    标题中的“数据库抽出脚本并生成代码的工具”是指一类能够帮助用户从数据库中抽取结构化数据,并将其转换为可执行的SQL脚本或者自动生成相应的编程代码的软件工具。这些工具通常用于数据库备份、迁移、同步或者数据...

    2021-2022计算机二级等级考试试题及答案No.10197.docx

    - 数据库的例子包括关系型数据库(如 MySQL)、文档数据库(如 MongoDB)等。 #### 7. 数据模型描述的内容 - **知识点**: 数据模型所描述的主要内容。 - **详细解释**: - 数据模型描述了数据的结构、操作和约束...

    亚马逊全网爬虫文档1

    - 存储系统设计:考虑数据库选择(如MySQL、MongoDB)和数据备份策略。 - 部署与监控:设置定时任务,监控爬虫运行状态,及时发现并解决问题。 二.亚马逊美国站爬虫软件设计 1. 类目 - 根据产品类别进行分类...

    基于Python语言的教学数据处理平台设计-游颖.pdf

    平台采用数据库管理系统来存储教学数据,如MySQL、PostgreSQL或MongoDB,这些系统能够高效管理和查询大量结构化或非结构化数据。 6. Web开发框架 为了实现用户界面和交互功能,平台可能采用Django或Flask这样的...

    Python库 | raffiot-0.6.0.tar.gz

    4. **存储接口**:`raffiot`可能支持多种数据存储解决方案,如数据库(如SQLite、MySQL、MongoDB)、文件系统或云存储服务(如Amazon S3)。这些接口使开发者能轻松地将物联网数据保存和组织起来。 5. **数据分析与...

    全国各省市峰值日照时数查询表.docx

    - **NoSQL数据库**(如MongoDB、Cassandra):适用于非结构化或半结构化数据的存储,可以提供更高的可扩展性和灵活性。 - **文件存储**(如CSV、Excel):适用于小规模数据的存储和共享,便于导入导出。 ### 3. ...

    印度尼西亚邮政编码:MySQL PostgreSQL JSON Csv:印度尼西亚邮政编码数据库(数据库Kode Pos Indonesia-Kelurahan-Kecamatan-Kota)

    标题和描述中提到的是一个关于印度尼西亚邮政编码的数据资源,包含了多个格式,如MySQL、PostgreSQL、JSON和Csv,方便在不同环境下使用。这些数据提供了印度尼西亚的邮政编码信息,结合了行政区域级别,如村庄...

    数据库navicate 12 最新说明

    Navicat的最新版本不仅增强了用户体验,还引入了多项新功能,旨在提高数据处理的效率和安全性。 **安装** 安装Navicat的过程简单直观,只需按照安装向导的指示进行即可。安装过程中可以选择自定义安装选项,包括...

Global site tag (gtag.js) - Google Analytics