需要有关 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速度会下降

结论

  1. 索引前和索引后插入性能没有太大区别。(在我的情况下,不确定何时创建了很多索引)

  2. Mongodb倾向于尽可能多地使用RAM,如果您有大量热数据,最好为其提供大RAM。

  3. 如果建立好的索引,那么百亿级别的查询性能也不错。

  4. 在大数据上建立索引会花费你很多时间。