Я знаю, що Shopify використовує лише одну базу даних для всіх магазинів. Але як вони можуть обробляти свою базу даних з такими великими даними? Це гарна ідея використовувати єдину базу даних для 50 000+ магазинів?
Я знаю, що Shopify використовує лише одну базу даних для всіх магазинів. Але як вони можуть обробляти свою базу даних з такими великими даними? Це гарна ідея використовувати єдину базу даних для 50 000+ магазинів?
Відповіді:
Зверніть увагу: я відповідаю з точки зору SQL Server, тому я згадую деякі концепції, характерні для SQL Server, але я вважаю, що всі ці поняття мають еквіваленти в інших основних платформах RDBMS з подібними перевагами та обмеженнями.
Я також, ймовірно, продовжуватиму редагувати цю відповідь, коли я думаю про інші потенційні плюси / мінуси.
Ну, це дійсно залежить від схеми, обсягу тощо. Що саме зберігає магазин? Чим вона відрізняється від зберігання даних про 50 000 котів або 50 000 продуктів або 50 000 крилатих горіхів?
Існує кілька причин (крім власного аспекту розміру), чому ви не хочете зберігати дані для 50 000 різних клієнтів в одній базі даних, якщо дійсно ці дані можуть бути повністю відокремлені клієнтом (не включаючи таблиці пошуку, такі як поштові індекси або таблиці специфічних для додатків, які можуть перейти в єдину центральну базу даних:
якщо один клієнт переростає програму, не існує простого способу вилучення лише своїх даних і переміщення їх на інший екземпляр, сервер тощо для масштабування, якщо ви не плануєте заздалегідь і розділити щось на зразок CustomerID
і не маєте 50 000 груп файлів (ви обмежені до 15 000 розділів у будь-якому випадку, або до 1000, якщо ви перебуваєте у більш старій версії SQL Server і маєте занадто багато груп файлів, може бути катастрофічним ) Також зауважте, що для розділення потрібна Enterprise Edition.
якщо виявиться, що всі ваші клієнти просто занадто великі для цього випадку, масштабування означає отримати нове обладнання та перемістити всю базу даних там (і, можливо, зробити це знову вниз).
видалення клієнта може бути однаково болючим, оскільки вам доведеться видалити кілька% рядків з дуже великих таблиць, і це буде недешево.
у вас, швидше за все, буде широкий розподіл даних про клієнтів (один клієнт із мільярдом рядків, інший клієнт - 5000). Це може призвести до таких обставин, як нюхання параметрів та згубна ефективність, пов’язана з кардинальністю та якістю плану (оскільки, ймовірно, ви будете повторно використовувати ті самі плани для тих самих запитів проти дуже різних наборів даних).
всі ваші клієнти підпорядковуються точно таким же планам угод про домовленість та хаотичність. У вас є або вся база даних у повному режимі відновлення з n-хвилинними резервними копіями журналу, або ви прості та покладаєтесь на резервні копії full + diff. Якщо вам доведеться повернутись через помилку клієнта або потрібно відновити базу даних до певного часу, це впливає на кожного клієнта.
є можливість помилок у пошуку даних - помилки, у яких, наприклад, пункти можуть призвести до того, що один клієнт бачить дані іншого клієнта або всі дані інших клієнтів.
можуть виникнути юридичні наслідки (деякі компанії вимагатимуть суворих вимог щодо того, щоб ви не розміщували їх дані в тій самій базі даних, що і будь-яка інша компанія, і особливо їхні конкуренти).
якщо безпека даних будь-якого клієнта важлива, то досягти цього набагато простіше, використовуючи розділення бази даних, ніж розділення всередині таблиці.
Деякі переваги щодо наявності кожного клієнта в окремій базі даних (або принаймні наявності декількох баз даних, кожна для групи клієнтів):
DROP DATABASE
.Деякі недоліки: