Main Page: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
= | = MemCP β A Modern In-Memory Columnar Database = | ||
MemCP is a | '''MemCP is a high-performance, in-memory, column-oriented database designed for modern workloads.''' | ||
It provides a lightweight, developer-friendly alternative to traditional relational databases such as MySQL, with a focus on speed, compression, and direct API integration. | |||
---- | ---- | ||
=== | == Key Features == | ||
* '''High Performance''': NUMA-aware, parallelized query execution optimized for multicore CPUs, large caches, and NVMe SSDs. Handles both OLTP and OLAP workloads efficiently.Β | |||
* '''Columnar Storage''': Data is stored by column for improved compression, reduced memory footprint, and faster analytical queries.Β | |||
* '''In-Memory Operation''': Designed to keep data in memory, with configurable persistence backends for durability.Β | |||
* '''Built-in APIs''': Exposes RESTful endpoints directly from the database, reducing middleware overhead.Β | |||
* '''Compression''': Multiple strategies (bit-packing, dictionary encoding, sequence compression) reduce storage by up to 80% compared to MySQL/MariaDB.Β | |||
* '''Simple Deployment''': Start with a single <code>docker run</code> or <code>pm2 start</code> command. Lightweight footprint (~10MB).Β | |||
* '''Extensible''': Written in Go, with pluggable storage backends and custom frontend support (SQL, RDF, REST). | |||
---- | |||
== Why MemCP? == | |||
Traditional relational databases were designed decades ago, optimized for spinning disks and single-core CPUs.Β | |||
MemCP rethinks the core design for todayβs hardware and workloads: | |||
* Real-time dashboards and analyticsΒ | |||
* Data-heavy SaaS platformsΒ | |||
* Embedded systems with limited resourcesΒ | |||
* High-throughput OLTP/OLAP hybridsΒ | |||
---- | |||
== Quick Start == | |||
Clone and build MemCP from source: | |||
Β | |||
<pre> | |||
git clone https://github.com/launix-de/memcp | |||
cd memcp | |||
go get | |||
make | |||
pm2 start ./memcp ./data/ | |||
</pre> | |||
Β | |||
Connect with MySQL tooling: | |||
Β | |||
<pre> | |||
mysql -u root -p -P 3307 | |||
Enter password: admin | |||
</pre> | |||
---- | ---- | ||
== | == MemCP vs. MySQL == | ||
{| class="wikitable" | {| class="wikitable" | ||
!Feature | ! Feature | ||
!MySQL | ! MySQL | ||
!MemCP | ! MemCP | ||
|- | |- | ||
|Storage Model | | Storage Model | ||
|Row-based | | Row-based | ||
|Column-based (compressed) | | Column-based (compressed) | ||
|- | |- | ||
|Performance | | Performance | ||
|Good | | Good | ||
| | | NUMA-optimized, in-memory | ||
|- | |- | ||
|In-Memory Capable | | In-Memory Capable | ||
|Limited | | Limited | ||
|Yes | | Yes (default) | ||
|- | |- | ||
|REST API Integration | | REST API Integration | ||
|External | | External | ||
|Built-in | | Built-in | ||
|- | |- | ||
|Installation Footprint | | Installation Footprint | ||
|~150MB+ | | ~150MB+ | ||
|~10MB | | ~10MB | ||
|- | |- | ||
|Open Source | | Open Source | ||
|β
| | β
| ||
|β
| | β
| ||
|} | |} | ||
---- | |||
Β | |||
== Architecture Overview == | |||
* '''Tables, Schemas, Columns''': Familiar SQL-style structures with a columnar physical layout.Β | |||
* '''Transaction Model''': Supports both OLTP and OLAP semantics with delta + main storage.Β | |||
* '''Persistence''': Configurable storage backends (filesystem, S3, Ceph). | |||
* '''Frontends''': Multiple query interfaces: | |||
Β - SQL frontend (MySQL wire protocol + SQL over REST)Β | |||
Β - RDF/graph query engineΒ | |||
Β - Custom APIs via in-database web appsΒ | |||
---- | ---- | ||
=== | == Documentation == | ||
* [[What is OLTP and OLAP]]Β | |||
* [[History of the MemCP project]]Β | |||
* [[Hardware Requirements]]Β | |||
* [[Persistency and Performance Guarantees]]Β | |||
* [[Comparison: MemCP vs. MySQL]]Β | |||
* [[Install MemCP with Docker|Install with Docker]]Β | |||
* [[Compile MemCP from Source|Build from Source]]Β | |||
* [[Contributing]]Β | |||
* [[SQL over REST]]Β | |||
* [[In-Database WebApps|REST & Microservices]]Β | |||
---- | |||
== | == Further Reading == | ||
* | * [https://github.org/launix-de/memcp MemCP on GitHub]Β | ||
* [https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]Β | |||
* [https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]Β | |||
* | * [https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms] | ||
* | |||
* | |||
Additional blog posts on design decisions, compression techniques, and performance optimization are available on the [https://launix.de/launix/ Launix blog]. | |||
---- | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
Β | |||
== Community == | |||
MemCP is an open-source project maintained by developers for developers.Β | |||
Contributions are welcome β whether in the form of bug reports, feature requests, or pull requests.Β | |||
See: [[Contributing]] | |||
Revision as of 13:39, 22 September 2025
MemCP β A Modern In-Memory Columnar Database
MemCP is a high-performance, in-memory, column-oriented database designed for modern workloads. It provides a lightweight, developer-friendly alternative to traditional relational databases such as MySQL, with a focus on speed, compression, and direct API integration.
Key Features
- High Performance: NUMA-aware, parallelized query execution optimized for multicore CPUs, large caches, and NVMe SSDs. Handles both OLTP and OLAP workloads efficiently.
- Columnar Storage: Data is stored by column for improved compression, reduced memory footprint, and faster analytical queries.
- In-Memory Operation: Designed to keep data in memory, with configurable persistence backends for durability.
- Built-in APIs: Exposes RESTful endpoints directly from the database, reducing middleware overhead.
- Compression: Multiple strategies (bit-packing, dictionary encoding, sequence compression) reduce storage by up to 80% compared to MySQL/MariaDB.
- Simple Deployment: Start with a single
docker run
orpm2 start
command. Lightweight footprint (~10MB). - Extensible: Written in Go, with pluggable storage backends and custom frontend support (SQL, RDF, REST).
Why MemCP?
Traditional relational databases were designed decades ago, optimized for spinning disks and single-core CPUs. MemCP rethinks the core design for todayβs hardware and workloads:
- Real-time dashboards and analytics
- Data-heavy SaaS platforms
- Embedded systems with limited resources
- High-throughput OLTP/OLAP hybrids
Quick Start
Clone and build MemCP from source:
git clone https://github.com/launix-de/memcp cd memcp go get make pm2 start ./memcp ./data/
Connect with MySQL tooling:
mysql -u root -p -P 3307 Enter password: admin
MemCP vs. MySQL
Feature | MySQL | MemCP |
---|---|---|
Storage Model | Row-based | Column-based (compressed) |
Performance | Good | NUMA-optimized, in-memory |
In-Memory Capable | Limited | Yes (default) |
REST API Integration | External | Built-in |
Installation Footprint | ~150MB+ | ~10MB |
Open Source | β | β |
Architecture Overview
- Tables, Schemas, Columns: Familiar SQL-style structures with a columnar physical layout.
- Transaction Model: Supports both OLTP and OLAP semantics with delta + main storage.
- Persistence: Configurable storage backends (filesystem, S3, Ceph).
- Frontends: Multiple query interfaces:
- SQL frontend (MySQL wire protocol + SQL over REST) - RDF/graph query engine - Custom APIs via in-database web apps
Documentation
- What is OLTP and OLAP
- History of the MemCP project
- Hardware Requirements
- Persistency and Performance Guarantees
- Comparison: MemCP vs. MySQL
- Install with Docker
- Build from Source
- Contributing
- SQL over REST
- REST & Microservices
Further Reading
Additional blog posts on design decisions, compression techniques, and performance optimization are available on the Launix blog.
Community
MemCP is an open-source project maintained by developers for developers. Contributions are welcome β whether in the form of bug reports, feature requests, or pull requests.
See: Contributing