meilisearch/README.md

57 lines
3.1 KiB
Markdown
Raw Normal View History

# MeiliDB
[![Build Status](https://travis-ci.org/Kerollmops/MeiliDB.svg?branch=master)](https://travis-ci.org/Kerollmops/MeiliDB)
[![dependency status](https://deps.rs/repo/github/Kerollmops/MeiliDB/status.svg)](https://deps.rs/repo/github/Kerollmops/MeiliDB)
[![License](https://img.shields.io/github/license/Kerollmops/MeiliDB.svg)](https://github.com/Kerollmops/MeiliDB)
[![Rust 1.31+](https://img.shields.io/badge/rust-1.31+-lightgray.svg)](
https://www.rust-lang.org)
2018-12-11 23:17:22 +08:00
A _full-text search database_ using a key-value store internally.
2018-12-19 01:01:19 +08:00
It uses [RocksDB](https://github.com/facebook/rocksdb) as a built-in database, to store documents and internal data. The key-value store power allow us to handle updates and queries with small memory and CPU overheads.
2018-10-22 00:21:04 +08:00
2018-12-19 01:01:19 +08:00
You can [read the deep dive](deep-dive.md) if you want more information on the engine, it describes the whole process of generating updates and handling queries.
2018-12-11 23:17:22 +08:00
2018-12-19 01:01:19 +08:00
We will be proud if you submit pull requests. It will help to help to grow this project, you can start contributing by checking [issues tagged "good-first-issue"](https://github.com/Kerollmops/MeiliDB/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). It a good start!
2018-12-11 23:17:22 +08:00
2018-12-19 01:01:19 +08:00
At the moment this project is only a library. It means that it's not prividing yet any binaries. To get started, we provided some examples in the `examples/` folder that are made to work with the data located in the `misc/` folder.
2018-12-11 23:17:22 +08:00
2018-12-19 01:01:19 +08:00
In a near future MeiliDB, we will provide a binary to execute this project as database, so you will be able to update and query it using a protocol. This will be our final goal, [see the milestones](https://github.com/Kerollmops/MeiliDB/milestones). At the end, MeiliDB will be a bunch of network protocols, and wrappers. We will publish the entire project on https://crates.io, following our usual update cycle.
2018-10-22 00:21:04 +08:00
## Performances
2018-12-19 01:01:19 +08:00
_these information are outdated (October 2018) It will be updated soon_
2018-12-11 23:17:22 +08:00
2018-12-19 01:01:19 +08:00
We made some tests on remote machines and found that MeiliDB easily handles a dataset of near 280k products, on a $5/month server with a single vCPU and 1GB of RAM, running the same index, with a simple query:
2018-10-22 00:21:04 +08:00
2018-12-19 01:01:19 +08:00
- near 190 concurrent users with an average response time of 90ms
- 150 concurrent users with an average response time of 70ms
- 100 concurrent users with an average response time of 45ms
2018-10-22 00:21:04 +08:00
2018-12-19 01:01:19 +08:00
Servers were located in Amsterdam and tests were made between two different locations.
2018-10-22 00:21:04 +08:00
### Notes
The default Rust allocator has recently been [changed to use the system allocator](https://github.com/rust-lang/rust/pull/51241/).
We have seen much better performances when [using jemalloc as the global allocator](https://github.com/alexcrichton/jemallocator#documentation).
2018-10-22 00:21:04 +08:00
## Usage and examples
2018-12-19 01:01:19 +08:00
MeiliDB runs with an index like most search engines.
So to test the library you can create one by indexing a simple csv file.
```bash
2018-12-11 23:17:22 +08:00
cargo run --release --example create-database -- test.mdb misc/kaggle.csv
```
2018-12-19 01:01:19 +08:00
Once the command is executed, the index should be in the `test.mdb` folder.
2018-12-19 01:01:19 +08:00
You are now able to run the `query-database` example, to play with MeiliDB.
```bash
2018-12-11 23:17:22 +08:00
cargo run --release --example query-database -- test.mdb
```