Narzędzia opensource do pomocy w wydobywaniu strumienia wyników tablicy wyników


12

Rozważ strumień zawierający krotki (user, new_score) reprezentujące wyniki użytkowników w grze online. Strumień może mieć 100-1 000 nowych elementów na sekundę. Gra ma od 200 000 do 300 000 unikalnych graczy.

Chciałbym mieć kilka stałych zapytań, takich jak:

  1. Którzy gracze opublikowali więcej niż x wyników w przesuwanym oknie trwającym godzinę
  2. Którzy gracze uzyskali wynik x% w przesuwanym oknie trwającym godzinę

Moje pytanie brzmi, które narzędzia open source mogę zastosować, aby rozpocząć ten projekt? Obecnie rozważam Esper .

Uwaga: Właśnie skończyłem czytać „Wydobywanie strumieni danych” (rozdział 4 „ Wydobywanie masywnych zestawów danych” ) i jestem całkiem nowy w wydobywaniu strumieni danych.

Odpowiedzi:


8

To nie jest pełne rozwiązanie, ale możesz zajrzeć do OrientDB jako części swojego stosu. Orient to serwer bazy danych Graph-Document napisany całkowicie w Javie.

W graficznych bazach danych relacje są uważane za obywateli pierwszej klasy, dlatego też przejście przez nie można wykonać dość szybko. Orient to także baza danych dokumentów, która pozwoliłaby ci na architekturę pozbawioną schematu, która wydaje się być potrzebna. Jednak prawdziwym powodem, dla którego sugeruję Orient, jest jego rozszerzalność. Obsługuje przesyłanie strumieniowe przez gniazda, a całą bazę danych można osadzić w innej aplikacji. Wreszcie, można go skutecznie skalować i / lub może działać całkowicie poprzez pamięć. Tak więc, dzięki pewnej wiedzy na temat języka Java, możesz faktycznie uruchamiać swoje ustawione zapytania względem bazy danych w pamięci.

Robimy coś podobnego. Tworząc aplikację / witrynę do współpracy badawczej w dziedzinie nauk społecznych, odkryliśmy niezwykle złożone modele danych. Skończyło się na napisaniu kilku zapytań przy użyciu języka Gremlin Traversal Language (podzbiór Groovy, którym jest oczywiście Java w jego sercu), a następnie udostępnieniu tych zapytań za pośrednictwem serwera połączeń binarnych OrientDB. Tak więc klient otwiera gniazdo TCP, wysyła krótki komunikat binarny, a zapytanie jest wykonywane w Javie bezpośrednio w bazie danych w pamięci.

OrientDB obsługuje również pisanie zapytań o funkcje w JavaScript, a można użyć Node.js do bezpośredniej interakcji z instancją Orient.

W przypadku czegoś takiego rozmiaru chciałbym użyć Orient w połączeniu z Hadoop lub coś takiego. Możesz także używać Orientu w połączeniu z esper.

Zastanów się: Wprowadzenie do orient: http://www.sitepoint.com/a-look-at-orientdb-the-graph-document-nosql/

Złożone zapytania w czasie rzeczywistym: http://www.gft-blog.com/business-trends/leveraging-real-time-scoring-through-bigdata-to-detect-insurance-fraud/

Dyskusja na temat opcji przesyłania strumieniowego za pomocą java i orient: https://github.com/orientechnologies/orientdb/issues/1227


Dzieki za sugestie. Patrzyłem na neo4j wcześniej, ale nigdy na orientdb. Obecnie nie mogę przewidzieć wielu korzyści w modelowaniu danych tabeli wyników jako wykresu, ale nadal będę patrzeć na opcje przesyłania strumieniowego w orientdb
Tahir Akhtar

4

Niedawno przeczytałem bardzo dobry artykuł, który sugeruje użycie burzy na Twitterze do zadania, które wygląda bardzo podobnie do twojego.


Przeczytałem kilka podstawowych informacji o Apache Storm, wygląda na to, że są zaniepokojone problemami związanymi ze skalowalnością / niezawodnością przetwarzania strumieniowego, pozostawiając cię do obsługi rzeczywistych algorytmów. Wypowiedz się na temat przetwarzania danych dla Ciebie na podstawie zapytań
Tahir Akhtar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.