Çok büyük miktarlarda zaman serisi verilerini sorgulayabilmem ve sorgulayabilmem gerekiyor.
Verilerin özellikleri aşağıdaki gibidir:
- dizi sayısı: yaklaşık 12.000 (on iki bin)
- Dünya genelinde veri noktalarının sayısı: ayda yaklaşık 500.000.000 (beş yüz milyon)
- karma değer türleri: veri noktalarının çoğu kayan nokta değerleri, geri kalan dizeler
- örnekleme süresi: seri içinde olduğu gibi seri içinde de değişken
- zaman damgaları: milisaniye hassasiyetli
- veri saklama süresi: çürüme veya alt örnekleme olmadan birkaç yıl
- veri arşivlerinin neredeyse gerçek zamanlı olarak oluşturulması gerekir, ancak makul bir gecikme (~ 1 saat) kabul edilebilir
- Gerekirse geçmiş veriler yeniden oluşturulabilir, ancak yüksek maliyetle
- bazen, ancak oldukça nadiren, bazı geçmiş verilerin güncellenmesi gerekir
Öngörülen sorguların özellikleri:
- verilere karşı sorguların çoğu zaman damgası tabanlı sorgular olacaktır; bir gün ile birkaç ay / yıl arasında değişmektedir. 90% + en son veri sorguları olacak
Diğer gereklilikler:
- çözelti bedava biradaki gibi serbest olmalıdır ve tercihen açık kaynak olmalıdır
İlk düşüncem, PyTables / Panda'ları HDF5 dosyaları ile bir SQL veritabanı yerine arka uç olarak kullanmaktı.
Sorular:
PyTable'ların / Pandaların "en iyi" yol olduğunu varsayarsak , verileri her biri belirli bir zaman dilimine yayılmış birkaç HDF dosyasına bölmek ya da her şeyi daha sonra devasa olacak tek bir dosyaya koymak daha iyi olur mu?
Gidip sabit formatı mı yoksa tablo formatını mı tercih edeyim? Bana göre, bir HDF dosyasını ayda bir tutarsam sabit format iyi görünüyor, bu şekilde bir dizi muhtemelen RAM'e sığar ve bir tablo formatı endeksine ihtiyaç duymadan bellekte dilimleyebilirim. Doğrumuyum ?
Ve bu en iyi yaklaşım değilse , bu veri deposunu nasıl yapılandırmalıyım veya hangi teknolojileri göz önünde bulundurmalıyım? Büyük zaman serileri verilerini depolayan ilk kişi ben değilim, bu zorluğun çözümü için genel yaklaşım nedir?
Düşündüğüm diğer yaklaşımlar:
- dizi veritabanları: bunlar sabit örnekleme periyodu olan zaman serileri için mükemmel bir seçimdir, çünkü daha sonra sadece dizinin başlangıç ve bitiş zamanlarını ve örnekleme periyodunu saklamanız gerekir ve ardından dizinin ve indekslemenin sadece değerleri kolaydır. Ancak serinin kendi içindeki değişken örnekleme periyotları ile, benim görüşüme göre DBMS dizisi için bu kadar uygun olmayan bir zaman damgası- değer ilişkisini daha yakından tutmam gerekiyor.
- zaman damgası, paramID, sütun olarak değere sahip standart SQL veritabanı, ancak yapıları gereği herhangi bir sorgu için çok fazla disk I / O talep ederler.