
Kafka - platforma przesyłania strumieniowego
Kafka? Bardzo chętnie. Czyli klarowne, zrozumiałe objaśnienie czym naprawdę jest Kafka.
W Internecie znajdziecie mnóstwo artykułów o Kafce. Są te z bardzo ogólnym objaśnieniem co to takiego jest, są i tutoriale jak zainstalować Kafkę. Niewiele jest jednak artykułów które by pozwoliły szybko zrozumieć co do czego to oprogramowanie służy, jak działa, jaka jest różnica miedzy Kafką a innymi rozwiązaniami do wymiany informacji między systemami.
Zacznijmy od podstawy podstaw. Słyszeliście pewnie niejednokrotnie skrót "API". To "interfejs programistyczny aplikacji". Po angielsku będzie to brzmieć "application programming interface" (API). Jesli zadasz w Internecie pytanie "co to jest API", najprawdopodobniej trafisz na filmy pokazuące że "API jest jak kelner u którego składasz zamówienia na dania, napoje, drinki. Ty wybierasz z karty, a kelner realizuje Twoje zamówienie".
Ale nie potrzebujemy aż takiego łopatologicznego porównania. API to interfejs/funkcja dzięki któremy możesz wysłać do danej aplikacji/systemu dane i możesz je stamtąd odebrać. Nawet jeśli nie jesteś osobą ze świata informatyki łatwo możesz sobie wyobrazić sysutacje gdzie potrzebujesz np. wysłać do systemu kadrowego plik z przepracowanymi godzinami, pobrać z Internetu kody pocztowe przypisane do miast i województw, wysłać rozliczenie PIT. Ty wysyłasz plik, program po drugiej stronie wie jak go odebrać i co z nim zrobić. Albo; Ty potrzebujesz informacji, program po tamtej stronie wie jak ją przygotować i Ci ja dostarczyć.

Neo4j - wyszukiwanie podobnych fraz w bazie
Czasami w projekcie mamy potrzebę przeszukania zbioru i znalezienia podobnej frazy/zwrotu. Np. chcemy sprawdzić czy dane które wpisuje klient są poprawne a nie możemy zastosować zamkniętego słownika bo napewno nie obejmie wszystkich potencjalnych nazw. Innym przykładem może być znalezienie podobnego produktu w bazie danych; klient zwrócił się do nas z prośbą o wycenę produktu określonego przez niego jako 'Juoksentelisinkohan Hyppytyynytyydytys'. Szukamy w naszym katalogu produktów czy mamy taki lub podobny produtk. Jeśli nasza baza produktów zawiera więcej niż 100 tysięcy produktów, będzie nam bardzo trudno przeszukać ją ręcznie. Tym bardziej że produkt ''Juoksentelisinkohan Hyppytyynytyydytys'' to tylko jeden ze 150 o których wycenę poprosił klient. Potrzebujemy oprogramowania które wykona tę pracę za nas.
Istnieje całkiem sporo oprogramowania i algorytmów które przeznaczone są do takich właśnie funkcji. Np. wyszukiwanie 'full text' baz danych. Rezultaty są jednak kiepskie. Takie wyszukiwanie zwróci nam jedynie frazy które zawierają część wyszukiwanego słowa/słów. Full text jest zupełnie nieodporny na różny szyk zdania lub znaki narodowe. Istnieją algorytmy jak levenshtein ale i tutaj mamy podobny problem - ten algorytm nie radzi sobie zupełnie z przestawionym szykiem wyrazów. Mamy w końcu gotowe biblioteki jak choćby biblioteka dla Javascript, fuzzyset, która daje bardzo dobre rezultaty ale przeszukanie bazy danych z kilkuset tysiącami produktów jest bardzo problematyczne.
Istnieje jednak produkt który wydaje się oferować zadawalającą jakość i szybkość. Tym oprogramowaniem jest Neo4j.

Jak połączyć się z API Neo4j?
Neo4j domyślnie oferuje wygodny interfejs w postaci konsoli uruchamianej w przeglądarce webowej. Wystarczy połączyć się z adresem hosta na którym uruchomiona jest baza Neo4j, z portem 7474, np:
http://10.0.0.1:7474
Używając komend bazy danych, Cypher, możemy np. importować i eksportować pliki.Jednak taki sposób pracy nie daje możliwości automatyzacji zadań. Jeśli chcemy wykorzystywać silnik neo4j z poziomu innych aplikacji, automatycznie przetwarzać dane lub wygodnie pracować z grafową bazą danych potrzebujemy innej możliwości korzystania z zasobów Neo4j.

Jak zbudować wydajny system rekomendacji produktów?
Zazwyczaj wiemy co kupują nasi obecni klienci. Jakie artykuły kupili, kiedy je kupili, jakie kategorie kupują najczęściej, jakiej wartości były to zakupy. Jednak dużo trudniej znaleźć odpowiedź co mogli by jeszcze od nas kupić. Najczęstszą próbą poszukiwania odpowiedzi na to pytanie jest segmentacja/klasyfikacja klientów; klienci o podobnych cechach mają zbliżone potrzeby zakupowe. W tym artykulu stworzymy system rekomendacji produktów bazujący na zakupach osób które dokonały podobnych wyborów jak klient któremu będziemy rekomendować produkty (collaborative filtering). Nasz system z dużą skutecznością podpowie produkty, którymi naprawdę może być zaintersowany nasz klient.
Ten system rekomendacji może zostać wykorzystany do różnych celów. Możemy tworzyć rekomendacje w sklepie internetowym. Możemy użyć go do budowy grupy odbiorców naszego e-mailingu lub wykorzystywać ten mechanizm do budowy ofert, w programie lojalnościowym czy tematu do rozmów na temat zakupów klienta.
Do budowy tego systemu użyjemy ogólnie dostępnego, darmoweo oprogramowania - jego wydajność zapewni wsparcie nawet dużych firm.