Похоже, что разделение базы данных отлично, если у меня огромные коллекции. Что если у меня много коллекций довольно больших размеров? Допустим, для 1 коллекции из 100 000 000 документов (не очень больших комментариев) эффективен шардинг. Это также эффективно для 10 000 коллекций с 10 000 документов каждая?
(Я думаю, что этот вопрос по-прежнему актуален для таблиц-ориентированных баз данных, если вы заменяете коллекции таблицами, а документы - строками. Если возможно, я хотел бы знать теоретический ответ, а также ответ в конкретном сценарии MongoDB, если он отличается от теоретического ответ.)
foo
иbar
с той же структурой данных, вы можете объединить их вbaz
коллекции и переопределить_ids
(в коде):{ _id: "foo123" }, { _id: "bar123" }
. У вас есть больший индекс, но у вас есть только один индекс, который включает тип. Не требование, просто «пища для размышлений».Разделение MongoDB работает, разбивая коллекцию на более мелкие «куски» и равномерно распределяя их по нескольким машинам. Размер порции по умолчанию, который обычно является наиболее эффективным, составляет 200 МБ. Поэтому, если коллекция не станет намного больше 200 МБ, она не будет разбиваться на куски и, следовательно, не будет иметь права на разделение, поэтому никаких преимуществ не будет.
В общем случае разделение данных на несколько машин является очень эффективным способом масштабирования операций чтения, записи и запросов. Вы получаете преимущества нескольких процессоров, жестких дисков и памяти, работая параллельно для чтения, записи и обработки данных. Масштабирование памяти особенно важно для MongoDB, где высокая производительность очень чувствительна к подгонке данных в памяти.
источник