2014-02-11 2 views
0

Я собираюсь переместить мой 500-миллиметровый стол строк из postgresql в очерченную коллекцию в MongoDB. Я нахожусь в середине выбора правильного ключа.MongoDB: используя modulo для вычисления ключа осколки

Стол сообщений (id, users_id, заголовок, содержание). Каждое сообщение принадлежит указанному пользователю. У пользователей есть от 100 до 1 миллиона сообщений.

Можно ли установить осколки ключа по модулю из users_id (например, users_id% 128)? Я запрашиваю базу данных WHERE users_id.

Возможно ли это? Это хорошая идея? Я спрашиваю, потому что, когда я ничего не нашел об использовании модуля в шадринговом ключе.

+0

Основываясь на вашем описании, пользователь может иметь 1 миллион сообщений. Вы имеете в виду, что 1 миллион документов могут иметь одни и те же users_id? Если это так, клавиша осколка на {users_id} имеет низкую мощность, что означает, что может быть много документов, имеющих одно и то же значение ключа осколка и не сможет разбить. Вы можете рассмотреть очертание коллекции на составном индексе, например {users_id, _id}. Вы можете обратиться к http://docs.mongodb.org/manual/tutorial/choose-a-shard-key/ для получения дополнительной информации о выборе ключа осколка. –

ответ

1

Возможно, вы хотите, чтобы ваш ключ осколка был {users_id: 'hashed'}, таким образом MongoDB позаботится о распределении для вас. Подробнее читайте здесь: http://docs.mongodb.org/manual/tutorial/shard-collection-with-a-hashed-shard-key/

+0

Thx для этого. Я ничего не понимаю. Почему hashed общий ключ {users_id: 'hashed'} был бы лучше, чем обычный общий ключ {users_id: 1}? –

+1

гарантирует, что вы получите более равномерный (случайный) дистрибутив, если вам не нужно делать запросы диапазона на 'users_id' – leif

 Смежные вопросы

  • Нет связанных вопросов^_^