Чи ефективне підкреслення для невеликих колекцій?


11

Схоже, загострення бази даних чудово, якщо у мене величезні колекції. Що робити, якщо у мене є безліч колекцій досить великого розміру? Скажімо, для 1 зібрання 100 000 000 документів (не дуже великі коментарі) шардинг є ефективним. Чи ефективна вона і для 10 000 колекцій, по 10 000 документів у кожній?

(Я думаю, що це питання все ще справедливо для таблиць, орієнтованих на бази даних, якщо ви замінюєте колекції таблицями та документами рядками. Якщо можливо, я хотів би знати теоретичну відповідь, а також відповідь у конкретному сценарії MongoDB, якщо він відрізняється від теоретичного відповідь.)

Відповіді:


5

Чи ефективна вона і для 10 000 колекцій, по 10 000 документів у кожній?

Більшість людей мають проблему "єдиної великої колекції", тому загострення явно корисно для зменшення головного болю врівноваження цих даних.

Однак, коли у вас є 10 000 невеликих колекцій, головний біль, ймовірно, не "врівноважує дані". З цим безліччю невеликих колекцій ваша проблема, ймовірно, пов'язана з відстеженням цих колекцій. Залежно від розміру вашого документа, ви можете навіть не порушити нижню межу, щоб насправді відбутися різкості.

Для дійсно невеликих колекцій ви можете використовувати маловідому команду movePrimary для управління розташуванням своїх даних.

Звичайно, інший спосіб поглянути на це, чому у вас є колекції 10k? Колекція не потребує однорідних об’єктів, і більшість з 10-ти колекцій мають бути створені. Цілком можливо зберігати різні "типи" даних в одній колекції, зменшити кількість колекцій, а потім включити тип як частину клавіші осколка.


Дякую, я саме намагався знати, чи найкраще, що я міг зробити, - це позбутися від цих тонн колекцій і зробити велику. Раніше у мене було багато колекцій, тому що я почув загальну думку: "Величезні колекції для вас погані, тому що індекси не вписуються в оперативну пам'ять, і їх буде дуже повільно запитувати та оновлювати". Але я гадаю, що шардинг був створений для вирішення цієї проблеми ... Дякую !!
João Pinto Jerónimo

Чесно кажучи, я знаходжу, що ви часто можете "обдурити" індекси. Якщо у вас є дві колекції fooі barз тією ж структурою даних, ви можете об'єднати їх в bazколекції і перевизначити _ids(в коді): { _id: "foo123" }, { _id: "bar123" }. У вас більший індекс, але у вас є лише один індекс, який включає тип. Не вимога, просто «їжа для роздумів».
Гейтс VP

4

Загострення MongoDB працює, розбиваючи колекцію на менші «шматки» та рівномірно розподіляючи їх на декілька машин. Типовий розмір шматка, який, як правило, є найбільш ефективним, становить 200 Мб. Тож якщо колекція не виросте набагато більше 200 Мб, вона не розділиться на шматки, а отже, не буде придатною для заточування, тому користі не буде.

У загальному випадку обробляння даних на декількох машинах є дуже ефективним способом масштабування читання, запису та запитів. Ви отримуєте переваги декількох процесорів, жорстких дисків та пам'яті, працюючи паралельно для читання, запису та обробки даних. Масштабування пам'яті особливо важливо для MongoDB, де висока продуктивність дуже чутлива до вмісту даних у пам'яті.


Розмір шматка за замовчуванням FYI становить 64 Мб на 1,8.
Гейтс VP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.