Struktur data saya adalah sebagai berikut:
date: <timestamp>
filter_a: <integer> -> range [0, 1000]
filter_b: <integer> -> range [0, 1000]
filter_c: <integer> -> range [0, 86400]
filter_d: <integer> -> range [0, 6]
group: <string>
second_group: <integer>
variable_a: <float>
variable_b: <float>
variable_c: <float>
a couple more no very important
Saya perlu melakukan pertanyaan berikut:
Pertama:
- Filter data dengan
date
,filter_a
,filter_b
,filter_c
dan lain-lain
Kedua, dengan data yang difilter:
- hitung semua catatan
- dapatkan rata - rata
variable_a
,variable_b
danvariable_c
- mendapatkan standar deviasi dari
variable_a
,variable_b
danvariable_c
- dapatkan kuartil dari
variable_a
,variable_b
danvariable_c
- kelompokkan data dengan
group
atausecond_group
dan agregat (Hitung, Rta, Std, ..)
Jumlah pengguna sistem adalah sekitar 10 atau 15, tetapi jumlah item sangat besar, saat ini adalah 70 juta tetapi akan menjadi 500 juta dalam beberapa minggu dan akan menjadi 1.000 juta dalam waktu sekitar satu tahun.
Jumlah pertanyaan kecil, tidak lebih dari 10 pengguna secara bersamaan, masalah saya adalah bagaimana menangani pertanyaan-pertanyaan dengan jumlah data yang sangat besar ini.
Apa yang sudah saya coba sejauh ini?
Saya mulai dengan
mongodb
, pada awalnya itu cepat tetapi menjadi lambat ketika menghitung kuartil dengan 10M +. Itu membaik ketika saya menambahkan indeks tetapi tidak banyak membantu ketika saya harus menanyakan semua data. Saya mulai menggunakan mongodb karena data sangat dinamis tetapi untungnya format data "tidak akan berubah lagi".Seperti
filter_a
danfilter_b
dapat dilihat seperti node, saya mencobaneo4j
. Saya sangat menyukainya, tetapi grafik saya memiliki BANYAK tepi sehingga permintaan tidak terlalu cepat.Akhirnya, karena format data tidak akan berubah dan itu hanya satu koleksi / tabel jadi tidak perlu bergabung dalam SQL, saya memeriksa postgresql. Tes saya lebih cepat dengan postgresql, tetapi saya khawatir tes ini tidak dapat mengukur dengan benar di masa mendatang.
Apa yang saya butuhkan?
- Apakah postgresql pilihan yang baik untuk kasus ini?
- Apakah ada jenis database lain yang bisa saya gunakan? mana yang terbaik untuk kasus ini?
- Apa lagi yang bisa saya lakukan untuk memperbaikinya?
Edit
- Sekitar 1M elemen dimasukkan setiap hari dan "tidak boleh berubah" sepanjang waktu.
- Kecepatan menulis tidak penting
- Syarat sulitnya adalah membaca / agregat cepat
Terima kasih!