2017-01-22 16 views
0

Я хочу очернить мою базу данных MongoDB. У меня высокая скорость вставки и я хочу равномерно распределить документы на двух осколках.сбор shardkey для mongodb

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

{ 
    Timestamp : ISODate("2016-10-02T00:01:00.000Z"), 
    Machine_ID: "100", 
    Temperature:"50" 
} 

Если это мой документ, и у меня есть 100 000 различных машин, будет ли Machine_ID подходящей shardkey? И если да, то как MongoDB распределит его по осколкам, т. Е. Должен ли я сам определять диапазон осколков? например, поставить Machine_ID 0-49,999 на осколках A и 50 000-100 000 на осколках B?

+1

Был ли мой ответ полезным? – guymaor86

ответ

1

Я думаю, что Machine_ID был бы подходящим ключом осколка, если ваши запросы впоследствии будут на машину, т. Е. Получить все температуры для конкретной машины на определенный временной интервал. Подробнее о ключах осколков можно найти здесь: Choosing shard key

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

0

Если ваш кластер имеет только два осколка, то для него нетрудно проектировать. Однако, если ваши данные будут продолжать расти, и у вас будет намного больше осколков, тогда выбор ключа осколка будет более сложным.

Например, если на некоторых машинах имеется гораздо больше записей, чем у других (например, одна машина имеет 3000 записей, то есть 3% от общего числа), то это не вызывает проблем только с двумя осколками. Но если ваши данные растут так, что вам нужно 100 осколков, а одна машина по-прежнему имеет 3% от общего числа, то Machine_ID больше не является хорошим выбором: поскольку записи одной машины должны быть одним куском и не могут быть распределены по нескольким осколки.

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