Для цілей обговорення розглянемо сценарій FourSquare.
Сценарій
Суб'єкти:
- Користувачі
- Місця
Відносини:
- Checkins: користувачі <-> місця, багато-багато
- Друзі: користувачі <-> користувачі, багато-багато
Дизайн баз даних
Вони, швидше за все, матимуть помилки, будь ласка, вкажіть їх.
RDBMS
Таблиці:
- Користувачі
- Місця
- Перевірки (перехід)
- Друзі (перехрестя)
Плюси:
- CAP: послідовність, доступність
Мінуси:
- CAP: толерантність до перегородки, відома також як шардінг
- схеми = негнучка структура
- погана тиражування?
Графік
Об'єкти:
- Користувачі
- Місця
Краї:
- Друзі: Користувач <-> Користувач
- Checkins: Користувач -> Місця
- містить часову позначку
Плюси:
- CAP: послідовність, доступність?
- об'єкти та краї, що легко змінюються, без змін
- запити проходження графіків, наприклад:
- кластеризація
- знаходження груп друзів
- знаходження ресторанів, які сподобалися подібним людям
- будь-які інші поширені / корисні запити?
- кластеризація
Мінуси:
- CAP: толерантність до розділів?
Документ / об’єкт
3 окремі бази даних?
- Користувачі
- список друзів
- Перевірки
- мітка часу
- користувач
- місце
- Місця
Плюси:
- CAP: наявність, толерантність до перегородки
- схематично об'єкти, що легко змінюються
Мінуси:
- CAP: консистенція
Запитання
Для запису вони закінчилися використовувати MongoDB. На додаток до всіх цих знаків питання вище:
- Я не впевнений, як реалізувати базу даних документів.
- Як бази даних документів набувають толерантності до розділів?
- Щоб отримати контрольні реєстрації для одного користувача, я припускаю, що операція проаналізувала б усі перевірки та відфільтрувала б метадані на ім’я користувача (map + filter). Продуктивність розбору 1000 000+ документів для кожного користувача була б жахливо поганою. Я припускаю, що це не правильна поведінка?
- Які ще є плюси?