2016-06-15 2 views
1

У меня есть приложение, в котором пользователи могут отслеживать посетителей своего сайта в реальном времени. Пользователь может создавать группы, которые в основном представляют собой массив объектов (фильтров) JSON, которые они могут использовать для фильтрации ресурса (здесь посетитель сайта).Пользовательские фильтры, отображаемые пользователем для каждого

Group(user_id:id, name:string, filters: JSONB[type, field, value]) 

Пример группы:

name: "my group" 
filters: [ 
    {field: "sessions", type: "greater_than", value: 5}, 
    {field: "email", type: "contains", value: "@example.com} 
] 

Я отображение каждого из групп пользователя в интерфейсе, но я хотел бы также показать количество записей (посетителей) соответствие каждой группы.

Как можно видеть, посетители сайта могут динамически включаться/исключаться в группе пользователей в зависимости от их поведения.

Я думал о том, чтобы использовать материализованный вид, чтобы сохранить сопоставление всех групп и количество совпадений, которые будут обновляться каждые 30 секунд. Я боюсь, что это будет очень неэффективно.

Есть ли лучший подход?

Благодаря

ответ

0

Это действительно зависит от количества записей, участвующих, и как много воздействия на вашу систему будет регенерировать материализованные представления каждые 30 секунд. т.е. если материализованное представление восстанавливается через 5 секунд или около того, это не будет проблемой. Если это займет 20 секунд, а максимальные процессоры и диски - это действительно плохая идея.

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

+0

Проблема с триггерным подходом заключается в том, что посетитель может перейти в другую группу без явного изменения данных с помощью временных меток, поскольку они основаны только на том, сколько времени прошло – Tarlen

Смежные вопросы