В целях обсуждения рассмотрим сценарий FourSquare.
сценарий
Объекты:
- пользователей
- места
Отношения:
- Checkins: пользователи <-> места, многие ко многим
- Друзья: пользователи <-> пользователи, многие ко многим
Дизайн базы данных
Они, скорее всего, будут иметь ошибки, пожалуйста, укажите их.
RDBMS
Таблицы:
- пользователей
- места
- Checkins (соединение)
- Друзья (соединение)
Плюсы:
- CAP: последовательность, доступность
Минусы:
- CAP: допуск раздела, он же шардинг
- схемы = негибкая структура
- плохая репликация?
график
Объекты:
- пользователей
- места
Ребра:
- Друзья: Пользователь <-> Пользователь
- Checkins: Пользователь -> Места
- содержит метку времени
Плюсы:
- CAP: последовательность, доступность?
- бесщеточные, легко изменяемые объекты и ребра
- запросы обхода графа, например:
- кластеризация
- поиск групп друзей
- найти рестораны, которые любят похожие люди
- какие-нибудь другие общие / полезные вопросы?
- кластеризация
Минусы:
- CAP: допуск раздела?
Документ / Объект
3 отдельные базы данных?
- пользователей
- список друзей
- возвраты
- отметка времени
- пользователь
- место
- места
Плюсы:
- CAP: доступность, допуск раздела
- без схемы, легко изменяемые объекты
Минусы:
- CAP: согласованность
Вопросов
Для записи, они закончили с использованием MongoDB. В дополнение ко всем этим вопросительным знакам выше:
- Я не уверен, как реализовать базу данных документов.
- Как базы данных документов получают допуск на разделы?
- Я полагаю, что для получения проверок одного пользователя операция проанализирует все проверки и отфильтрует метаданные по имени пользователя (карта + фильтр). Производительность разбора 1 000 000+ документов для каждого пользователя будет ужасно низкой. Я полагаю, это не правильное поведение?
- Какие еще плюсы / минусы есть?