Layanan saya memiliki sejumlah besar peristiwa pengguna yang sedang berlangsung, dan kami ingin melakukan hal-hal seperti "menghitung kemunculan tipe peristiwa T sejak tanggal D. "
Kami mencoba membuat dua keputusan dasar:
Apa yang harus disimpan? Menyimpan setiap acara vs. hanya menyimpan agregat
- (Gaya log peristiwa) mencatat setiap peristiwa dan menghitungnya nanti, vs.
- (Gaya seri waktu) menyimpan "hitungan acara E agregat tunggal untuk tanggal D " setiap hari
Tempat menyimpan data
- Dalam basis data relasional (khususnya MySQL)
- Dalam database non-relasional (NoSQL)
- Dalam file log datar (dikumpulkan secara terpusat melalui jaringan melalui
syslog-ng
)
Apa itu praktik standar / di mana saya dapat membaca lebih lanjut tentang membandingkan berbagai jenis sistem?
Detil tambahan:
- Total arus peristiwa besar, berpotensi ratusan ribu entri per hari
- Tetapi kebutuhan kita saat ini hanya untuk menghitung jenis peristiwa tertentu di dalamnya
- Kami tidak perlu membutuhkan akses waktu nyata ke data mentah atau hasil agregasi
IMHO, "catat semua peristiwa ke file, perayapan mereka di lain waktu untuk memfilter dan mengagregasikan aliran" adalah cara UNIX yang cukup standar, tetapi rekan senegaranya Rails-y tampaknya berpikir bahwa tidak ada yang nyata kecuali di MySQL.
SELECT...GROUP BY
, dapat dengan mudah menyimpan hasil SELECT
s), 2) menggunakan Graphite untuk agregasi dan visualisasi skala besar yang sederhana, dan 3) mencatat peristiwa lengkap untuk referensi, dan untuk menonton detail aliran data secara real time. Masing-masing sebenarnya berharga dalam cara yang berbeda.