Как спроектировать систему событий в Rails 3.1

#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:

Во что бы то ни стало, это избавит вас от множества сложных запросов и сортировки. Перейдите к подходу таблицы событий.