#ruby-on-rails #ruby-on-rails-3 #database-design #architecture
#ruby-on-rails #ruby-on-rails-3 #database-design #архитектура
Вопрос:
Я строю что-то вроде стены Facebooks внутри Rails. Это будет выглядеть примерно так:
- Стейси С. хочет дружить
- Вас пригласили на Летнее светское мероприятие
- Пэт ответила на ваше сообщение: Привет!!!
- У Американского общества домашних животных появился новый пост: Любите свою кошку!
Есть два способа сделать это. Я мог бы записать каждое из этих разных событий в базу данных событий при их создании, или я мог бы извлекать данные из таблиц «Связи», «Приглашение», «Входящие» и «Сообщения» и создавать события «на лету».
Я склоняюсь к подходу базы данных событий, потому что кажется более чистым просто вызвать эту одну таблицу, чем все остальные таблицы, а затем отсортировать их правильно. Вот как бы вы это сделали?
Комментарии:
1. Возможно, вы захотите взглянуть на наблюдателей
Ответ №1:
Сейчас я создаю систему с аналогичными требованиями, и я думаю, вы обнаружите, что характеристики производительности последнего подхода делают его крайне несостоятельным. в зависимости от того, сколько использования вы собираетесь вывести из системы, вы можете обнаружить, что таблица событий также влияет на производительность во время запроса. То, что я делаю, — это использование архитектуры, которая в основном представляет собой CQS с источником событий, который создает каналы для данного пользователя в фоновом режиме и кэширует их полностью денормализованным способом, чтобы сделать цикл запроса очень коротким.
Другой подход, на который вам следует обратить внимание, — это использование хронологического: https://github.com/gowalla/chronologic . Это может сэкономить вам немало усилий.
Комментарии:
1. На самом деле я просто создаю свое первое приложение rails. Это нечто среднее между социальной сетью и CMS для церкви. В основном это демонстрационное приложение только для меня, чтобы изучать Rails.
Ответ №2:
Во что бы то ни стало, это избавит вас от множества сложных запросов и сортировки. Перейдите к подходу таблицы событий.