Arka fon
Yerel bir veritabanı yaklaşık 1,3 milyar benzersiz satır içerir. Her satır dolaylı olarak belirli bir enlem ve boylam (konum) ile ilişkilidir. Her satırın bir tarih damgası vardır.
Kullanım Durumu
Sorun şu şekildedir:
- Kullanıcı bir başlangıç / bitiş tarihi ve bir değer aralığı belirler (örn. 100 ila 105).
- Sistem, konuma göre gruplandırılmış olarak verilen tarihe uyan tüm satırları toplar.
- Sistem, bu tarihlerde, verilen değer aralığına düşme olasılığına sahip olan yerleri belirler.
- Sistem kullanıcıya eşleşen tüm yerleri görüntüler.
Bu bir hız ve ölçek sorunudur.
Soru
Böyle bir sistemin beş saniyeden kısa sürede kullanıcılar için sonuç almasına izin vereceğini hayal edebileceğiniz en ucuz çözüm mimarisi nedir?
Mevcut sistem
Ortam şu anda:
- PostgreSQL 8.4 (yükseltme mümkündür; veritabanlarını değiştirmek bir seçenek değildir)
- R ve PL / R
- XFS'in
- WD VelociRaptor
- 8 GB RAM (Corsair G.Skill; 1,3 GHz)
- Dört çekirdekli GenuineIntel 7 (2,8 GHz)
- Ubuntu 10.10
Donanım yükseltmeleri kabul edilebilir.
Güncelleme - Veritabanı Yapısı
Milyarlarca satır aşağıdakine benzer bir tablodadır:
id | taken | location_id | category | value1 | value2 | value3
- id - Birincil anahtar
- alınan - Satıra atanan tarih
- location_id - Enlem / boylam referansı
- kategori - Verilerin açıklaması
- değer1 .. 3 - Kullanıcının sorgulayabileceği diğer değerler
taken
Sütun tipik başına ardışık tarihleri ise location_id
bazen her yere 1800 yılından 2010 verilerine sahip, (her yeri aynı tarih aralığında verileri olduğu gibi 77000 hakkında tarihleri, bunların çoğu çoğaltılamaz).
Yedi kategori vardır ve tablolar zaten kategoriye göre ayrılmıştır (alt tablolar kullanılarak). Her kategori ~ 190 milyon satır içerir. Yakın gelecekte, kategori başına satır sayısı bir milyarı aşacaktır.
Yaklaşık 20.000 yer ve 70.000 şehir vardır. Mekanlar enlem ve boylam ile şehirle ilişkilendirilir. Her bir konumu belirli bir şehre atamak, şehrin sınırlarını bulmak anlamına gelir, ki bu önemsiz bir görev değildir.
fikirler
Sahip olduğum bazı fikirler:
- Veritabanını barındırmak için bir bulut hizmeti bulun.
- Bir SSD baskın şeridi oluşturun (harika video).
- Tüm konumları şehre göre birleştiren bir tablo oluşturun (ön hesaplama).
Teşekkür ederim!