Статистика по DDD

Обсуждаем, как правильно строить приложения
Ответить
glagola
Сообщения: 47
Зарегистрирован: 2017.02.22, 19:43

Статистика по DDD

Сообщение glagola »

Всем привет!

Впал в ступор, нужно организовать сбор статистики по объявлениям на сайте, пока считаем 2 показателя:
  • кол-во показов индивидуальной страницы объявления
  • кол-во авторизованных пользователей, проявивших интерес к данному объявлению
Вопрос в том как это сделать, как часть Агрегата объявление или как отдельный контекст?

С одной стороны, не хочется загружать/сохранять объявление (агрегат) целиком ради записи/отображения его статистики и пары полей (необходимые сведенья об объявлении уже загружаются из elasticsearch'a). С другой стороны (если делать как отдельный контекст), при отображении/записи статистики постоянно приходится проверять существование этого самого объявления.

Вообщем буду рад любым советам) ибо пока кода, относящегося к статистике, не много, могу его переписывать как захочу.

P.S. пока реализовал как отдельный bounding context
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Статистика по DDD

Сообщение samdark »

Я бы тоже реализовал как отдельный контекст и, наверное, даже не проверял бы, есть ли сейчас объявление или нет.

Для этого должен круто подойти https://clickhouse.yandex/
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Статистика по DDD

Сообщение anton_z »

Смотря как у вас агрегат реализован. можно сделать, чтобы он весь в память не грузился.

А вообще вы суровые парни) Даже стату по DDD делаем)
Любая статистика это агрегации - и тут чистая реляционка пошла. В DDD все по объектам. Соответственно будет еще больше сказываться рассогласование нагрузки, чтобы ее закрыть придется лепить еще больше абстракций. Подумайте, оно вам надо? Профит в чем? Может просто запросы написать в каком нибудь Table или Query классе?
glagola
Сообщения: 47
Зарегистрирован: 2017.02.22, 19:43

Re: Статистика по DDD

Сообщение glagola »

Спасибо за ответы! Владелец бизнеса делает данную статистику не для себя, а для пользователей сайта.
anton_z писал(а): 2017.05.30, 06:20 Любая статистика это агрегации - и тут чистая реляционка пошла. В DDD все по объектам.
Да, я храню статистику в реляционной БД.
anton_z писал(а): 2017.05.30, 06:20 В DDD все по объектам.
При запросе агрегирую собранную статистику и возврщаю в качестве объекта.
anton_z писал(а): 2017.05.30, 06:20 Соответственно будет еще больше сказываться рассогласование нагрузки, чтобы ее закрыть придется лепить еще больше абстракций.
Пока спасает отдельный bounding context созданный исключительно для сбора статистики.
glagola
Сообщения: 47
Зарегистрирован: 2017.02.22, 19:43

Re: Статистика по DDD

Сообщение glagola »

samdark писал(а): 2017.05.30, 01:15 Я бы тоже реализовал как отдельный контекст и, наверное, даже не проверял бы, есть ли сейчас объявление или нет.
У меня тоже была такая мысль, но проблема в том, что новая версия сайта строится поверх уже существующей инфраструктуры (и в том числе БД), и складывать статистику приходится в таблицу самого объявления, а значит если объявления с заданным ID нет, то сложить ее будет некуда. Хотя пока писал этот ответ понял... что видимо нет в этом ничего страшного - просто упадем с ошибкой.
samdark писал(а): 2017.05.30, 01:15 Для этого должен круто подойти https://clickhouse.yandex/
Читал о нем, и в перспективе, если будем больше собирать показателей, то я думаю, обязательно воспользуемся clickhouse'ом.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Статистика по DDD

Сообщение samdark »

складывать статистику приходится в таблицу самого объявления
Вот так делать не надо.
glagola
Сообщения: 47
Зарегистрирован: 2017.02.22, 19:43

Re: Статистика по DDD

Сообщение glagola »

samdark писал(а): 2017.06.01, 16:17 Вот так делать не надо.
Это просто целочисленный счетчик просмотров, никто не борется с накрутками и не обеспечивается проверка уникальности. К тому же, есть и другой софт, который использует эту БД, так что я не могу ее менять. Есть только надежда что в обозримом будущем возьмусь и за него, тогда смогу перекроить БД и весь слой отвечающий за сохранение агрегатов.
Ответить