Dlaczego serwisy na nodejs są szybkie i powolne jednocześnie?

Pewnie słyszeliście, że nodejs jest jednowątkowym środowiskiem do uruchomienia JS na serwerze, i być może zastanawialiście się, dlaczego serwisy uruchomione w tym jednowątkowym środowisku są takie szybkiej w porównaniu do innych środowisk uruchomieniowych.

Czytaj dalej

Bazy danych skazane na rozproszenie

W czasach dzisiejszych, gdy biznesy często są globalne a działalność operacyjna większości przedsiębiorstw opiera się na systemy informatyczne, pojawiają się problemy z dostępnością danych czy serwisu ogółem. Zcentralizowane systemy jak najbardziej zdają egzaminy w większości przypadków, da się bez problemu używać z systemu uruchomionego w Europie będąc fizycznie w Australii czy na Hawajach, ale doświadczenie klientów z takimi systemami może być oceniane średnio – głównie za sprawą niskiej wydajności sieci. Choć o tzw latency rzędu maks 2s-3s można było kiedyś tylko pomarzyć – pamiętam jeszcze czasy dial-up i te długie minuty buforyzowania filmiku na youtube, – ale w dziś takie czasy odpowiedzi już są uznawane za mauvais ton.

Inżynierowie systemów informatycznych borykają się z problemamy wydajnościowymi chyba od udostępnienia pierwszych publicznych serwisów, czy to bankowych systemów transakcyjnych czy zwykłej strony internetowej. Często dla rzadko zmieniających się danych stosuje się cache, czy to na CDN, czy w web serwerze czy jakiś Redis lub podobny. Takie cache są ok, aż do momentu jak dane zaczną się zmieniać tak często że koszt aktualizacji cache jest większy od round-tripa do instancji bazy.

Czytaj dalej

Dzięki za pamięć

Strach pomyśleć, że w czasach powszechnych Garbage Collectorów czy to w .NET-cie czy innej Javie, są jeszcze programiści którzy ręcznie zarządzają pamięcią 😱. Ale nawet, mając pod ręką wspaniałego pomocnika, jakim jest GC, nie warto zapominać, jak CLR zarządza pamięcią i warto wiedzieć kilka tricków jak można optymalizować działanie programu w tej czy innej sytuacji.

Czytaj dalej

Optymalizacja implementacji `Insert or Update` zapytań na bazie danych

Proszę Państwa, czasem jest potrzeba zrobić coś a’la Insert or Update. Zadanie jest dość trywialne, ale nie zawsze optymalne zarówno pod względem czasu implementacji jak i czasu wykonania – pierwsze co wpada do głowy, to implementacja czterech kroków:

  1. Wyciągnij wpisy z tabeli które spełniają wymagania
  2. Sprawdź czy wynik poprzedniego zapytania jest pusty
  3. Jeśli odpowiedź jest pozytywna – wykonaj UPDATE
  4. W przeciwnym razie wykonaj INSERT

W takich sytuacjach bardzo się przydaje zgłębienie wiedzy w narzędziach i zapytaniach wychodzących poza zakres ANSI SQL np. Transact-SQL (MS Sql Server) lub PL/pgSQL (Postgres). Oba te wyżej wspomniane języki mają cudowne narzędzie umożliwiające wykonanie całej roboty InsertOrUpdate za jednym zapytaniem – tzw UPSERT.

Nazwa pochodzi od połączenia dwóch słów – UPDATE oraz INSERT. Założenie takiej kwerendy jest proste – spróbuj wstawić nowy rekord do tabeli, i w przypadku pojawienia się błędu o duplikacje, zrób update.

Czytaj dalej

Indeksowanie kolumny typu NVARCHAR(MAX)

Bardzo rzadko piszę tutaj, jest to spowodowane tym że jestem leniwym, ale dziś zwalczyłem leń i przekazuję do użytku publicznego prostą receptę na indeksowanie kolumny typu NVARCHAR(MAX).

Ostatnio zderzyłem się z wydajnością jednej z procedur składowanej (ang. stored procedure), a mianowicie – łączenie tabeli z inną tabelą po kolumnie tupy NVARCHAR(MAX) daje bardzo słabą wydajność prz >1k rekordów w tabeli. Teraz każdy może powiedzieć – no panie, wiadomo że trzeba założyć indeksy ? Czytaj dalej

Wydajność NHibernate przy dużych ilościach danych

Ostatnio w pracy napotkaliśmy się na problem związany z wydajnością NH przy opracowaniu dużej ilości danych (200k+ rekordów). Problem wystąpił przy próbie usunięcia tych rekordów.

Background

Mamy własny Windows Service, który co jakiś czas odpala nasze „joby”, taki sobie customowy task scheduler. Jeden z tasków przepracowuje tabele w której się znajduje prawie 1mln rekordów. Ten task robi dokładnie jedną rzecz – usuwa stare, niepotrzebne nam rekordy. Czytaj dalej