2011-12-31 19 views
5

Pracuję nad projektem, który rejestruje agregację i analizy w ramach większego projektu. Nie wiem, którą bazę danych wybrać do obsługi tych dzienników. Ostatnio wracam pomiędzy MongoDB i Cassandrą, ale jestem pewna, że ​​są też inne, które pasują do moich potrzeb. Którą mam wybrać i dlaczego?Mongodb kontra Cassandra do agregowania, wyszukiwania i analizowania wielu dzienników

Cała sprawa jest dość na początku, teraz, ale tutaj są wymagania tej pory:

  • dzienniki są w syslog formacie
  • zapytania są głównie na małej ciąg, który jest teraz w komunikacie , ale dostanę to na osobnym polu. Będą także filtry oparte na dacie, ważności lub tagu. Bardzo rzadko ludzie po prostu szukają losowego ciągu w wiadomości.
  • analityki godzinowe od niektórych wpisów dziennika
  • prowadzą dzienniki konfigurowalnego czasu
  • więcej przyjdzie, jestem pewien :) Dlatego myślę NoSQL jest bardziej właściwe, ponieważ możemy zmień schemat.

Spodziewamy się rozbudować bazę danych o kilka TB danych (i ~ 50k wstawek na sekundę), więc odłamki są koniecznością. Zapytania nie są tak częste, ponieważ są wykorzystywane głównie przez twórców większego projektu. Ale wynik musi zostać zwrócony w ciągu kilku sekund.

W tej chwili pamięć jest powszechna (i wolna) dla wszystkich komputerów. Skalowalność wymaga więc najlepszego wykorzystania pamięci i wielowątkowości - aby odciski miały sens.

Podstawowymi pomysłami do tej pory jest to, że MongoDB ma więcej funkcji, takich jak wyrażenie regularne lub wyniki sortowania, i jest to łatwiejsza konfiguracja do przyzwoitej konfiguracji, podczas gdy Cassandra wydaje się bardziej skalowalna (po prostu dodając serwery), a także ma kilka ciekawych funkcji, takich jak umieszczanie TTL na danych.

+0

ja skończyło się Elasticsearch. Zajrzyj tutaj, aby uzyskać więcej informacji: [link] (http://www.elasticsearch.org/tutorials/2012/05/19/elasticsearch-for-logging.html) –

Odpowiedz

2

MongoDB brzmi jak dobre dopasowanie do swoich wymagań. Oto dlaczego:

  • indeksy: ponieważ chcesz uruchamiać zapytania okazjonalne, dobrze jest nie utrzymywać ich w aplikacji lub mieć osobną wyszukiwarkę (Lucene).
  • Skale dobrze (wbudowane wsparcie dla shardowania, replikacja)
  • zapisy są asynchroniczne (domyślnie można je synchronizować), to znaczy nieblokujące i szybkie. W niektórych scenariuszach niepowodzenia możesz stracić kilka, ale w przypadku dzienników i analiz nie będzie to miało znaczenia.
  • dość potężny interfejs API zapytań (nie przypomina relacyjnych, nie łączy się, ale jest lepszy niż wszystkie inne magazyny klucz-wartość nosql i brzmi silniej niż to, co oferuje Cassandra).

Możesz nawet znaleźć odpowiednią konfigurację, aby mieć go w konfiguracji nieskonfigurowanej. Na przykład domyślnie synchronizuje się z dyskiem co 60 sekund, co oznacza, że ​​60sekund zapisów zostanie zbuforowanych, zmniejszając w ten sposób IO. Próbowałem go na pół terabajta danych na jednym komputerze i pojedynczych indeksowanych kwerendy pola uruchomić w cca 100-200ms.

+0

Wielkie dzięki za odpowiedź. Jest to zgodne z tym, co mam teraz na myśli, co ma być związane z MongoDB, a następnie może przejść na coś innego, tylko jeśli napotkasz problemy. –

5

Rzadko kolumnowe datastores takie jak Apache Cassandra są doskonałe do agregowania danych szeregów czasowych.Zobacz następujące artykuły na przykładach:

+0

Czy mówisz o tym, że Cassandra automatycznie przechowuje znacznik czasu dla każdej kolumny? Początkowo myślałem, że to jest dla mnie bardzo przydatne, ale potem zdałem sobie sprawę, że potrzebuję innego znacznika czasu: tego, kiedy zdarzenie jest generowane na serwerze, a nie kiedy zdarzenie dotarło do agregatora dzienników. Jeśli uważasz, że coś tu mi brakuje, czy możesz napisać kilka szczegółów? –

+0

Mam na myśli konkretnie podejście do modelowania danych. Koncepcja timestampu Cassandry nie ma z tym nic wspólnego. Przeczytaj powyższe artykuły - zapewnią one wgląd w to, jak można uporządkować rodziny kolumn w celu przechowywania danych dziennika. – zznate

Powiązane problemy