Category: Search Engines
Elasticsearch na dobrej drodze
Wersja 6
Wersja 6.0 ElasticSearch jest dla mnie szczególna - twórcy wprowadzają zmiany ułatwiające zarządzanie, ale też rezygnują z dawnych błędów, które krytykowałem na łamach tego bloga.
Każdemu polecam migrację do wersji 6.x. Służę pomocą w migracji z wersji 2.x oraz 5.x.
Aktualizacje ElasticSearch - jak wykonać?
Nie można zaprzeczyć, że ElasticSearch jest rozwijany dynamicznie. Tak szybki rozwój produktu nie zawsze jest oczekiwany, bo albo wdrożenie zostaje (z przyczyn obiektywnych) oparte o zamrożoną (i nie wspieraną) wersję, albo konieczne staje się przeprowadzanie migracji do nowszych wersji. Takie operacje trzeba zaplanować, zabudżetować, a na dodatek nie obejdzie się bez downtime i sukcesem jest, gdy przerwa techniczna jest relatywnie krótka.
ElasticSearch nie taki elastyczny
Oryginalny tekst datowany jest na 4.11.2015, a uzupełniony w lipcu 2016
ElasticSearch jest takim samym systemem wyszukiwania, jak każdy inny powstały w przeciągu ostatnich kilkudziesięciu lat. Indeks ma sztywną strukturę i nic tego nie zmieni. Jedyna różnica polega na tym, że tenże indeks jest modyfikowany w locie / w tle, co niesie za sobą sporo, czasem przykrych konsekwencji, choć na początku może wydawać się to świetnym pomysłem.
Nie-typy, czyli “mappingi”
ElasticSearch posiada tzw. “mappingi” . Niektórzy mogą uważać, że są to typy indeksowanych dokumentów. Słowo “typ” z resztą pada w dokumentacji. Ale to nie są typy. Są to elementy grupujące kolumny indeksu w pewne logiczne klasy , które mogą posłużyć jako dodatkowy filtr lub zbiór definicji o analizerach i tokenizerach, oraz mogą mieć znaczenie wydajnościowe (operujemy na jakimś podzbiorze). Można je porównać do widoków znanych z [RDBMS].
Category: Architecture
RESTful JavaScript client w kwadrans
Próbowałem restful.js, próbowałem jQuery REST client, aż ostatecznie dałem sobie spokój. Dla mnie były jakieś trudne/ciężkie w użyciu. A czym powinien być REST client? Cienkim wrapperem na dowolnego klienta HTTP, który gada z dowolnym url-em.
Na własne potrzeby założyłem, że:
- interfejs ma być banalnie prosty w użyciu
- wystarczy obsługa tylko content type application/json
- ma być obsługa nagłówków, także defaultowych (żeby się nie powtarzać)
- dozwolona jest zależność od jQuery (można się tego względnie łatwo wyzbyć)
Powstał prototyp:
REST po ludzku
Znalazłem ostatnio dwa ciekawe wpisy traktujące o architekturze REST. Pierwszy z nich jest autorstwa niezastąpionego Martina Fowlera, który ciekawie przedstawił drogę od prostych usług typu RPC aż po podstawy RESTful (ale nie samego REST-a). Zdecydowanie ułatwia przejście od jednej do drugiej koncepcji:

REST Overview
Z kolei drugą perełką jest wpis Ryana Tomayko , programisty GitHuba i Heroku, który wytłumaczył idee RESTful (wirtualnej?) żonie. Niestety środowisko zwolenników ideologii ponad rozsądkiem zaatakowało Ryana i autor usunął artykuł-wywiad (a obecnie cała jego strona nie działa), ale na szczęście (w tym wypadku) Internet zachował jego kopię. Znajdziecie takową wyrenderowaną do PDF oraz na archive.org .
Co boli MVC
Prowadziliśmy swego czasu dyskusje o logice biznesowej i szukaliśmy rozwiązania starając się znaleźć jej miejsce w MVC . Stosując bowiem ten paradygmat logika naturalnie “rozmywa się” po kontrolerach i modelach (ekstremiści wstawiają ją nawet do widoków). Typowy przykład złego podejścia to kiepskie implementacje ORM (Propel - PHP , DjangoORM - Python ):
class User(Model):
def save(*args, **kwargs):
pass
W tym przypadku Model
jest jednocześnie persistance managerem i wykonuje operacje, których nie powinien. Prawidłowe podejście to
class UserManager:
def save(self, user):
pass
Który kod łatwiej przetestować? Gdzie znajduje się logika zapisu stanu encji?
Category: REST
RESTful JavaScript client w kwadrans
Próbowałem restful.js, próbowałem jQuery REST client, aż ostatecznie dałem sobie spokój. Dla mnie były jakieś trudne/ciężkie w użyciu. A czym powinien być REST client? Cienkim wrapperem na dowolnego klienta HTTP, który gada z dowolnym url-em.
Na własne potrzeby założyłem, że:
- interfejs ma być banalnie prosty w użyciu
- wystarczy obsługa tylko content type application/json
- ma być obsługa nagłówków, także defaultowych (żeby się nie powtarzać)
- dozwolona jest zależność od jQuery (można się tego względnie łatwo wyzbyć)
Powstał prototyp:
REST po ludzku
Znalazłem ostatnio dwa ciekawe wpisy traktujące o architekturze REST. Pierwszy z nich jest autorstwa niezastąpionego Martina Fowlera, który ciekawie przedstawił drogę od prostych usług typu RPC aż po podstawy RESTful (ale nie samego REST-a). Zdecydowanie ułatwia przejście od jednej do drugiej koncepcji:

REST Overview
Z kolei drugą perełką jest wpis Ryana Tomayko , programisty GitHuba i Heroku, który wytłumaczył idee RESTful (wirtualnej?) żonie. Niestety środowisko zwolenników ideologii ponad rozsądkiem zaatakowało Ryana i autor usunął artykuł-wywiad (a obecnie cała jego strona nie działa), ale na szczęście (w tym wypadku) Internet zachował jego kopię. Znajdziecie takową wyrenderowaną do PDF oraz na archive.org .