Every supported Key-Value Store has it's own wrapper:
engine_ucset.cppfor unum-cloud/ucset in-memory AVL trees,engine_leveldb.cppfor google/leveldb persistent B trees,engine_rocksdb.cppfor facebook/rocksdb persistent LSM trees.
Every server protocol has it's own implementation file:
flight_server.cppfor Apache Arrow Flight RPC server,rest_server.cppfor now deprecated REST server,json_rpc_server.cfor the minimalistic JSON-RPC server.
Some protocols, come with pre-built wrappers:
flight_client.cppfor Apache Arrow Flight RPC client.
On top of the binary layer, every structured modality has it's own serialization:
modality_docs.cppfor JSON, BSON and MessagePack documents,modality_graph.cppfor Directed Multi-Graphs,modality_vectors.cppfor Approximate Vector Search,modality_paths.cppfor String and Path-like keys.
All implementations of all modalities try to avoid dynamic memory allocations. Every call uses its own arena, until he needs to grow beyond it. Largely for that reason we chose to use the following libraries for the implementation of logic across different modalities:
- For Documents:
yyjson: to update the state of documents.simdjson: to sample fields from immutable documents.mongo-c-driver: to support BSON inputs.zlibfor document compression. 🔜
- For Paths:
pcre2: to JIT Regular Expressions.
- For Graphs:
turbopforfor graph compression. 🔜
More broadly:
jemallocfor faster NUMA-aware allocations.arrowfor shared memory columnar representations.arrow_flightfor gRPC implementation.fmtfor string formatting of gRPC requests.