需要有关 MongoDB 在本地计算机上设置大量数据的答案
Need answers regarding MongoDB set up on local machine for lot of data
我有超过 200gb 的数据,它是 JSON 和 CSV 格式,超过 3 亿行(文档)。
我想将其存储在 MongoDB 数据库中。我想知道机器有什么要求来处理这个过程,比如数据的存储、检索和操作。另外从整个数据中搜索数据需要多长时间?
IMO,技术选择取决于您的数据结构以及如何使用这些数据。下面的答案 假设您将所有数据存储到单个 mongodb 实例中的单个集合中,在单个机器 .
我以前做过一个实验,用大数据测试mongodb的性能。我会把结果分享给你。
数据量
- 数据量:10亿
- 文件格式:4个字段(ObjectID + Int + String + Date) ~ 200Bytes/document
- 所有文档都存储在一个集合中
硬件
- CPU:英特尔(R) 至强(R) CPU E5-2620 v2 @ 2.10Ghz(4 核)
- 内存:32GB
- 磁盘:2TB LSI MRSASRoMB-8i SCSI 磁盘设备
软件
- OS: 带 Ext4 的 Redhat Sever6.4-X86-64
- Mongodb:3.2 x64(引擎:wireTiger,cacheSize 设置为 28GB)
测试结果
插入性能
创建索引前:没有附加索引(只有默认_id索引)
创建索引后:在字符串字段上多加一个索引
╔══════════════════════╦═══════════════════════╦══════════════════════╗
║ ║ Before index creation ║ After index creation ║
╠══════════════════════╬═══════════════════════╬══════════════════════╣
║ Single thread insert ║ 656/s - 746/s ║ 534/s - 712/s ║
║ 10 Threads insert ║ 3817/s - 3964/s ║ 3306/s - 3389/s ║
╚══════════════════════╩═══════════════════════╩══════════════════════╝
查询性能
按字符串字段查询
╔═══════════════════╦═══════════════════════╦══════════════════════╗
║ ║ Before index creation ║ After index creation ║
╠═══════════════════╬═══════════════════════╬══════════════════════╣
║ Return 1 document ║ 1268904 ms ║ 15 ms ║
╚═══════════════════╩═══════════════════════╩══════════════════════╝
建立索引
如果在集合中已有 10 亿个文档后在字符串字段上建立索引,需要约 3 小时才能完成。
内存消耗
insert测试中,当cahce(28GB)全部用完后,insert速度会下降
结论
索引前和索引后插入性能没有太大区别。(在我的情况下,不确定何时创建了很多索引)
Mongodb倾向于尽可能多地使用RAM,如果您有大量热数据,最好为其提供大RAM。
如果建立好的索引,那么百亿级别的查询性能也不错。
在大数据上建立索引会花费你很多时间。
我有超过 200gb 的数据,它是 JSON 和 CSV 格式,超过 3 亿行(文档)。
我想将其存储在 MongoDB 数据库中。我想知道机器有什么要求来处理这个过程,比如数据的存储、检索和操作。另外从整个数据中搜索数据需要多长时间?
IMO,技术选择取决于您的数据结构以及如何使用这些数据。下面的答案 假设您将所有数据存储到单个 mongodb 实例中的单个集合中,在单个机器 .
我以前做过一个实验,用大数据测试mongodb的性能。我会把结果分享给你。
数据量
- 数据量:10亿
- 文件格式:4个字段(ObjectID + Int + String + Date) ~ 200Bytes/document
- 所有文档都存储在一个集合中
硬件
- CPU:英特尔(R) 至强(R) CPU E5-2620 v2 @ 2.10Ghz(4 核)
- 内存:32GB
- 磁盘:2TB LSI MRSASRoMB-8i SCSI 磁盘设备
软件
- OS: 带 Ext4 的 Redhat Sever6.4-X86-64
- Mongodb:3.2 x64(引擎:wireTiger,cacheSize 设置为 28GB)
测试结果
插入性能
创建索引前:没有附加索引(只有默认_id索引) 创建索引后:在字符串字段上多加一个索引
╔══════════════════════╦═══════════════════════╦══════════════════════╗
║ ║ Before index creation ║ After index creation ║
╠══════════════════════╬═══════════════════════╬══════════════════════╣
║ Single thread insert ║ 656/s - 746/s ║ 534/s - 712/s ║
║ 10 Threads insert ║ 3817/s - 3964/s ║ 3306/s - 3389/s ║
╚══════════════════════╩═══════════════════════╩══════════════════════╝
查询性能
按字符串字段查询
╔═══════════════════╦═══════════════════════╦══════════════════════╗
║ ║ Before index creation ║ After index creation ║
╠═══════════════════╬═══════════════════════╬══════════════════════╣
║ Return 1 document ║ 1268904 ms ║ 15 ms ║
╚═══════════════════╩═══════════════════════╩══════════════════════╝
建立索引
如果在集合中已有 10 亿个文档后在字符串字段上建立索引,需要约 3 小时才能完成。
内存消耗
insert测试中,当cahce(28GB)全部用完后,insert速度会下降
结论
索引前和索引后插入性能没有太大区别。(在我的情况下,不确定何时创建了很多索引)
Mongodb倾向于尽可能多地使用RAM,如果您有大量热数据,最好为其提供大RAM。
如果建立好的索引,那么百亿级别的查询性能也不错。
在大数据上建立索引会花费你很多时间。