2013-03-31 6 views
2

Я изо всех сил пытаюсь развернуть большую базу данных. Я развернул 3 кластера черепа и начал индексировать мои данные. Однако прошло уже 16 дней, и я только на полпути.Mongodb Sharding and Indexing

Вопрос в том, должен ли я импортировать все данные в незашифрованный кластер, а затем активировать очертание, когда необработанные данные находятся в базе данных, а затем присоединить больше кластеров и начать индексирование? Будет ли это автоматический баланс моих данных?

Или я должен ждать еще 16 дней для текущего метода я использую ...

* Edit: Вот еще объяснение настройки и данные, которые импортируются ...

Так у нас есть 160 миллионов документов, которые, как этого

"_id" : ObjectId("5146ae7de4b0d58a864bcfda"), 
"subject" : "<concept/resource/propert/122322xyz>", 
"predicate" : "<concept/property/os/123ABCDXZYZ>", 
"object" : "<http://host/uri_to_object_abcdy>" 

Индексы: субъект, предикат, объект, субъект> предикат, объект> предикат осколок ключи: субъект, предикат, объект

Установка: 3 кластеров на AWS (каждый с 3 наборами реплики) с каждым узлом, имеющим 8 GIB RAM (сервера Config находятся в пределах каждого кластера и Mongos находится в отдельном сервере)

Данные получает импортируемый Java-программа в Mongos. Каким будет идеальный способ импорта этих данных, индекса и осколка. (без ожидания в месяц для завершения процесса)

+0

Какой ключ осколка вы используете? Сколько записей вы импортируете и их размер? Какую пропускную способность вы получаете? Как правило, вы должны импортировать в осколочный кластер и не «обманывать позже» ... Хотя это возможно, это боль – Nick

+0

Существует около 160 миллионов документов, каждая из которых содержит по меньшей мере 5 индексов и 5 ключей осколка ... – Reza

+0

Обычно , для импорта этих же данных требуется 2 часа и почти полдня для индексации. (в одном монголе) – Reza

ответ

1

Если вы делаете массивную вставку, часто быстрее выполнять вставку без индекса, а затем индексировать коллекцию. Это связано с тем, как Mongo управляет обновлением индексов на лету.

Кроме того, MongoDB особенно чувствителен к памяти, когда он индексирует. Проверьте размер ваших индексов в db.stats() и подключите свои БД к Mongo Monitoring Service.

По моему опыту, когда MongoDB занимает гораздо больше времени, чем ожидалось, это связано с одной из двух вещей:

  1. Она работает из физической памяти или получить себя в бедном I шаблон/O , MMS может помочь диагностировать оба. Проверьте, в частности, график ошибок страниц.

  2. Работа с неиндексированными коллекциями, которая не применяется в вашем случае.

+0

Спасибо, сим. Я сейчас анализирую с помощью MMS – Reza

+0

Ваш анализ показал что-нибудь интересное? – Sim