FineDB is a multi-threaded NoSQL DBMS written in C, founded by Amaury Bouchard in 2013. It is based on Nanomsg and LMDB (Lightning Memory-Mapped Database) and is currently open-sourced and available on Github. It handles all basic queries. It uses LMDB as its internal storage manager, so all detailed information on the storage model can be found on LMDB's page. The way that the database is set up is that there are three main threads to handle the connections, writing and communication between the threads. For the communication between the threads, there are two nanomsg communication streams that have fanin and fanout streams. With these streams and threads, the DBMS connects to the LMDB storage model.
- Website
- http://www.finedb.org[01]
- Source Code
- https://github.com/Amaury/FineDB[02]
- Developer
- Country of Origin
- FR
- Start Year
- 2013 [11]
- End Year
- 2013
- Project Types
- Hobby, Open Source
- Written in
- C
- Derived From
- LMDB
- Embeds / Uses
- LMDB
- License
- Apache v2
FineDB is a multi-threaded NoSQL DBMS written in C, founded by Amaury Bouchard in 2013. It is based on Nanomsg and LMDB (Lightning Memory-Mapped Database) and is currently open-sourced and available on Github. It handles all basic queries. It uses LMDB as its internal storage manager, so all detailed information on the storage model can be found on LMDB's page. The way that the database is set up is that there are three main threads to handle the connections, writing and communication between the threads. For the communication between the threads, there are two nanomsg communication streams that have fanin and fanout streams. With these streams and threads, the DBMS connects to the LMDB storage model.
History[04][05][02]
FineDB was created by Amaury Bouchard of France in June of 2013, listed on his website as a project that he could use to learn more about network programming, multi-threading, replication and clustering. There have been no major updates to the code since September of 2013. Based on blog posts, however, Bouchard has said that he is currently focused on his startup and will continue to work on the DB soon.
Compression[06]
FineDB makes use of Google's Snappy (previously known as Zippy), which is open-source and written in C++. Snappy uses byte-oriented encoding during the compression process.
Concurrency Control
Again, since FineDB is derived from LMDB, we see that the concurrency control other than that of the system as a whole is directly handled by the LMDB storage engine. Thus, we has the use of MVCC so that readers and writers do not block each other.
Data Model[07]
After compression, data is stored in a key with a description (1 byte), replication timestamp (8 bytes), expiration time stamp (8 bytes), and the data (n bytes). The length of the key is 64KB and length of the data is 4GB.
Indexes[08]
Since this system is derived from LMDB, the indexing uses that of LMDB. The DB uses 2 B+ trees to maintain the data pages and the free pages. The performance is heavily reliant on the length o the transactions.
Query Interface[09]
The server uses a binary protocol to communicate with the client. The requests contain a byte describing the command and is followed by other data if the request requires it. The response follows a similar format.
Storage Architecture[08]
Since the DB uses LMDB as the storage model, we look at LMDB's architecture and see that it is in memory and uses mmap. Since it uses mmap, the actual memory is bounded and is controlled by the OS.
System Architecture[10]
There are three main types of threads in the server. The main thread creates the other threads while listening for connections. The write thread writes into the LMDB storage engine asynchronously. The communication threads read in the requests and communicate with the client-side.
Citations
11 sources- http://www.finedb.org finedb.org
- GitHub - Amaury/FineDB: High-performance nosql database. Written in C, multi-threaded, based on LightningDB and nanomsg. · GitHub github.com
- http://www.finedb.org/page/show/1/protocol finedb.org
- Amaury.net amaury.net
- http://www.finedb.org/page/show/16/development-status finedb.org
- Snappy (compression) - Wikipedia wikipedia.org
- http://www.finedb.org/page/show/27/storage finedb.org
- https://dbdb.io/db/lmdb dbdb.io
- http://www.finedb.org/page/show/1 finedb.org
- http://www.finedb.org/page/show/21/server-design finedb.org
- Initial commit github.com