Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/fgforrest/evitadb

evitaDB is a specialized database with an easy-to-use API for e-commerce systems. It is a low-latency NoSQL in-memory engine that handles all the complex tasks that e-commerce systems have to deal with on a daily basis. evitaDB is expected to act as a fast secondary lookup/search index used by front stores.
https://github.com/fgforrest/evitadb

catalog database e-commerce faceted-search graphql-api grpc-api hierarchy-structure histogram in-memory-database nosql-database oltp price-search rest-api

Last synced: about 1 month ago
JSON representation

evitaDB is a specialized database with an easy-to-use API for e-commerce systems. It is a low-latency NoSQL in-memory engine that handles all the complex tasks that e-commerce systems have to deal with on a daily basis. evitaDB is expected to act as a fast secondary lookup/search index used by front stores.

Awesome Lists containing this project

README

        



evitaDB

Visit evitadb.io for the full documentation,
examples and guides.



 

 

 

 

 






Blog


 




Documentation


 




Research


 




Twitter


 




Discord


 




GitHub


 




RSS news feed


 




PGP public key


 




Latest performance results


evitaDB is a specialized database with easy-to-use API for e-commerce systems. It is a low-latency NoSQL in-memory engine
that handles all the complex tasks that e-commerce systems have to deal with on a daily basis. evitaDB is expected to act
as a fast secondary lookup/search index used by front stores.

We aim for an order of magnitude better latency (10x faster or better) for common e-commerce tasks than other SQL or
NoSQL database solutions on the same hardware specification. evitaDB should not be used for storing and processing primary data.

## Why should you consider using evitaDB instead of Elasticsearch, MongoDB or relational database?

- evitaDB is a database specialized for e-commerce tasks and has everything you need to implement an e-commerce catalog
- evitaDB is [more performant](documentation/performance/performance_comparison.md) than Elasticsearch or PostgreSQL on the same
HW sizing in typical e-commerce scenarios
- evitaDB has a ready to use API from the day one:

- [GraphQL](documentation/user/en/use/connectors/graphql.md) - targets rich JavaScript front-ends
- [REST](documentation/user/en/use/connectors/rest.md) - targets server side applications
- [gRPC](documentation/user/en/use/connectors/grpc.md) - targets fast inter-server communication used in microservices
architecture and is used for the evitaDB client drivers

## What's current status of evitaDB?

evitaDB is currently under active development. evitaDB is supported by the company [FG Forrest](https://www.fg.cz),
which specializes in the development of e-commerce stores for large clients in the Czech Republic and abroad. evitaDB
concepts have been proven to work well in production systems with annual sales exceeding 50 million €.

Engineers from FG Forrest cooperate with academic team from [University of Hradec Králové](https://www.uhk.cz), so our
statements about evitaDB performance are backed by thorough (and unbiased) testing and research. All proofs can be found
in [this repository](https://github.com/FgForrest/evitaDB-research), and you can run tests on your HW to verify our conclusions.

## What's the license of the evitaDB

evitaDB is licensed under the [Business Source License 1.1](LICENSE). Technically, it is not
an open source license, but is an [open source friendly](https://itsfoss.com/making-the-business-source-license-open-source-compliant/)
license, because it automatically converts to one after a period of time specified in the license.

We're fans of open source, and we've benefited a lot from open source software (even the database engine uses some of it).
The database implementation has taken thousands of man-days and, if successful, will take several thousand more. We were
lucky to get an [EU grant](https://evitadb.io/project-info) that partially funded the initial implementation, but we
need to build a self-sustaining project in the long run. [Our company](https://www.fg.cz) uses evitaDB for its own
commercial projects, so the development of the database is guaranteed, but without additional income the development
would be limited. That's why we have chosen this type of license, but in the end we allow you - our users - almost any
use.

**In a nutshell:**

- the BSL license covers a period of 4 years from the date of the software release
- 4 year old version of evitaDB becomes [permissive Apache License, v.2](https://fossa.com/blog/open-source-licenses-101-apache-license-2-0/)
- both BSL and Apache licenses allow you to use evitaDB for OSS and/or commercial projects free of charge
- there is one exception - you may not offer and sell evitaDB as a service to third parties

That's it.

[Read license FAQ](https://evitadb.io/documentation/use/license)

## Prerequisities

To checkout Git repository on Windows you need to have long paths enabled:

```shell
git config --system core.longpaths true
```

evitaDB requires and is tested on OpenJDK 17.

Java applications support multiple platforms depending on the
[JRE/JDK vendor](https://wiki.openjdk.org/display/Build/Supported+Build+Platforms). All major hardware
architectures (x86_64, ARM64) and operating systems (Linux, MacOS, Windows) are supported. Due to the size of our
team, we regularly test evitaDB only on the Linux AMD64 platform (which you can also use on Windows thanks to the
[Windows Linux Subsystem](https://learn.microsoft.com/en-us/windows/wsl/install)). The performance can be worse,
and you may experience minor problems when running evitaDB on other (non-Linux) environments. Please report any bugs
you might encounter, and we'll try to fix them as soon as possible.

## How to build evitaDB

evitaDB is built using [Maven](https://maven.apache.org/). You can build the entire project by running the following
command in the root directory of the project:

```shell
mvn clean install
```

**Maven setup**

The build uses Maven toolchains to select the correct JDK version. You must have JDK 17 installed and configured in your
in your Maven toolchains. You can find more information about Maven toolchains in the [Maven Documentation](https://maven.apache.org/guides/mini/guide-using-toolchains.html).

In short, you need `~/.m2/toolchains.xml` in your home directory next to `~/.m2/settings.xml`:

```xml


jdk

17
openjdk
jdk17


/path/to/your/jdk17/installation/directory

```

## How this repository is organized

- **documentation**: research documents, documentation, specifications
- **evita_api**: set of all supported data types in evitaDB, conversions to & from other types, common data structures, basic exception hierarchy
- **evita_db**: Maven POM allowing to link all necessary libraries for embedded evitaDB usage scenario
- **evita_engine**: implementation of the database engine
- **evita_external_api**: web API implementation
- **evita_external_api_core**: shared logic for all web APIs, Undertow web server integration, annotation framework for APIs
- **evita_external_api_graphql**: implementation of GraphQL API
- **evita_external_api_grpc**: implementation of gRPC API
- **client**: Java driver for client/server usage scenario
- **server**: gRPC server
- **shared**: shared classes between client & server (generated gRPC stubs)
- **evita_external_api_rest**: implementation of REST API
- **evita_external_api_lab**: GUI client and its API
- **evita_functional_tests**: test suite verifying functional correctness of standard and edge cases of the API on a
small amount of data, this library also contains unit tests for evita_db
- **evita_performance_tests**: test suite executing most common operations on real world data that generates performance
statistics of each implementation
- **evita_query**: query language, query parser, utilities for query handling
- **evita_store**: binary serialization using Kryo library, persistent key/value datastore implementation
- **evita_test_support**: utility classes that make writing integration tests with evitaDB easier
- **jacoco**: Maven POM that allows to aggregate test coverage for entire project

# Quality requirements for the code

In order code to be accepted it will fulfill following criteria:

- line coverage with unit tests will be >= 70%
- all classes and methods will have comprehensible JavaDoc
- there will be no TODO statements in the code
- there will be no commented out code

# Standing on giants' shoulders



evitaDB uses the following open source projects:

- [RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap) by Daniel Lemire, Richard Statin and others
- [Kryo](https://github.com/EsotericSoftware/kryo) by Nathan Sweet, Thomas Heigl, Martin Grotzke and others
- [Netty](https://github.com/netty/netty) and [Armeria](https://github.com/line/armeria) by Trustin Lee, Norman Mauer, Ikhun Um and others
- [Logback](https://github.com/qos-ch/logback) by Ceki Gülcü and others
- [Jackson](https://github.com/FasterXML/jackson) by Tatu Saloranta and others
- [gRPC Java](https://github.com/grpc/grpc-java) by Eric Anderson, Carl Mastrangelo, ZHANG Dapeng, Kun Zhang and others
- [GraphQL Java](https://github.com/graphql-java/graphql-java) by Andreas Marek, Brad Baker and others
- [Byte Buddy](https://github.com/raphw/byte-buddy) by Rafael Winterhalter and others

And many others. We are grateful for their work.






-------------------------------------------------------------------------

[Icons sourced at Icons8.com](https://icons8.com/)

[//]: # (https://icons8.com/icon/set/github/carbon-copy--static--white)