tło
Lokalna baza danych zawiera prawie 1,3 miliarda unikalnych wierszy. Każdy rząd jest pośrednio powiązany z określoną szerokością i długością geograficzną (lokalizacją). Każdy wiersz ma datownik.
Przypadek użycia
Problem jest następujący:
- Użytkownik ustawia datę początkową / końcową oraz zakres wartości (np. Od 100 do 105).
- System zbiera wszystkie wiersze pasujące do podanej daty, pogrupowane według lokalizacji.
- System określa lokalizacje, które w tych datach mają statystyczne prawdopodobieństwo wpadnięcia w podany zakres wartości.
- System wyświetla użytkownikowi wszystkie pasujące lokalizacje.
Jest to problem prędkości i skali.
Pytanie
Jaka jest najtańsza architektura rozwiązania, jaką można sobie wyobrazić, która pozwoliłaby systemowi na uzyskanie wyników dla użytkowników w mniej niż pięć sekund?
Aktualny system
Środowisko jest obecnie:
- PostgreSQL 8.4 (aktualizacja jest możliwa; przełączanie baz danych nie jest opcją)
- R i PL / R
- XFS
- WD VelociRaptor
- 8 GB pamięci RAM (Corsair G.Skill; 1,3 GHz)
- Czterordzeniowy oryginalny Intel 7 (2,8 GHz)
- Ubuntu 10.10
Uaktualnienia sprzętu są dopuszczalne.
Aktualizacja - struktura bazy danych
Miliardy rzędów znajdują się w tabeli przypominającej:
id | taken | location_id | category | value1 | value2 | value3
- id - klucz podstawowy
- zajęte - data przypisana do wiersza
- location_id - Odniesienie do szerokości / długości geograficznej
- kategoria - opis danych
- wartość1 .. 3 - Inne wartości, które użytkownik może zapytać
taken
Kolumna jest zazwyczaj za kolejnymi datami location_id
, czasem każda lokalizacja ma dane od 1800 do 2010 (około 77000 daty, wiele z nich powielone jak każda lokalizacja ma dane w tym samym przedziale czasowym).
Istnieje siedem kategorii, a tabele są już podzielone według kategorii (przy użyciu tabel potomnych). Każda kategoria zawiera ~ 190 milionów wierszy. W najbliższej przyszłości liczba wierszy na kategorię przekroczy miliard.
Istnieje około 20 000 lokalizacji i 70 000 miast. Lokalizacje są skorelowane z miastem na podstawie szerokości i długości geograficznej. Przypisanie każdej lokalizacji do konkretnego miasta oznacza znalezienie granic miasta, co nie jest łatwym zadaniem.
Pomysły
Oto niektóre pomysły, które mam:
- Znajdź usługę w chmurze, aby hostować bazę danych.
- Utwórz pasek RAID SSD (świetne wideo).
- Utwórz tabelę, która łączy wszystkie lokalizacje według miasta (wstępne obliczenia).
Dziękuję Ci!