evitaDB - Fast e-commerce database
logo
page-background

Introduction

evitaDB helps developers to create fast product catalog applications, which are the heart of every e-commerce site. Catalogs work with hierarchical structures, facet search, price search, range search, localisation and fulltext. All these requirements could be solved by general-purpose databases - either relational like PosgreSQL, MySQL, no-sql like Elasticsearch, MongoDB. But in reality, these tasks are quite complex for all these databases and require a lot of work on the part of the application developer. The e-commerce problems can be solved in many ways in these databases, but initial and often naive implementations happen to be very under-performing when the dataset grows larger, or quickly become hard to maintain and evolve further.

The developers of evitaDB have been implementing e-commerce stores on various database platforms for several years. We have experience with multi-page SQL queries, lock wait timeouts, data de-normalisation and other side-effects of traditional relational solutions. We have also tasted the dark side of distributed non-SQL databases which also required multi-page queries and revealed problems with (lack of) transactionality, eventual consistency and hard-to-understand schema definition and querying. We have always felt that we trade a lot of simplicity for the sake of acceptable latency, and we aim for a system that is both simple and performant for the majority of e-commerce use cases. The plug and play device that just works.

That's why we applied for an EU research grant, which allowed us to dedicate necessary time trying to create an alternative to general-purpose databases, that would meet our needs. The progress and results of our research happening between 2019 and 2022 are documented in the separate part of this site.
Use at your own risk and responsibility

evitaDB is currently in alpha version and a lot of development is going on right now. We plan to stabilize the first generally available version in 2024. Until that time, the storage format may change at any time, which will require all existing data to be dropped and re-indexed from the primary storage.

Please do not use evitaDB to store your primary data for the reasons mentioned above.

In the spring of 2023, we plan to release a beta version and deploy it first to our own customers to gain first-hand experience using it ourselves. When we can be sure that the database engine is stable and reliable, we will release the first version to the general public.

Get started

  1. Run evitaDB
    1. Run embedded in you application
    2. Run as service inside Docker
  2. Create your first database
  3. Query our dataset

Use

  1. Data model
    1. Data types
    2. Schema
  2. Connectors
    1. GraphQL
    2. REST
    3. gRPC
    4. Java
    5. C#
  3. API
    1. Define schema
    2. Upsert data
    3. Query data
    4. Write tests
    5. Troubleshoot

Query

  1. Basics
  2. Filtering
    1. Behavioral
    2. Comparable
    3. Constant
    4. Hierarchy
    5. Locale
    6. Logical
    7. Price
    8. Range
    9. References
    10. String
  3. Ordering
    1. Behavioral
    2. Comparable
    3. Constant
    4. Price
    5. Random
    6. Reference
    7. Segmentation
  4. Requirements
    1. Behavioral
    2. Facet
    3. Fetching
    4. Hierarchy
    5. Histogram
    6. Paging
    7. Price
    8. Telemetry

Operate

  1. Configure
    1. Setup TLS
  2. Run
  3. Backup & Restore
  4. Observe

Deep dive

  1. Storage model
  2. Bulk vs. incremental indexing
  3. Transactions
  4. Price for sale calculation
  5. Cache
  6. Observe changes

Solve

  1. Routing
  2. Render category menu
    1. Mega-menu
    2. Dynamic collapsible menu
    3. Listing sub-cateogires
    4. Hybrid menu
    5. Hide parts of the category menu
  3. Filter products in category
    1. With faceted search
    2. With price filter
  4. Render referenced brand
    1. With product listing
    2. With involved categories listing
  5. Handle images & binaries
  6. Model price policies

Author: Ing. Jan Novotný

Date updated: 17.1.2023

Documentation Source