Saya perlu menyimpan dan dapat meminta beberapa data deret waktu dalam jumlah yang sangat besar.
Properti data adalah sebagai berikut:
- jumlah seri: sekitar 12.000 (dua belas ribu)
- jumlah titik data, secara global: sekitar 500.000.000 per bulan (lima ratus juta)
- tipe nilai campuran: sebagian besar titik data adalah nilai titik mengambang, sisanya adalah string
- periode sampling: variabel antara seri dan juga dalam seri
- cap waktu: presisi milidetik
- periode penyimpanan data: beberapa tahun, tanpa pembusukan atau downsampling
- arsip data harus dibangun dalam waktu dekat, tetapi penundaan yang wajar (~ 1 jam) dapat diterima
- data masa lalu dapat dibangun kembali jika diperlukan, tetapi dengan biaya tinggi
- kadang-kadang, tetapi sangat jarang, beberapa data masa lalu perlu diperbarui
Properti kueri yang dibayangkan:
- sebagian besar kueri terhadap data akan menjadi kueri berbasis timestamp; mulai dari satu hari hingga beberapa bulan / tahun. 90% + akan menjadi pertanyaan pada data terbaru
Persyaratan lainnya:
- solusinya harus gratis seperti dalam bir gratis dan lebih disukai opensource
Pikiran awal saya adalah menggunakan PyTables / Pandaas dengan file HDF5 sebagai menyimpan backend daripada database SQL.
Pertanyaan:
Dengan asumsi PyTables / Pandas adalah rute "terbaik", apakah akan lebih baik untuk membagi data dalam beberapa file HDF, masing-masing mencakup periode waktu tertentu, atau meletakkan semuanya dalam satu file yang kemudian akan menjadi besar?
Haruskah saya memilih format tabel atau tetap? Bagi saya, format tetap terlihat OK jika saya menyimpan satu file HDF per bulan, karena dengan cara ini seluruh rangkaian mungkin sesuai dengan RAM dan saya dapat mengiris dalam memori tanpa perlu indeks format tabel. Apakah saya benar ?
Dan jika itu bukan pendekatan terbaik, bagaimana saya harus menyusun penyimpanan data ini atau teknologi apa yang harus saya pertimbangkan? Saya bukan orang pertama yang menangani penyimpanan set besar data deret waktu, apa pendekatan umum untuk menyelesaikan tantangan ini?
Pendekatan lain yang saya pertimbangkan:
- database array: mereka sangat cocok untuk deret waktu dengan periode pengambilan sampel konstan, karena Anda hanya perlu menyimpan waktu mulai dan akhir dan periode pengambilan sampel array, dan kemudian hanya nilai-nilai dalam array itu sendiri dan pengindeksan mudah. Tetapi dengan periode pengambilan sampel variabel dalam seri itu sendiri, saya perlu menjaga hubungan nilai timestamp-> lebih dekat, yang dalam pandangan saya tidak cocok untuk array DBMS.
- database SQL standar dengan timestamp, paramID, nilai sebagai kolom tetapi berdasarkan sifatnya mereka meminta banyak disk I / O untuk setiap permintaan