EvitaDB dláždí cestu pro rychlejší e-commerce

Už letos spustíme specializovanou databázi evitaDB, která e-shopům skokově zrychlí práci s daty. Seznamte se s ní v našem článku.

Po třech letech vývoje jsme dokončili hlavní část nové e-commerce databáze evitaDB. Toto inovativní řešení v kombinaci s dalšími aktuálně probíhajícími aktivitami nám do budoucna přinese zjednodušení implementace pro nové klienty a především zcela novou úroveň rychlosti prodejních katalogů (e-shopů) i u těch nejnáročnějších prodejců (statisíce produktů, miliony cen). 

EvitaDB je noSQL paměťová databáze, která slouží k ukládání a prohledávání veškerých dat pro uživatelskou část webu, umožňující provádět tisíce až desetitisíce komplexních dotazů za sekundu, a to i nad rozsáhlými daty. 

Dotazovací jazyk evitaDB obsahuje výrazy, které v běžných databázích neexistují a musí se složitě „emulovat“. Jednoduchý dotaz vývojářům umožní načíst entity (např. produkty) organizované v hierarchiích (např. kategoriích), spočítat pro ně statistiky pro parametrické vyhledávání či spočítat správnou prodejní cenu. Pro představu si zde můžeme jeden takový dotaz ukázat:

query(
   collection("product"),
   filterBy(
      and(
         hierarchyWithin(
            "categories",
            entityHaving(
               attributeEquals("url""/lokalni-potraviny")
            )
         ),
         entityLocaleEquals(new Locale("cs""CZ")),
         priceValidNow(),
         priceInCurrency(Currency.getInstance("CZK")),
         priceInPriceLists("vip""verny-zakaznik""bezne-ceny"),
         userFilter(
            facetInSet(
               "parameter",
               entityHaving(
                  attributeInSet("code""bezlepkove""puvodni-receptura")
               )
            ),
            priceBetween(new BigDecimal(600), new BigDecimal(1600))
         )
      )
   ),
   require(
      page(120),
      facetSummary(FacetStatisticsDepth.IMPACT),
      priceType(QueryPriceMode.WITH_TAX),
      priceHistogram(30)
   )
);

Dotaz vrátí první stránku 20 produktů v kategorii „lokální potraviny” a jejích podkategoriích, které mají českou lokalizaci a platnou cenu v jednom z ceníků „VIP”, „věrný zákazník” či „běžné ceny” v měně česká koruna. Zároveň vyfiltruje pouze produkty s cenou mezi 600 a 1 600 Kč včetně DPH a s parametry „bezlepkové” a „původní receptura”. 

Výsledkem tedy budou všechny položky s českou lokalizací a spočítanými prodejními cenami. Pro ceny bude vypočítán i tzv. histogram cen s maximálním počtem 30 sloupců tak, aby je bylo možné na vyhrazeném prostoru zobrazit. Kromě toho bude vypočítán i souhrn parametrických filtrů s dopadovou analýzou, jak by vypadal výsledek, pokud by uživatel kromě dvou zvolených parametrů vybral ještě některé další.

Analogický dotaz by v jiných obecně zaměřených databázích (ať už relačních či noSQL) vyžadoval mnohem komplikovanější několikastránkovou alternativu, či spíše několik nezávislých dotazů s množstvím aplikační logiky, která data zkompletuje dohromady.

Kromě zjednodušení dotazovacího jazyka nabízí evitaDB také extrémní rychlost odezvy bez nutnosti použití cachovacích mechanismů. Ta je částečně zajištěná tím, že evitaDB udržuje všechny vyhledávací indexy v operační paměti a má je tudíž okamžitě k dispozici bez nutnosti komunikace s pomalým diskem (ať už SSD či HDD). 

Pomáhají také optimalizované bitmapové datové struktury a fakt, že se v rámci dotazu kromě seznamu produktů vyhodnocují i další dílčí datové struktury (např. parametrické filtry, histogramy atp.). Díky tomu je možné při výpočtu znovu použít i řadu mezivýsledků, což detailně popisujeme v dokumentaci výzkumné části.

Z našich srovnávacích měření vyplývá, že vyhodnocování typických e-commerce scénářů je v evitaDB 10× rychlejší než v Elasticsearch a až 100× rychlejší než v PostgreSQL implementaci. 

Všechna nezbytná API vývojářům k dispozici

Vývojáři spolu s evitaDB okamžitě dostanou kromě Java API i další tři webová API, která pokrývají odlišné potřeby a použití:

  • REST API konzervativní API pro externí využití, snadno použitelné z libovolného programovacího jazyka.
  • GraphQL API moderní API, snadno použitelné z JavaScriptové domény ať už přímo z webového prohlížeče nebo pomocí Node.JS/Deno/Bun middleware.
  • gRPC API ultrarychlý binární protokol postavený na HTTP/2 a Google Protocol Buffers, který najde využití především v architektuře mikroslužeb.

Každý katalog (obdoba databázového schématu) je automaticky zpřístupněn pomocí všech výše uvedených API, aniž by vývojář musel napsat byť jedinou řádku kódu. API umožňují jak dotazování, tak i zápis dat.

Popis databáze jako takové vydá na stovky stránek, ale to není účelem tohoto textu. Vše potřebné si můžete sami vyhledat na stránkách projektu.

EvitaDB je k dispozici všem. Bezplatně

Projekt evitaDB byl realizován ve spolupráci s Univerzitou Hradec Králové a byl částečně financován z grantu MPO/EU. Jeho vývoj trval tři roky a v současné době je zveřejněn na platformě GitHub včetně všech zdrojových kódů. Prozatím je dostupná jeho preview verze a v průběhu roku 2023 jej chceme připravit na vydání první stabilní verze. Finalizujeme jeho dokumentaci, doplňujeme další důležité funkcionality, dopisujeme řadu integračních testů a především jej chceme nasadit u našich vlastních zákazníků.

Projekt je uvolněn bezplatně pro použití ostatními firmami v oboru, a to jak pro nekomerční, tak i komerční použití. Považujeme za morálně správné poskytnout dílo, které bylo spolufinancováno ze společných státních peněz, i ostatním jednotlivcům nebo firmám bez nároku na honorář. 

Budeme rádi, pokud na oplátku získáme jejich zpětnou vazbu (třeba jen hvězdičkou na GitHubu) a časem třeba i spolupráci ve formě společných kontribucí do projektu.

 

Mohlo by vás zajímat

Redesign webu pojišťovny Kooperativa (záznam přednášky z UX Day 2023)

Podívejte se na záznam přednášky o rozsáhlém redesignu, který jsme realizovali pro pojišťovnu Kooperativa. Těšte se na čísla, data i různé zajímavosti!

Celý článek

Na teambuilding v Krkonoších jen tak nezapomeneme!

Velký teambuilding obvykle pořádáme jednou za rok, takže si dáváme opravdu záležet. A ten letošní byl pořádně našlápnutý.

Celý článek

Přeskočit na hlavní nabídku