Czy bazy dokumentów są dobre do przechowywania dużych ilości danych o kleszczach magazynowych? [zamknięte]

Myślałem o użyciu bazy danych, takiej jak mongodb lub ravendb do przechowywania wielu danych giełdowych i chciałem wiedzieć, czy byłoby to opłacalne w porównaniu ze standardowym relacyjnym, takim jak SQL Server.

Dane nie byłyby tak naprawdę relacyjne i byłyby kilkoma ogromnymi tabelami. Myślałem też, że mógłbym zsumować/min / max rzędy danych według minuty / godziny / dnia/tygodnia / miesiąca itp. dla jeszcze szybszych obliczeń.

Przykładowe dane: 500 symboli * 60 min * 60sek * 300 dni... (na płytę My store: date, open,high,low, close, volume, openint - all decimal/float)

Więc co myślicie?

Author: Community, 2010-07-09

4 answers

Odpowiedź tutaj będzie zależeć od zakresu.

MongoDB jest świetnym sposobem na "wejście" danych i jest naprawdę szybki w wyszukiwaniu poszczególnych elementów. Jest również ładny, ponieważ jest zbudowany do skalowania w poziomie.

Musisz jednak pamiętać, że wszystkie istotne " zapytania "będą faktycznie wynikały z"wyjścia zadania wsadowego".

Na przykład Gilt Groupe stworzyło system o nazwieHummingbird , którego używają do analizy w czasie rzeczywistym na swojej stronie internetowej. Prezentacja tutaj . Zasadniczo są to dynamiczne renderowanie stron na podstawie zebranych danych wydajności w wąskich odstępach czasu (15 minut).

W ich przypadku mają prosty cykl: post data to mongo - > run map-reduce - > push data to webs for real-time optimization - > rinse / repeat.

To jest naprawdę blisko tego, co prawdopodobnie chcesz zrobić. Istnieją jednak pewne ograniczenia:

  1. Map-reduce to nowość dla wielu ludzi. Jeśli znasz SQL, musisz zaakceptować krzywą uczenia się Map-reduce.
  2. jeśli pompujesz dużo danych, redukcja map będzie wolniejsza na tych polach. Prawdopodobnie będziesz chciał przyjrzeć się parom niewolnictwa / repliki, jeśli czasy reakcji są duże.

Z drugiej strony napotkasz różne warianty tych problemów z SQL.

Oczywiście są tu pewne korzyści:

  1. skalowalność pozioma. Jeśli masz dużo pudełek to możesz je odłamać i uzyskaj nieco liniowy wzrost wydajności na mapie/zmniejsz zadania (tak działają). Budowanie takiego "klastra" z bazami danych SQL jest dużo droższe i droższe.
  2. naprawdę duża prędkość i tak jak w punkcie # 1, Masz możliwość dodawania RAM poziomo, aby utrzymać prędkość.

Jak wspomnieli inni, stracisz dostęp do ETL i innych popularnych narzędzi analitycznych. Na pewno będziesz na haku, aby napisać wiele własnych narzędzi analitycznych.

 4
Author: Gates VP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-09 04:59:06

Od kiedy to pytanie zostało zadane w 2010 roku, kilka silników baz danych zostało wydanych lub rozwinęło funkcje, które specjalnie obsługują szeregi czasowe, takie jak dane dotyczące kleszczy akcji:

W przypadku baz danych MongoDB lub innych baz danych zorientowanych na dokumenty, jeśli chodzi o wydajność, zaleca się Przekreślenie schematu w celu uporządkowania wskazów w obiekcie z kluczem sekundowym (lub obiekcie z kluczem minutowym, każda minuta jest kolejnym obiektem z 60 sekundami). Dzięki wyspecjalizowanej bazie danych szeregów czasowych, możesz odpytywać dane po prostu za pomocą

SELECT open, close FROM market_data
WHERE symbol = 'AAPL' AND time > '2016-09-14' AND time < '2016-09-21'

Myślałem też, że mógłbym zsumować/min / max wiersze danych według minuty / godziny / dnia/tygodnia / miesiąca itp. dla jeszcze szybszych obliczeń.

Z InfluxDB jest to bardzo proste. Oto jak uzyskać dzienne minimum i maksimum:

SELECT MIN("close"), MAX("close") FROM "market_data" WHERE WHERE symbol = 'AAPL'
GROUP BY time(1d)

Możesz grupować według przedziałów czasowych, które mogą być w mikrosekundach (u), sekundach (s), minutach (m), godzin (h), dni (d) lub tygodni (w).

TL;DR

Bazy danych szeregów czasowych są lepszym Wyborem niż bazy zorientowane na dokumenty do przechowywania i odpytywania dużych ilości danych o kleszczach magazynowych.

 4
Author: Dan Dascalescu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:30:37

Oto moje zastrzeżenia do tego pomysłu - i zamierzam otwarcie przyznać, że moja praktyczna wiedza o bazach dokumentów jest słaba. Zakładam, że chcesz, aby wszystkie te dane były przechowywane, abyś mógł na nich przeprowadzić agregację lub analizę trendów.

Jeśli używasz bazy danych bazującej na dokumencie jako źródła, ładowanie i manipulowanie każdym wierszem danych (operacje CRUD) jest bardzo proste. Bardzo wydajny, bardzo prosty, w zasadzie śliczny.

Co tam jest do bani jest bardzo niewiele, jeśli w ogóle, możliwości wyodrębnienia tych danych i wkomponowania ich w strukturę bardziej odpowiednią do analizy statystycznej, np. kolumnowa baza danych lub kostka. Jeśli załadujesz go do podstawowej relacyjnej bazy danych, istnieje wiele narzędzi, zarówno komercyjnych, jak i open source, takich jak pentaho , które bardzo ładnie pomieszczą ETL i analizę.

Ostatecznie jednak, co chcesz pamiętać jest to, że każda firma finansowa na świecie ma analizę akcji / auto-trader aplikacji; oni tylko spowodował duży spadek na giełdzie w USA i nie są to Zabawki. :)

 1
Author: Bobby B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 12:05:52

Prosty magazyn danych, taki jak baza danych wartości klucza lub dokumentów, jest również korzystny w przypadkach, gdy wykonywanie analiz racjonalnie przekracza możliwości pojedynczego systemu. (Lub będzie to wymagało wyjątkowo dużej Maszyny do obsługi ładunku.) W takich przypadkach warto korzystać z prostego sklepu, ponieważ analizy i tak wymagają przetwarzania wsadowego. Chciałbym osobiście przyjrzeć się znalezieniu metody przetwarzania skalowania poziomego, aby wymyślić wymaganą analizę jednostki / czasu.

I would zbadaj użycie czegoś zbudowanego na Hadoop do przetwarzania równoległego. Albo użyć frameworka natywnie w Javie / C++ lub jakiegoś wyższego poziomu abstrakcji: Pig, Wukong, binarne pliki wykonywalne poprzez interfejs strumieniowy, itp. Amazon oferuje rozsądnie tani Czas Przetwarzania i przechowywania, jeśli ta trasa jest interesująca. (Nie mam osobistego doświadczenia, ale wielu tak i zależy od niego dla swoich firm.)

 0
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-09 00:42:23