Rozwiązanie dla dużego zbioru danych statystycznych, Wybór bazy i struktury, rozważania o algorytmach i strukturach |
Rozwiązanie dla dużego zbioru danych statystycznych, Wybór bazy i struktury, rozważania o algorytmach i strukturach |
19.03.2015, 09:39:51
Post
#1
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 1 Dołączył: 9.10.2008 Ostrzeżenie: (0%) |
Witam,
Czy ktoś może ma doświadczenie i chciałby się podzielić w takiej sytuacji jak przedstawiam poniżej? Mam (ciągle rosnącą) bazę danych pochodzących z kilkunastu różnych źródeł. Dane te z każdego źródła standaryzuję i upycham do jednej tabeli celem dalszej obróbki i przygotowania danych pod wykresy. Dane te rozróżnialne są przez pięć kolumn charakterystycznych: id źródła, data wpisu, id elementu którego dane dotyczą, typ i kraj, nazwijmy je col1..col5. Czyli tabelka wygląda tak: id,col1,col2,col3,col4,col5,further_columns_with_data_to_show Tyle backendu. Od strony użytkownika to wygląda tak, że może wybrać zakres dat, jeden/kilka/wszystkie elementy, jeden/kilka/wszystkie kraje, jeden/kilka/wszystkie źródła i ewentualnie rozróżnić je po typach, klika "go!" i dostaje wykres iluś serii. Dodatkowo, może zechcieć zsumować dane po którejś kolumnie, na przykład chce mieć wykres z jedną serią dla każdego elementu (skumulowane kraje i źródła). Jedyne czego się nie da zsumować to daty - wykres zawsze jest dzień po dniu. Tyle frontendu. Wracając do bazy danych. Przygotowałem indeksy na tej tabeli pozwalające na wyświetlenie danych w "wybieraczkach" oraz jeden indeks do wyciągania danych, zawierajacy dane do wyświetlenia (celem przyspieszenia obliczeń). Wszystko działa w miarę sprawnie, to znaczy czas wykonania zapytania waha się, w zalezności od wybranych danych 0.1s-3s. Wierszy obecnie jest ponad 20mln. Wszystkie zapytania wykorzystują indeks, widać jego pracę itd. Pytanie teoretyczne brzmi: jak to można przyspieszyć? Jaką użyć bazę, jak ułożyć struktury? Pomysły? Może przenieść to do plików i grep|awk? Albo Mongo? Pre-liczenie danych do wyświetlenia i redundancja? |
|
|
19.03.2015, 10:58:50
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
czy jest jakieś pole w tej tabeli które może posłużyć za podziałkę danych i czy w ramach różnych podziałek łącznie może nastąpić wyszukiwanie?
Bo jeżeli możesz logicznie podzielić dane na jakiś typ (cokolwiek) a potem wyszukiwanie odbywa się tylko w ramach tego typu to możesz spokojnie zastosować partycjonowanie. Da to kopa. Bo jeśli "typ" nie jest taką granicą to raczej coś NonSQL typu Mongo |
|
|
19.03.2015, 11:21:55
Post
#3
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 1 Dołączył: 9.10.2008 Ostrzeżenie: (0%) |
Nie wiem czy Cię dobrze zrozumiałem. Dane na pewno są dzielone względem dni, nie robię sum z zakresu, tylko dzień po dniu. Poza tym jest to macierz 4x4 i może być tam dosłownie wszystko. Raz ktoś zapyta o sumę dla wszystkich elementów które wykazuje dane źródło, raz ktoś zechce porównać jak poszczególne elementy są raportowane przez różne źródła (i oleje kraje), a raz postanowi prześledzić historię konkretnego elementu w danym kraju według raportów z danego źródła i wybierze konkretnie jedną serię. Ciężki przypadek. "Elementy" są globalne i pojawiają się we wszystkich krajach, u wszystkich źródeł i dane dla nich mogą mieć wszystkie dostępne typy. Ale nie muszą. Streściłbym to: kolekcja (po datach) macierzy 4x4 (+dane).
Zastanawiałem się nad mongo, ale to jest raczej baza na dokumenty, hierarchiczna, i nie wiem czy przeszukiwanie iluś obiektów w celu policzenia średniej z jakiejś wartości to dobre zastosowanie dla niej... Są tam jakieś kolekcje danych na których można wykonywać agregacje? Ten post edytował mathijas 19.03.2015, 11:22:51 |
|
|
19.03.2015, 13:47:31
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
A ile jest ~ danych np. w mc/roku?
|
|
|
19.03.2015, 13:59:41
Post
#5
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) |
ablo nie doczytałem albo nie napisałeś. Masz to w mysql? Jeżeli tak to i tak masz rewelacyjny czas dostępy do 20 mln rekordów. Możesz spróbować przejść na postgres, interface PDO / ORM nie zmieni się praktycznie a powinieneś troche zyskać na tym.
-------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
20.03.2015, 11:35:14
Post
#6
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 1 Dołączył: 9.10.2008 Ostrzeżenie: (0%) |
Dzięki za podpowiedzi. Tak, mysql. Mam inną część serwisu do przepisania, poeksperymentuję co można wyciągnąć z mongo. Może jakieś zbiory indeksów walnę w redisie a z mysql'a będę wyciągał dane rangem, chociaż nie wiem jeszcze co by to miało przyspieszyć :). Nie wiem ile czasu i pieniędzy da mi na to szef inwestor ;). W każdym bądź razie, jak uda mi się zrobić z tego demona prędkości, to podzielę się uwagami w tym wątku.
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 07:28 |