Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

Archiwum dla Marzec, 2015

Carrot2 Clustering Engine

Autor: Piotr Karpiuk o 26. marca 2015

Carrot2 to stworzona przez panów Dawida Weissa i Stanisława Osińskiego z Politechniki Poznańskiej alternatywa dla Googlowej wyszukiwarki. Jej bardzo interesującą funkcją jest grupowanie wyników wyszukiwania. Przykładowo gdy pytamy o „apple”, osobno będziemy mieli pogrupowane informacje o owocach, a osobno o firmie Apple Inc. Wyszukiwarka obsługuje kilka różnych algorytmów (Lingo jest wolniejszy, ale produkuje etykietki grup lepszej jakości niż STC) i obsługuje jedynie języki angielski, niemiecki, francuski, włoski i hiszpański. Być może ciekawsza nawet niż sama wyszukiwarka jest używana pod spodem otwartoźródłowa, dobrze udokumentowana biblioteka Javy, której można użyć we własnych projektach do grupowania rekordów (np. wyników wyszukiwania) zawierających tekst w jednym z 19 języków, m.in. obsługiwany jest język polski.

Napisany w Lingwistyka | Brak komentarzy »

MapChat

Autor: Piotr Karpiuk o 25. marca 2015

MapChat to pomysł na wspólny czat dla wszystkich ludzi na świecie. Wypowiedź każdego uczestnika jest pokazywana w dymku na mapie, co pozwala zorientować się o czym mówią ludzie w okolicy. Nie jest potrzebne zakładanie konta, a żeby napisać komunikat trzeba zgodzić się na udostępnienie przeglądarce swojej geolokalizacji.

Napisany w HTML5, WWW | Brak komentarzy »

Travic

Autor: Piotr Karpiuk o 23. marca 2015

Travic to interaktywna wizualizacja systemów transportowych na całym świecie. Można na żywo śledzić gdzie znajduje się np. dany tramwaj w Nowym Jorku.

Napisany w Uncategorized | Brak komentarzy »

Przeszukiwanie zasobów Amazonu

Autor: Piotr Karpiuk o 19. marca 2015

Kupując książki w Amazonie chętnie korzystam z mechanizmów rekomendacji („klienci którzy kupili ten towar kupili również:”). Znalazłem całkiem przydatną wyszukiwarkę Amazon Products Visualization, w której szukamy po fragmencie tytułu książki, a wyniki zawierają powiązania między książkami. Jednokrotne kliknięcie książki pozwala obejrzeć szczegóły i zamówić towar, a dwuklik uruchamia następne zapytanie z wybraną książką w środku. Kółeczkiem myszki możemy skalować graf.

Tags: ,
Napisany w WWW | 1 Komentarz »

Apache HBase

Autor: Piotr Karpiuk o 9. marca 2015

HBase to otwartoźródłowa, zaimplementowana w Javie, rozproszona baza danych inspirowana Googlowym BigTable. Jest częścią projektu Apache Hadoop i przechowuje dane w HDFS (Hadoop Distributed FileSystem). Jest to przykład tzw. kolumnowej NoSQLowej bazy danych, pozwalającej na przechowywanie w sposób odporny na awarie dużej ilości danych rzadkich (ang. sparse data) – które w relacyjnej bazie wymagałyby tabel z dużą ilością przeważnie pustych kolumn.

Pierwotnie HBase był tworzony z myślą o przetwarzaniu języka naturalnego, a od czasu przejęcia projektu przez Apache z bazy korzysta obecnie szereg firm (w tym Twitter, Stumbleupon, eBay, Yahoo!), a bodaj najbardziej spektakularne jest użycie tej bazy przez Facebooka do implementacji komunikatora internetowego Facebook Messenger.

Powszechna wiedza głosi, że sens użycia HBase pojawia się dopiero przy przetwarzaniu co najmniej 100 GB danych przy użyciu min. 5 maszyn w klastrze.

Autorzy dokumentacji używają pojęć nawiązujących do modelu relacyjnego: tabela, wiersz, kolumna – ale jest to bardzo kontrowersyjny pomysł. Osobie przyzwyczajonej do świata relacyjnych baz danych w miarę wgryzania się w HBase oczy będą się coraz bardziej otwierać ze zdumienia. W rzeczy samej, HBase wobec Oracla jest jak zły brat bliźniak, Bizarro, mr. Hyde czy Frankenstein.

Spójrzmy na poniższy rysunek, objaśniający model danych omawianej dzisiaj bazy:

W tabeli mamy dowolnie wiele wierszy, każdy identyfikowany unikalnym kluczem. Kolumny są pogrupowane w rodziny kolumn (zwane też superkolumnami). O ile rodzin kolumn zwykle jest kilka, o tyle samych kolumn mogą być miliony. HBase nie jest transakcyjna i zapewnia atomowość na poziomie rekordu (wiersza), przy czym mamy wersjonowanie: pamiętane są domyślnie 3 ostatnie wersje każdego rekordu opatrzone stemplami czasowymi. Sens istnienia superkolumn jest taki, że dla każdej z nich można zdefiniować inne parametry bazy danych, np. rodzaj kompresji danych (GZ, LZO), poziom redundancji, czas po jakim dane mają być usuwane, czy wersjonowanie. Modyfikacja parametrów superkolumny jest kosztowna – pociąga za sobą utworzenie nowej superkolumny z nową specyfikacją i skopiowanie wszystkich danych – dlatego warto ustawić parametry na docelowe zanim zacznie się wstawiać dane. Wartości kolumn nie mają typów i są traktowane jako ciągi bajtów.

W zasadzie, być może zamiast kurczowo trzymać się nomenklatury nazewniczej z relacyjnych baz danych lepiej byłoby spojrzeć na model danych HBase jak na 4-poziomową mapę asocjacyjną (kolejne poziomy to tabela, klucz, superkolumna i kolumna).

Nazwę kolumny określa się mianem kwalifikatora kolumny (ang. column qualifier). Połączenie klucza wiersza i pełnej nazwy kolumny (wraz z nazwą rodziny) zapisuje się w postaci table/family:qualifier.

Rekordy w bazie są posortowane wedle klucza i podzielone na rozłączne regiony, przy czym za każdy region odpowiedzialna jest inna maszyna klastra.

HBase nie posiada języka zapytań, nie ma indeksów. Zapewnione jest tylko skanowanie całej tabeli i bardzo szybki dostęp do rekordu po kluczu i do wartości kolumny w rekordzie, jak również Hadoopowy mechanizm MapReduce.

Facebook używa HBase jako głównego komponentu swojej infrastruktury komunikatów, zarówno do przechowywania komunikatów jak i odwróconego indeksu (ang. inverted index) na potrzeby wyszukiwania.
W tabeli implementującej indeks:

  • Kluczem wiersza jest ID użytkownika.
  • Kwalifikatorami kolumn są słowa występujące w komunikatach tego użytkownika.
  • Stemple czasowe są identyfikatorami komunikatów zawierających to słowo.

W ten sposób wykorzystywane jest wersjonowanie.

W przykładach poniżej będziemy używać powłoki napisanej w języku JRuby, ale są też inne sposoby komunikacji z bazą (najpopularniejszy jest Thrift):

Nazwa Metoda połączenia Dojrzałość
Shell Bezpośrednia Tak
Java API Bezpośrednia Tak
Thrift Protokół binarny Tak
REST HTTP Tak
Avro Protokół binarny Nie

Czytaj więcej »

Tags: , ,
Napisany w Bazy danych, Cloud computing | Brak komentarzy »