Wyobraź sobie, że Twoim wymaganiem jest posiadanie 3 ogromnych tabel (danych strukturalnych) z, powiedzmy, 30 miliardami wierszy w każdym (łączny rozmiar 4 TB), a twoi wielu współbieżnych użytkowników (którzy są równoległymi wątkami systemu operacyjnego na zdalnych komputerach LAN) będą musieli przeczytać część dane za pośrednictwem zapytań SELELCT, GDZIE GROUPBY i wysoce współbieżne, powiedzmy 10 000 jednoczesnych odczytów w tym samym czasie, a także użytkownicy muszą wstawiać (bez aktualizacji) dane do tych tabel bardzo współbieżnie, podobnie jak 2000 współbieżnych pisarzy (w całej sieci LAN centrum danych) . Użytkownicy chcieliby czytać i wstawiać tak szybko, jak to możliwe, z tego miejsca, w którym każdy odczyt i zapis będzie trwał od ms do 1 sekundy.
Jakie technologie polecacie, aby spełnić ten wymóg? Czy istnieje miejsce do przechowywania danych lub magazynu wartości kluczowych, które mogłyby to zrobić? Chmura NIE jest opcją.
Niektóre wyjaśnienia:
Użytkownicy NIE muszą od razu widzieć danych, a ostateczna spójność jest do zaakceptowania. Dostęp do danych uzyskuje się za pośrednictwem dowolnego sterownika, jaki może zapewnić pamięć, a użytkownicy znów są tylko wątkami działającymi na zdalnych komputerach centrum danych. Zapytania są w większości jak WYBIERZ GDZIE GROUPBY.
Dane mają format tabelaryczny, a każdy wiersz ma około 60 bajtów.
Brak opcji chmury, w której nie mogę korzystać z DynamoDB lub podobnych rozwiązań. Muszę mieć możliwość hostowania go wewnętrznie w centrum danych.
Wszystkie dane z tabel mogą być odczytywane przez cały czas, a wzorzec użytkowania jest nieprzewidywalny. Nie ma zapytania łączącego ani bardzo długiego. Nie wymaga DR, ale wymagany jest rozsądny HA, ale nie musi to być wyszukane. Każdy czytelnik otrzymuje partie wierszy na podstawie tego, gdzie klauzula i wiersze nie są tak naprawdę powiązane. Prawdopodobnie możemy mieć ustaloną długość dla każdego rzędu, ale mam nadzieję, że warstwa pamięci będzie się tym martwić.
Ponadto, moim największym zmartwieniem są te wszystkie równoczesne zapisy, które mają miejsce przy równoczesnych odczytach.
Twój wgląd w to jest bardzo ceniony.
Co więcej, mam trzy z tych tabel, w których każde 30 miliardów wierszy zawiera różne typy obiektów
Odpowiedzi:
Jeśli ostateczna spójność jest akceptowalna, a wszystkie zapytania są agregowane, być może system OLAP o niskim opóźnieniu może być dla Ciebie odpowiedni. Twoje wymagania brzmią trochę jak algorytmiczna platforma transakcyjna. Ten typ architektury jest często stosowany w systemach giełdowych, które wymagają przeprowadzania obliczeń zbiorczej analizy statystycznej na aktualnych danych.
Jeśli możesz podzielić dane na partycje według daty, a stare wiersze nie zostaną zaktualizowane, możesz zbudować hybrydowy system OLAP przy użyciu konwencjonalnego serwera OLAP, takiego jak usługi Microsoft Analysis, wspierane przez zwykłą platformę RDBMS. Powinno być możliwe, aby poradzić sobie z ~ 4 TB danych, a zarówno SQL Server, jak i SSAS będą wykonywać klastry z dyskami współdzielonymi. Podobne systemy OLAP (np. Oracle / Hyperion Essbase) są dostępne u innych dostawców.
Serwery OLAP działają, utrwalając dane w rodzimym sklepie wraz z agregacjami. Większość obsługuje dane podzielone na partycje. Ponadto większość będzie działać również w trybie ROLAP, w którym wysyłają zapytania do bazowej bazy danych. Ważną rzeczą do zapamiętania jest to, że strategią przechowywania można zarządzać dla poszczególnych partycji i programowo możesz przełączać partycje z jednej na drugą,
W tym modelu dane historyczne są przechowywane na partycjach MOLAP z utrwalonymi również agregacjami danych. Jeśli zapytanie może być spełnione z agregatów, serwer ich użyje. Agregaty można dostosować do zapytań, a poprawne agregacje znacznie zmniejszą ilość obliczeń potrzebnych do rozwiązania zapytania. W przypadku tego typu systemu możliwe są bardzo elastyczne zapytania zagregowane.
Dane w czasie rzeczywistym można wdrożyć, utrzymując małą partycję wiodącą - w razie potrzeby dla bieżącego miesiąca, dnia lub nawet godziny. Serwer OLAP będzie wysyłać zapytania do bazy danych; jeśli ta partycja jest wystarczająco mała, DBMS będzie w stanie szybko odpowiedzieć. Regularny proces tworzy nowe wiodące partycje i konwertuje zamknięte okresy historyczne na MOLAP. Starsze partycje można łączyć, umożliwiając zarządzanie danymi historycznymi w dowolnym pożądanym ziarnie.
Klienci piszący do bazy danych po prostu piszą bezpośrednio do bazowego RDBMS. Jeśli dane historyczne pozostaną statyczne, będą zapisywać tylko na wiodącej partycji. 4 TB to praktyczny wolumin do używania dysków SSD, jeśli potrzebujesz dodatkowej wydajności DBMS. Nawet główni dostawcy mają oferty oparte na dyskach SSD z opcjonalnie szybszymi urządzeniami SLC.
źródło