У моїй службі є велика кількість постійних подій користувачів, і ми хотіли б зробити такі дії, як "рахувати виникнення події типу T з дати D ".
Ми намагаємось прийняти два основні рішення:
Що зберігати? Зберігання кожної події проти зберігання агрегатів
- (Стиль журналу подій) реєструйте кожну подію та підраховуйте їх пізніше,
- (Стиль часових рядів) зберігає одну зведену "кількість подій Е на дату D " на кожен день
Де зберігати дані
- У реляційній базі даних (зокрема, MySQL)
- У нереляційній (NoSQL) базі даних
- У файлах плоских журналів (збираються централізовано по мережі через
syslog-ng)
Що таке стандартна практика / де я можу прочитати більше про порівняння різних типів систем?
Додаткові дані:
- Загальний потік подій великий, потенційно - сотні тисяч записів на день
- Але наша сьогоднішня потреба полягає лише в підрахунку певних типів подій всередині нього
- Нам не обов’язково потрібен доступ у режимі реального часу до вихідних даних або результатів агрегації
IMHO, "записуйте всі події у файли, скануйте їх пізніше, щоб фільтрувати та агрегувати потік" - це досить стандартний шлях UNIX, але мої співвітчизники Rails-y, здається, вважають, що нічого не є реальним, якщо це не в MySQL.
SELECT...GROUP BY, можна легко зберігати результати SELECT), 2) за допомогою Graphite для простого масштабного агрегування та візуалізації, і 3) реєстрація повних подій для довідки та для перегляду деталей потоку даних у режимі реального часу. Кожен насправді був цінним по-різному.