Нужны ответы относительно MongoDB, настроенного на локальном компьютере для большого количества данных - PullRequest
0 голосов
/ 16 мая 2018

У меня есть данные более 200 ГБ, они в формате JSON и CSV и более 300 миллионов строк (документов).

Я хочу сохранить его в базе данных MongoDB. Я хочу знать, что требование к машине для обработки этого процесса, как хранение и поиск и манипулирование данными. Кроме того, сколько времени потребуется для поиска данных из целых данных?

1 Ответ

0 голосов
/ 16 мая 2018

IMO, технический выбор зависит от вашей структуры данных и от того, как использовать эти данные.Ниже ответ предполагал, что вы сохраняете все данные в одну коллекцию в одном экземпляре mongodb на одном компьютере .


В прошлом я проводил эксперимент для проверки производительности mongodb.с большими данными.Я поделюсь с вами результатом.

Объем данных

  • Количество данных: 1 млрд.
  • формат документа: 4 поля (ObjectID + Int + String + Date) ~ 200 байт / документ
  • Все документы хранятся в одной коллекции

Аппаратное обеспечение

  • Процессор: Intel (R) Xeon (R) Процессор E5-2620 v2 @ 2,10 ГГц (4 ядра)
  • ОЗУ: 32 ГБ
  • Диск: 2 ТБ Дисковое устройство LSI MRSASRoMB-8i SCSI

Программное обеспечение

  • ОС: Redhat Sever6.4-X86-64 с Ext4
  • Mongodb: 3,2 x64 (engine: wireTiger, cacheSize установлен на 28 ГБ)

Результат теста

Производительность вставки

Перед созданием индекса: без дополнительного индекса (только индекс _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                ║
╚═══════════════════╩═══════════════════════╩══════════════════════╝

Индекс компоновки

Если индекс компоновки по строковому полю уже после 1 миллиарда документов в коллекции, это т~ 3 часа до завершения.

Потребление ОЗУ

В тесте вставки, когда заканчивается весь накопитель (28 ГБ), скорость вставки падает.

Заключение

  1. Нет большой разницы между индексами до и после индекса в производительности вставки. (В моем случае, я не уверен, когда создано много индексов)

  2. Mongodb, как правило, использует столько оперативной памяти, сколько может, если у вас большие горячие данные, вам лучше предоставить для них большую оперативную память.

  3. Если построен хороший индекс, тоПроизводительность запросов на уровне миллиардов данных хорошая.

  4. Построение индекса для больших данных будет стоить вам много времени.

...