<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.memcp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Carli</id>
	<title>MemCP - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.memcp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Carli"/>
	<link rel="alternate" type="text/html" href="https://www.memcp.org/wiki/Special:Contributions/Carli"/>
	<updated>2026-05-04T15:46:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=263</id>
		<title>Persistency and Performance Guarantees</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=263"/>
		<updated>2026-03-09T12:20:19Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* Persistency Guarantees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MemCP gives the user several Guarantees for persistency and performance. These are the guarantees:&lt;br /&gt;
&lt;br /&gt;
== Performance Guarantees and Read Speed ==&lt;br /&gt;
MemCP guarantees that:&lt;br /&gt;
&lt;br /&gt;
* All reading operations are from RAM and are fast&lt;br /&gt;
* Insert/Update without any unique key check or foreign key check will scale over shards&lt;br /&gt;
* Aggregate functions like SUM, AVG will scale perfectly with the amount of CPUs&lt;br /&gt;
&lt;br /&gt;
With these guarantees, you can add more CPU cores whenever you have more data to ensure the same query time even with growing data.&lt;br /&gt;
&lt;br /&gt;
Please consider that memory bandwith still might be a bottleneck. Even modern 128 core CPUs do not scale better than 8 cores for uncompressed data (usually 40 GiB/s bandwith on tested machines). &#039;&#039;&#039;MemCPs [[Columnar Storage]] scales beyond that limit.&#039;&#039;&#039;&lt;br /&gt;
== Persistency Guarantees and Write Speed ==&lt;br /&gt;
There are five persistency modes per table which are:&lt;br /&gt;
&lt;br /&gt;
* ENGINE = cache&lt;br /&gt;
* ENGINE = memory&lt;br /&gt;
* ENGINE = sloppy&lt;br /&gt;
* ENGINE = logged&lt;br /&gt;
* ENGINE = safe&lt;br /&gt;
In comparison to other RDBMs, MemCP can do this setting per table. MySQL/MariaDB for instance only allows a global setting which is sometimes not what you want.&lt;br /&gt;
&lt;br /&gt;
In short, these engines guarantee different performance:&lt;br /&gt;
&lt;br /&gt;
* cache+memory -&amp;gt; RAM speed, no persistency&lt;br /&gt;
* sloppy+logged -&amp;gt; HDD speed, persistency guarantees under circumstances&lt;br /&gt;
* safe -&amp;gt; Sync speed (slow) and persistency guarantees even in case of power outage during queries&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = cache ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* in case the server is running out of RAM, the data can be deleted, too&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = memory ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* while the server is running, the data will be kept alive&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = sloppy ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* the delta storage is RAM-only&lt;br /&gt;
* a main storage rebuild is triggered every 15 minutes, so data older than 15 minutes are guaranteed to be persistent&lt;br /&gt;
* in case of a crash, the delta storage is gone, the main storage is recovered&lt;br /&gt;
* after a recovery, some datasets or deletions that happend in the last 15 minutes before the crash may be gone&lt;br /&gt;
* extremely fast way to store data without the fear of losing them in normal operation&lt;br /&gt;
* use it for frequently updated tables with unimportant data like usage statistics or sensor data&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = logged ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation succeeds even if data is not synced to disk permanently yet&lt;br /&gt;
* in case of a crash, data might be recovered&lt;br /&gt;
** in case of a crash of the process, all data will be recovered&lt;br /&gt;
** in case of a power outage or kernel crash, data might be lost&lt;br /&gt;
* allows buffering of the log file in return for the risk of data loss&lt;br /&gt;
* use it for data where you need a high update performance but cannot afford losing the last few seconds of your work&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = safe ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation only succeeds after the data is synced to disk permanently&lt;br /&gt;
* in case of a crash, all data will be recovered&lt;br /&gt;
* introduces delays for each transaction since the system has to wait for a write fence&lt;br /&gt;
* IO bound (limited to ~1,700 write operations per second)&lt;br /&gt;
* use it for accounting data or any data that must not be lost&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=262</id>
		<title>Persistency and Performance Guarantees</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=262"/>
		<updated>2026-03-09T12:16:10Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* Persistency Guarantees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MemCP gives the user several Guarantees for persistency and performance. These are the guarantees:&lt;br /&gt;
&lt;br /&gt;
== Performance Guarantees ==&lt;br /&gt;
MemCP guarantees that:&lt;br /&gt;
&lt;br /&gt;
* Insert/Update without any unique key check or foreign key check will scale over shards&lt;br /&gt;
* Aggregate functions like SUM, AVG will scale perfectly with the amount of CPUs&lt;br /&gt;
&lt;br /&gt;
With these guarantees, you can add more CPU cores whenever you have more data to ensure the same query time even with growing data.&lt;br /&gt;
&lt;br /&gt;
Please consider that memory bandwith still might be a bottleneck. Even modern 128 core CPUs do not scale better than 8 cores for uncompressed data (usually 40 GiB/s bandwith on tested machines). &#039;&#039;&#039;MemCPs [[Columnar Storage]] scales beyond that limit.&#039;&#039;&#039;&lt;br /&gt;
== Persistency Guarantees ==&lt;br /&gt;
There are five persistency modes per table which are:&lt;br /&gt;
&lt;br /&gt;
* ENGINE = cache&lt;br /&gt;
* ENGINE = memory&lt;br /&gt;
* ENGINE = sloppy&lt;br /&gt;
* ENGINE = logged&lt;br /&gt;
* ENGINE = safe&lt;br /&gt;
In comparison to other RDBMs, MemCP can do this setting per table. MySQL/MariaDB for instance only allows a global setting which is sometimes not what you want.&lt;br /&gt;
&lt;br /&gt;
In short, these engines guarantee different performance:&lt;br /&gt;
&lt;br /&gt;
* cache+memory -&amp;gt; RAM speed, no persistency&lt;br /&gt;
* sloppy+logged -&amp;gt; HDD speed, persistency guarantees under circumstances&lt;br /&gt;
* safe -&amp;gt; Sync speed (slow) and persistency guarantees even in case of power outage during queries&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = cache ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* in case the server is running out of RAM, the data can be deleted, too&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = memory ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* while the server is running, the data will be kept alive&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = sloppy ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* the delta storage is RAM-only&lt;br /&gt;
* a main storage rebuild is triggered every 15 minutes, so data older than 15 minutes are guaranteed to be persistent&lt;br /&gt;
* in case of a crash, the delta storage is gone, the main storage is recovered&lt;br /&gt;
* after a recovery, some datasets or deletions that happend in the last 15 minutes before the crash may be gone&lt;br /&gt;
* extremely fast way to store data without the fear of losing them in normal operation&lt;br /&gt;
* use it for frequently updated tables with unimportant data like usage statistics or sensor data&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = logged ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation succeeds even if data is not synced to disk permanently yet&lt;br /&gt;
* in case of a crash, data might be recovered&lt;br /&gt;
** in case of a crash of the process, all data will be recovered&lt;br /&gt;
** in case of a power outage or kernel crash, data might be lost&lt;br /&gt;
* allows buffering of the log file in return for the risk of data loss&lt;br /&gt;
* use it for data where you need a high update performance but cannot afford losing the last few seconds of your work&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = safe ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation only succeeds after the data is synced to disk permanently&lt;br /&gt;
* in case of a crash, all data will be recovered&lt;br /&gt;
* introduces delays for each transaction since the system has to wait for a write fence&lt;br /&gt;
* IO bound (limited to ~1,700 write operations per second)&lt;br /&gt;
* use it for accounting data or any data that must not be lost&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=261</id>
		<title>Persistency and Performance Guarantees</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=261"/>
		<updated>2026-03-09T12:13:49Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* Persistency Guarantees */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MemCP gives the user several Guarantees for persistency and performance. These are the guarantees:&lt;br /&gt;
&lt;br /&gt;
== Performance Guarantees ==&lt;br /&gt;
MemCP guarantees that:&lt;br /&gt;
&lt;br /&gt;
* Insert/Update without any unique key check or foreign key check will scale over shards&lt;br /&gt;
* Aggregate functions like SUM, AVG will scale perfectly with the amount of CPUs&lt;br /&gt;
&lt;br /&gt;
With these guarantees, you can add more CPU cores whenever you have more data to ensure the same query time even with growing data.&lt;br /&gt;
&lt;br /&gt;
Please consider that memory bandwith still might be a bottleneck. Even modern 128 core CPUs do not scale better than 8 cores for uncompressed data (usually 40 GiB/s bandwith on tested machines). &#039;&#039;&#039;MemCPs [[Columnar Storage]] scales beyond that limit.&#039;&#039;&#039;&lt;br /&gt;
== Persistency Guarantees ==&lt;br /&gt;
There are five persistency modes per table which are:&lt;br /&gt;
&lt;br /&gt;
* ENGINE = cache&lt;br /&gt;
* ENGINE = memory&lt;br /&gt;
* ENGINE = sloppy&lt;br /&gt;
* ENGINE = logged&lt;br /&gt;
* ENGINE = safe&lt;br /&gt;
In comparison to other RDBMs, MemCP can do this setting per table. MySQL/MariaDB for instance only allows a global setting which is sometimes not what you want.&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = cache ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* in case the server is running out of RAM, the data can be deleted, too&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = memory ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* while the server is running, the data will be kept alive&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = sloppy ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* the delta storage is RAM-only&lt;br /&gt;
* a main storage rebuild is triggered every 15 minutes, so data older than 15 minutes are guaranteed to be persistent&lt;br /&gt;
* in case of a crash, the delta storage is gone, the main storage is recovered&lt;br /&gt;
* after a recovery, some datasets or deletions that happend in the last 15 minutes before the crash may be gone&lt;br /&gt;
* extremely fast way to store data without the fear of losing them in normal operation&lt;br /&gt;
* use it for frequently updated tables with unimportant data like usage statistics or sensor data&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = logged ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation succeeds even if data is not synced to disk permanently yet&lt;br /&gt;
* in case of a crash, data might be recovered&lt;br /&gt;
** in case of a crash of the process, all data will be recovered&lt;br /&gt;
** in case of a power outage or kernel crash, data might be lost&lt;br /&gt;
* allows buffering of the log file in return for the risk of data loss&lt;br /&gt;
* use it for data where you need a high update performance but cannot afford losing the last few seconds of your work&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = safe ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation only succeeds after the data is synced to disk permanently&lt;br /&gt;
* in case of a crash, all data will be recovered&lt;br /&gt;
* introduces delays for each transaction since the system has to wait for a write fence&lt;br /&gt;
* IO bound (limited to ~1,700 write operations per second)&lt;br /&gt;
* use it for accounting data or any data that must not be lost&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=260</id>
		<title>Persistency and Performance Guarantees</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=260"/>
		<updated>2026-03-09T12:13:31Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MemCP gives the user several Guarantees for persistency and performance. These are the guarantees:&lt;br /&gt;
&lt;br /&gt;
== Performance Guarantees ==&lt;br /&gt;
MemCP guarantees that:&lt;br /&gt;
&lt;br /&gt;
* Insert/Update without any unique key check or foreign key check will scale over shards&lt;br /&gt;
* Aggregate functions like SUM, AVG will scale perfectly with the amount of CPUs&lt;br /&gt;
&lt;br /&gt;
With these guarantees, you can add more CPU cores whenever you have more data to ensure the same query time even with growing data.&lt;br /&gt;
&lt;br /&gt;
Please consider that memory bandwith still might be a bottleneck. Even modern 128 core CPUs do not scale better than 8 cores for uncompressed data (usually 40 GiB/s bandwith on tested machines). &#039;&#039;&#039;MemCPs [[Columnar Storage]] scales beyond that limit.&#039;&#039;&#039;&lt;br /&gt;
== Persistency Guarantees ==&lt;br /&gt;
There are three persistency modes per table which are:&lt;br /&gt;
&lt;br /&gt;
* ENGINE = memory&lt;br /&gt;
* ENGINE = sloppy&lt;br /&gt;
* ENGINE = logged&lt;br /&gt;
* ENGINE = safe&lt;br /&gt;
In comparison to other RDBMs, MemCP can do this setting per table. MySQL/MariaDB for instance only allows a global setting which is sometimes not what you want.&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = cache ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* in case the server is running out of RAM, the data can be deleted, too&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = memory ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* while the server is running, the data will be kept alive&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = sloppy ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* the delta storage is RAM-only&lt;br /&gt;
* a main storage rebuild is triggered every 15 minutes, so data older than 15 minutes are guaranteed to be persistent&lt;br /&gt;
* in case of a crash, the delta storage is gone, the main storage is recovered&lt;br /&gt;
* after a recovery, some datasets or deletions that happend in the last 15 minutes before the crash may be gone&lt;br /&gt;
* extremely fast way to store data without the fear of losing them in normal operation&lt;br /&gt;
* use it for frequently updated tables with unimportant data like usage statistics or sensor data&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = logged ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation succeeds even if data is not synced to disk permanently yet&lt;br /&gt;
* in case of a crash, data might be recovered&lt;br /&gt;
** in case of a crash of the process, all data will be recovered&lt;br /&gt;
** in case of a power outage or kernel crash, data might be lost&lt;br /&gt;
* allows buffering of the log file in return for the risk of data loss&lt;br /&gt;
* use it for data where you need a high update performance but cannot afford losing the last few seconds of your work&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = safe ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation only succeeds after the data is synced to disk permanently&lt;br /&gt;
* in case of a crash, all data will be recovered&lt;br /&gt;
* introduces delays for each transaction since the system has to wait for a write fence&lt;br /&gt;
* IO bound (limited to ~1,700 write operations per second)&lt;br /&gt;
* use it for accounting data or any data that must not be lost&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=259</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=259"/>
		<updated>2026-02-27T02:21:08Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MemCP – A Modern In-Memory Columnar Database =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MemCP is a high-performance, in-memory, column-oriented database designed for modern workloads.&#039;&#039;&#039;  &lt;br /&gt;
It provides a lightweight, developer-friendly alternative to traditional relational databases such as MySQL, with a focus on speed, compression, and direct API integration.&lt;br /&gt;
[[File:Memcp-Load.png|center|frameless|1600x1600px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;High Performance&#039;&#039;&#039;: NUMA-aware, parallelized query execution optimized for multicore CPUs, large caches, and NVMe SSDs. Handles both OLTP and OLAP workloads efficiently.  &lt;br /&gt;
* &#039;&#039;&#039;Columnar Storage&#039;&#039;&#039;: Data is stored by column for improved compression, reduced memory footprint, and faster analytical queries.  &lt;br /&gt;
* &#039;&#039;&#039;In-Memory Operation&#039;&#039;&#039;: Designed to keep data in memory, with configurable persistence backends for durability.  &lt;br /&gt;
* &#039;&#039;&#039;Built-in APIs&#039;&#039;&#039;: Exposes RESTful endpoints directly from the database, reducing middleware overhead.  &lt;br /&gt;
* &#039;&#039;&#039;Compression&#039;&#039;&#039;: Multiple strategies (bit-packing, dictionary encoding, sequence compression) reduce storage by up to 80% compared to MySQL/MariaDB.  &lt;br /&gt;
* &#039;&#039;&#039;Simple Deployment&#039;&#039;&#039;: Start with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt; command. Lightweight footprint (~10MB).  &lt;br /&gt;
* &#039;&#039;&#039;Extensible&#039;&#039;&#039;: Written in Go, with pluggable storage backends and custom frontend support (SQL, RDF, REST).  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Why MemCP? ==&lt;br /&gt;
&lt;br /&gt;
Traditional relational databases were designed decades ago, optimized for spinning disks and single-core CPUs.  &lt;br /&gt;
MemCP rethinks the core design for today’s hardware and workloads:&lt;br /&gt;
&lt;br /&gt;
* Real-time dashboards and analytics  &lt;br /&gt;
* Data-heavy SaaS platforms  &lt;br /&gt;
* Embedded systems with limited resources  &lt;br /&gt;
* High-throughput OLTP/OLAP hybrids  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Start ==&lt;br /&gt;
&lt;br /&gt;
Clone and build MemCP from source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/launix-de/memcp&lt;br /&gt;
cd memcp&lt;br /&gt;
go get&lt;br /&gt;
make&lt;br /&gt;
pm2 start ./memcp ./data/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connect with MySQL tooling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql -u root -p -P 3307&lt;br /&gt;
Enter password: admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== MemCP vs. MySQL ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! MySQL&lt;br /&gt;
! MemCP&lt;br /&gt;
|-&lt;br /&gt;
| Storage Model&lt;br /&gt;
| Row-based&lt;br /&gt;
| Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
| Performance&lt;br /&gt;
| Good&lt;br /&gt;
| NUMA-optimized, in-memory&lt;br /&gt;
|-&lt;br /&gt;
| In-Memory Capable&lt;br /&gt;
| Limited&lt;br /&gt;
| Yes (default)&lt;br /&gt;
|-&lt;br /&gt;
| REST API Integration&lt;br /&gt;
| External&lt;br /&gt;
| Built-in&lt;br /&gt;
|-&lt;br /&gt;
| Installation Footprint&lt;br /&gt;
| ~150MB+&lt;br /&gt;
| ~10MB&lt;br /&gt;
|-&lt;br /&gt;
| Open Source&lt;br /&gt;
| ✅&lt;br /&gt;
| ✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tables, Schemas, Columns&#039;&#039;&#039;: Familiar SQL-style structures with a columnar physical layout.  &lt;br /&gt;
* &#039;&#039;&#039;Transaction Model&#039;&#039;&#039;: Supports both OLTP and OLAP semantics with delta + main storage.  &lt;br /&gt;
* &#039;&#039;&#039;Persistence&#039;&#039;&#039;: Configurable storage backends (filesystem, S3, Ceph).  &lt;br /&gt;
* &#039;&#039;&#039;Frontends&#039;&#039;&#039;: Multiple query interfaces:&lt;br /&gt;
  - SQL frontend (MySQL wire protocol + SQL over REST)  &lt;br /&gt;
  - RDF/graph query engine  &lt;br /&gt;
  - Custom APIs via in-database web apps  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[What is OLTP and OLAP]]  &lt;br /&gt;
* [[History of the MemCP project]]  &lt;br /&gt;
* [[Hardware Requirements]]  &lt;br /&gt;
* [[Persistency and Performance Guarantees]]  &lt;br /&gt;
* [[Comparison: MemCP vs. MySQL]]  &lt;br /&gt;
* [[Install MemCP with Docker|Install with Docker]]  &lt;br /&gt;
* [[Compile MemCP from Source|Build from Source]]  &lt;br /&gt;
* [[Contributing]]  &lt;br /&gt;
* [[SQL over REST]]  &lt;br /&gt;
* [[In-Database WebApps|REST &amp;amp; Microservices]]  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
==== Persistency Backends (= Storage) ====&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
* [[Cluster Monitor]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.org/launix-de/memcp MemCP on GitHub]  &lt;br /&gt;
* [https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]  &lt;br /&gt;
* [https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]  &lt;br /&gt;
* [https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]  &lt;br /&gt;
&lt;br /&gt;
Additional blog posts on design decisions, compression techniques, and performance optimization are available on the [https://launix.de/launix/ Launix blog].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
&lt;br /&gt;
MemCP is an open-source project maintained by developers for developers.  &lt;br /&gt;
Contributions are welcome — whether in the form of bug reports, feature requests, or pull requests.  &lt;br /&gt;
&lt;br /&gt;
See: [[Contributing]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=File:Memcp-Load.png&amp;diff=258</id>
		<title>File:Memcp-Load.png</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=File:Memcp-Load.png&amp;diff=258"/>
		<updated>2026-02-27T02:19:55Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Performance Gauges of the DB&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=256</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=256"/>
		<updated>2026-01-26T06:39:56Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MemCP – A Modern In-Memory Columnar Database =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MemCP is a high-performance, in-memory, column-oriented database designed for modern workloads.&#039;&#039;&#039;  &lt;br /&gt;
It provides a lightweight, developer-friendly alternative to traditional relational databases such as MySQL, with a focus on speed, compression, and direct API integration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;High Performance&#039;&#039;&#039;: NUMA-aware, parallelized query execution optimized for multicore CPUs, large caches, and NVMe SSDs. Handles both OLTP and OLAP workloads efficiently.  &lt;br /&gt;
* &#039;&#039;&#039;Columnar Storage&#039;&#039;&#039;: Data is stored by column for improved compression, reduced memory footprint, and faster analytical queries.  &lt;br /&gt;
* &#039;&#039;&#039;In-Memory Operation&#039;&#039;&#039;: Designed to keep data in memory, with configurable persistence backends for durability.  &lt;br /&gt;
* &#039;&#039;&#039;Built-in APIs&#039;&#039;&#039;: Exposes RESTful endpoints directly from the database, reducing middleware overhead.  &lt;br /&gt;
* &#039;&#039;&#039;Compression&#039;&#039;&#039;: Multiple strategies (bit-packing, dictionary encoding, sequence compression) reduce storage by up to 80% compared to MySQL/MariaDB.  &lt;br /&gt;
* &#039;&#039;&#039;Simple Deployment&#039;&#039;&#039;: Start with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt; command. Lightweight footprint (~10MB).  &lt;br /&gt;
* &#039;&#039;&#039;Extensible&#039;&#039;&#039;: Written in Go, with pluggable storage backends and custom frontend support (SQL, RDF, REST).  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Why MemCP? ==&lt;br /&gt;
&lt;br /&gt;
Traditional relational databases were designed decades ago, optimized for spinning disks and single-core CPUs.  &lt;br /&gt;
MemCP rethinks the core design for today’s hardware and workloads:&lt;br /&gt;
&lt;br /&gt;
* Real-time dashboards and analytics  &lt;br /&gt;
* Data-heavy SaaS platforms  &lt;br /&gt;
* Embedded systems with limited resources  &lt;br /&gt;
* High-throughput OLTP/OLAP hybrids  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Start ==&lt;br /&gt;
&lt;br /&gt;
Clone and build MemCP from source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/launix-de/memcp&lt;br /&gt;
cd memcp&lt;br /&gt;
go get&lt;br /&gt;
make&lt;br /&gt;
pm2 start ./memcp ./data/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connect with MySQL tooling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql -u root -p -P 3307&lt;br /&gt;
Enter password: admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== MemCP vs. MySQL ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! MySQL&lt;br /&gt;
! MemCP&lt;br /&gt;
|-&lt;br /&gt;
| Storage Model&lt;br /&gt;
| Row-based&lt;br /&gt;
| Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
| Performance&lt;br /&gt;
| Good&lt;br /&gt;
| NUMA-optimized, in-memory&lt;br /&gt;
|-&lt;br /&gt;
| In-Memory Capable&lt;br /&gt;
| Limited&lt;br /&gt;
| Yes (default)&lt;br /&gt;
|-&lt;br /&gt;
| REST API Integration&lt;br /&gt;
| External&lt;br /&gt;
| Built-in&lt;br /&gt;
|-&lt;br /&gt;
| Installation Footprint&lt;br /&gt;
| ~150MB+&lt;br /&gt;
| ~10MB&lt;br /&gt;
|-&lt;br /&gt;
| Open Source&lt;br /&gt;
| ✅&lt;br /&gt;
| ✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tables, Schemas, Columns&#039;&#039;&#039;: Familiar SQL-style structures with a columnar physical layout.  &lt;br /&gt;
* &#039;&#039;&#039;Transaction Model&#039;&#039;&#039;: Supports both OLTP and OLAP semantics with delta + main storage.  &lt;br /&gt;
* &#039;&#039;&#039;Persistence&#039;&#039;&#039;: Configurable storage backends (filesystem, S3, Ceph).  &lt;br /&gt;
* &#039;&#039;&#039;Frontends&#039;&#039;&#039;: Multiple query interfaces:&lt;br /&gt;
  - SQL frontend (MySQL wire protocol + SQL over REST)  &lt;br /&gt;
  - RDF/graph query engine  &lt;br /&gt;
  - Custom APIs via in-database web apps  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[What is OLTP and OLAP]]  &lt;br /&gt;
* [[History of the MemCP project]]  &lt;br /&gt;
* [[Hardware Requirements]]  &lt;br /&gt;
* [[Persistency and Performance Guarantees]]  &lt;br /&gt;
* [[Comparison: MemCP vs. MySQL]]  &lt;br /&gt;
* [[Install MemCP with Docker|Install with Docker]]  &lt;br /&gt;
* [[Compile MemCP from Source|Build from Source]]  &lt;br /&gt;
* [[Contributing]]  &lt;br /&gt;
* [[SQL over REST]]  &lt;br /&gt;
* [[In-Database WebApps|REST &amp;amp; Microservices]]  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
==== Persistency Backends (= Storage) ====&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
* [[Cluster Monitor]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.org/launix-de/memcp MemCP on GitHub]  &lt;br /&gt;
* [https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]  &lt;br /&gt;
* [https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]  &lt;br /&gt;
* [https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]  &lt;br /&gt;
&lt;br /&gt;
Additional blog posts on design decisions, compression techniques, and performance optimization are available on the [https://launix.de/launix/ Launix blog].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
&lt;br /&gt;
MemCP is an open-source project maintained by developers for developers.  &lt;br /&gt;
Contributions are welcome — whether in the form of bug reports, feature requests, or pull requests.  &lt;br /&gt;
&lt;br /&gt;
See: [[Contributing]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Data_Auto_Sharding_and_Auto_Indexing&amp;diff=255</id>
		<title>Data Auto Sharding and Auto Indexing</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Data_Auto_Sharding_and_Auto_Indexing&amp;diff=255"/>
		<updated>2026-01-26T06:39:48Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To understand the following explainations, you should read about [[Shards, RecordIDs, Main Storage, Delta Storage]] first. An understanding of [[Scan]] can also help.&lt;br /&gt;
&lt;br /&gt;
== Auto-Indexing ==&lt;br /&gt;
Auto Indexing works the following way:&lt;br /&gt;
&lt;br /&gt;
* Whenever there is a [[scan]] over a table shard that has certain boundaries (e.g. &amp;lt;code&amp;gt;WHERE col1 = value1 AND col2 = value2 ORDER BY col3 ASC&amp;lt;/code&amp;gt;), there exists a &amp;quot;&#039;&#039;&#039;desired index&#039;&#039;&#039;&amp;quot; (e.g. [col1 col2 col3])&lt;br /&gt;
* Every desired index is created shard-locally but marked &amp;quot;inactive&amp;quot;&lt;br /&gt;
* There is a cost model consisting of three components:&lt;br /&gt;
** The cost of scanning without index&lt;br /&gt;
** The cost of building the index&lt;br /&gt;
** The cost of scanning with the index&lt;br /&gt;
* After about two indexed scans, the cost of indexing will be ammortized&lt;br /&gt;
** before the amortization threshold is met, do full scans&lt;br /&gt;
** as soon as the amortization threshold is met, build the index&lt;br /&gt;
&lt;br /&gt;
Indexes are (currently) only built over the main storage. Delta storage items are currently appended to the scan in an unordered way.&lt;br /&gt;
&lt;br /&gt;
An index is a [[Integer Compression|integer-compressed]] list of recordIds, meaning: instead of storing the values in the index itself, the index is a cache-compressed pointerless structure. This list is sorted by the sort criterion. This makes storing indexes so cheap.&lt;br /&gt;
&lt;br /&gt;
A 60,000 item index would compress to 16 bits integer width, so the size of the index would be 120 KB.&lt;br /&gt;
&lt;br /&gt;
== Auto-Sharding ==&lt;br /&gt;
Auto-Sharding is done similar to Auto-Indexing:&lt;br /&gt;
&lt;br /&gt;
* Whenever there is a [[scan]] over a table where a sharding scheme along a column &amp;lt;code&amp;gt;col&amp;lt;/code&amp;gt; would be benefitial, the &amp;quot;partitioning score&amp;quot; for &amp;lt;code&amp;gt;col&amp;lt;/code&amp;gt; is increased.&lt;br /&gt;
* After a while (~15min), there is a reevaluation if the shards of a table should be repartitioned&lt;br /&gt;
* The shard dimensions are chosen proportional to the &amp;quot;partitioning score&amp;quot; from the previous steps&lt;br /&gt;
* The number of shard dimensions can be limited in the [[Settings]]&lt;br /&gt;
* Then, data is reshuffled. This may take a while for bigger tables.&lt;br /&gt;
&lt;br /&gt;
Partitioning has the following positive effects:&lt;br /&gt;
&lt;br /&gt;
* A scan with boundaries matching the partitioning scheme will only touch those partitions with relevant data in it&lt;br /&gt;
* INSERTs with unique keys will be able to scale whenever all unique keys are covered within the partitioning schema&lt;br /&gt;
&lt;br /&gt;
By using insert or scan very often, it will increase the partitioning score on the right dimensions, so auto-sharding in MemCP is self learning.&lt;br /&gt;
&lt;br /&gt;
== Parallel Sharding==&lt;br /&gt;
MemCP automatically creates parallel shards for optimal query performance across multiple CPU cores.&lt;br /&gt;
===Bulk Insert Optimization===&lt;br /&gt;
When inserting large amounts of data, MemCP automatically:&lt;br /&gt;
#&#039;&#039;&#039;Splits bulk inserts into chunks&#039;&#039;&#039; of 60,000 rows (configurable via ShardSize)&lt;br /&gt;
#&#039;&#039;&#039;Creates new shards on-the-fly&#039;&#039;&#039; when the current shard fills up&lt;br /&gt;
#&#039;&#039;&#039;Rebuilds full shards in parallel&#039;&#039;&#039; using background goroutines&lt;br /&gt;
This enables insertion of millions of rows while maintaining parallel query execution.&lt;br /&gt;
===Automatic Repartitioning===&lt;br /&gt;
During &amp;lt;code&amp;gt;rebuild()&amp;lt;/code&amp;gt;, if no partitioning hints exist but data exceeds ShardSize:*MemCP calculates the optimal number of shards based on data size&lt;br /&gt;
*Creates at least &amp;lt;code&amp;gt;2 × NumCPU&amp;lt;/code&amp;gt; shards for good parallelism&lt;br /&gt;
*Uses the first column for round-robin distribution&lt;br /&gt;
===Performance Characteristics===&lt;br /&gt;
With parallel sharding enabled: - Query CPU utilization: 1500-1900% (15-19 cores on a 24-core machine) - Speedup: 3-6x compared to single-threaded execution - Throughput: ~0.04 µs/row for COUNT/SUM operations&lt;br /&gt;
===Configuration===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Setting&lt;br /&gt;
! Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|ShardSize&lt;br /&gt;
|60,000&lt;br /&gt;
| Rows per shard before splitting&lt;br /&gt;
|-&lt;br /&gt;
|PartitionMaxDimensions&lt;br /&gt;
|10&lt;br /&gt;
|Maximum partitioning dimensions &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Supported_SQL&amp;diff=254</id>
		<title>Supported SQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Supported_SQL&amp;diff=254"/>
		<updated>2026-01-26T00:06:51Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* Statements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Statements ==&lt;br /&gt;
The following SQL statements are supported:&lt;br /&gt;
&lt;br /&gt;
* SELECT FROM GROUP BY HAVING ORDER BY LIMIT OFFSET&lt;br /&gt;
* UPDATE SET WHERE&lt;br /&gt;
* DELETE FROM WHERE&lt;br /&gt;
* INSERT INTO VALUES ON DUPLICATE KEY UPDATE / INSERT ... ON CONFLICT (PostgreSQL)&lt;br /&gt;
* INSERT IGNORE&lt;br /&gt;
* CREATE TABLE&lt;br /&gt;
* ALTER TABLE&lt;br /&gt;
* CREATE DATABASE&lt;br /&gt;
* CREATE USER&lt;br /&gt;
* ALTER USER&lt;br /&gt;
* SHOW DATABASES&lt;br /&gt;
* SHOW TABLES&lt;br /&gt;
* SHOW TABLE STATUS&lt;br /&gt;
* SHOW VARIABLES&lt;br /&gt;
* SET NAMES (no function)&lt;br /&gt;
* DROP DATABASE&lt;br /&gt;
* DROP TABLE&lt;br /&gt;
* SET SESSION&lt;br /&gt;
* LOCK TABLES (no function)&lt;br /&gt;
* UNLOCK TABLES (no function)&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
The following functions are supported:&lt;br /&gt;
* CASE WHEN THEN ELSE END&lt;br /&gt;
* DATABASE&lt;br /&gt;
* PASSWORD (hashes a password for user authentication)&lt;br /&gt;
* FLOOR&lt;br /&gt;
* CEIL&lt;br /&gt;
* CEILING&lt;br /&gt;
* ROUND&lt;br /&gt;
* UPPER&lt;br /&gt;
* LOWER&lt;br /&gt;
* CAST AS UNSIGNED&lt;br /&gt;
* CAST AS CHAR CHARACTER SET utf8&lt;br /&gt;
* CONCAT&lt;br /&gt;
* COALESCE&lt;br /&gt;
* UNIX_TIMESTAMP&lt;br /&gt;
* LIKE&lt;br /&gt;
* ILIKE&lt;br /&gt;
&lt;br /&gt;
== Aggregates ==&lt;br /&gt;
The following aggregates are available:&lt;br /&gt;
&lt;br /&gt;
* COUNT&lt;br /&gt;
* SUM&lt;br /&gt;
* AVG&lt;br /&gt;
* MIN&lt;br /&gt;
* MAX&lt;br /&gt;
&lt;br /&gt;
== Modifiers ==&lt;br /&gt;
&lt;br /&gt;
* COLLATE&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Auto_Sharding&amp;diff=253</id>
		<title>Auto Sharding</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Auto_Sharding&amp;diff=253"/>
		<updated>2026-01-26T00:06:40Z</updated>

		<summary type="html">&lt;p&gt;Carli: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Advanced_SQL_Tutorial&amp;diff=252</id>
		<title>Advanced SQL Tutorial</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Advanced_SQL_Tutorial&amp;diff=252"/>
		<updated>2026-01-26T00:01:40Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Atomic Counters through Unique Key Checks ==&lt;br /&gt;
Imagine the following table:&lt;br /&gt;
 CREATE TABLE u(id INT PRIMARY KEY, cnt INT);&lt;br /&gt;
 &lt;br /&gt;
 INSERT INTO u VALUES (1, 2), (2, 4);&lt;br /&gt;
 &lt;br /&gt;
 SELECT * FROM u;&lt;br /&gt;
 &lt;br /&gt;
 +------+------+&lt;br /&gt;
 | id   | cnt  |&lt;br /&gt;
 +------+------+&lt;br /&gt;
 |    1 |    2 |&lt;br /&gt;
 |    2 |    4 |&lt;br /&gt;
 +------+------+&lt;br /&gt;
 &#039;&#039;&#039;3 rows in set (0,001 sec)&#039;&#039;&#039;&lt;br /&gt;
If you want to add to &amp;lt;code&amp;gt;cnt&amp;lt;/code&amp;gt; whenever an event occurs, add a unique key over &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; and do the following:&lt;br /&gt;
 INSERT INTO u VALUES (2, 1) ON DUPLICATE KEY UPDATE cnt = cnt + VALUES(cnt);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 +------+------+&lt;br /&gt;
 | id   | cnt  |&lt;br /&gt;
 +------+------+&lt;br /&gt;
 |    1 |    2 |&lt;br /&gt;
 |    2 |    5 |&lt;br /&gt;
 +------+------+&lt;br /&gt;
 &#039;&#039;&#039;3 rows in set (0,001 sec)&#039;&#039;&#039;&lt;br /&gt;
This kind of behaviour is atomic, so it is safer than splitting it into two query. This behaviour also scales over multicores via [[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
&lt;br /&gt;
== Subselects ==&lt;br /&gt;
MemCP supports subselects in expressions including IN, EXISTS, and scalar subqueries.&lt;br /&gt;
&lt;br /&gt;
=== IN Subselect ===&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE active = 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EXISTS Subselect ===&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT * FROM products WHERE EXISTS (SELECT 1 FROM inventory WHERE product_id = products.id)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scalar Subselect in SELECT ===&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT id, (SELECT COUNT(*) FROM orders WHERE customer_id = customers.id) AS order_count&lt;br /&gt;
 FROM customers&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Scalar Subselect with Aggregation ===&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT (SELECT MAX(price) FROM products WHERE category = &#039;electronics&#039;) AS max_price&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correlated Subselects ===&lt;br /&gt;
Subselects can reference columns from the outer query:&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT id, name,&lt;br /&gt;
        (SELECT SUM(amount) FROM orders WHERE orders.customer_id = customers.id) AS total&lt;br /&gt;
 FROM customers&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Derived Tables ===&lt;br /&gt;
 &amp;lt;code&amp;gt;SELECT t.* FROM (&lt;br /&gt;
     SELECT id, COUNT(*) AS cnt FROM orders GROUP BY id&lt;br /&gt;
 ) AS t&lt;br /&gt;
 WHERE t.cnt &amp;gt; 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
* Scalar subselects must return exactly one row (error if multiple rows)&lt;br /&gt;
* Scalar subselects return NULL if no rows match&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Performance_Measurement&amp;diff=251</id>
		<title>Performance Measurement</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Performance_Measurement&amp;diff=251"/>
		<updated>2026-01-26T00:00:10Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot; == Performance Testing Framework == MemCP includes an auto-calibrating performance test framework for regression detection and benchmarking.  === Running Performance Tests ===  &amp;lt;code&amp;gt;# Run performance tests (uses calibrated baselines)  PERF_TEST=1 make test    # Calibrate for your machine (run ~10 times to reach target)  PERF_TEST=1 PERF_CALIBRATE=1 make test    # Freeze row counts for bisecting regressions  PERF_TEST=1 PERF_NORECALIBRATE=1 make test    # Show query exe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Performance Testing Framework ==&lt;br /&gt;
MemCP includes an auto-calibrating performance test framework for regression detection and benchmarking.&lt;br /&gt;
&lt;br /&gt;
=== Running Performance Tests ===&lt;br /&gt;
 &amp;lt;code&amp;gt;# Run performance tests (uses calibrated baselines)&lt;br /&gt;
 PERF_TEST=1 make test&lt;br /&gt;
 &lt;br /&gt;
 # Calibrate for your machine (run ~10 times to reach target)&lt;br /&gt;
 PERF_TEST=1 PERF_CALIBRATE=1 make test&lt;br /&gt;
 &lt;br /&gt;
 # Freeze row counts for bisecting regressions&lt;br /&gt;
 PERF_TEST=1 PERF_NORECALIBRATE=1 make test&lt;br /&gt;
 &lt;br /&gt;
 # Show query execution plans&lt;br /&gt;
 PERF_TEST=1 PERF_EXPLAIN=1 make test&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== How Auto-Calibration Works ===&lt;br /&gt;
&lt;br /&gt;
# Target query time: &#039;&#039;&#039;10-20 seconds&#039;&#039;&#039;&lt;br /&gt;
# Each calibration run scales row counts by &#039;&#039;&#039;30%&#039;&#039;&#039; up or down&lt;br /&gt;
# Baselines are machine-specific, stored in &amp;lt;code&amp;gt;.perf_baseline.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Tests include 2 warmup runs before the measured run&lt;br /&gt;
&lt;br /&gt;
=== Output Format ===&lt;br /&gt;
 &amp;lt;code&amp;gt;✅ Perf: COUNT (4.3s / 13s, 100,000,000 rows, 0.04µs/row, 25GB heap, 1522%/2400% CPU)&lt;br /&gt;
          │      │     │              │            │           └─ CPU utilization&lt;br /&gt;
          │      │     │              │            └─ Memory usage&lt;br /&gt;
          │      │     │              └─ Time per row&lt;br /&gt;
          │      │     └─ Calibrated row count&lt;br /&gt;
          │      └─ Threshold&lt;br /&gt;
          └─ Actual time&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bisecting Performance Regressions ===&lt;br /&gt;
 &amp;lt;code&amp;gt;# 1. Calibrate on known-good commit&lt;br /&gt;
 git checkout &amp;lt;good-commit&amp;gt;&lt;br /&gt;
 PERF_TEST=1 PERF_CALIBRATE=1 make test  # run 10x&lt;br /&gt;
 &lt;br /&gt;
 # 2. Save baseline&lt;br /&gt;
 cp .perf_baseline.json .perf_baseline_good.json&lt;br /&gt;
 &lt;br /&gt;
 # 3. Run git bisect&lt;br /&gt;
 git bisect start HEAD &amp;lt;good-commit&amp;gt;&lt;br /&gt;
 git bisect run bash -c &#039;PERF_TEST=1 PERF_NORECALIBRATE=1 make test&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Variable&lt;br /&gt;
!Values&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;PERF_TEST&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Enable performance tests&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;PERF_CALIBRATE&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Update baselines&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;PERF_NORECALIBRATE&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Freeze row counts&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;PERF_EXPLAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
|Show query plans&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Auto_Sharding&amp;diff=250</id>
		<title>Auto Sharding</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Auto_Sharding&amp;diff=250"/>
		<updated>2026-01-25T23:58:26Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parallel Sharding ==&lt;br /&gt;
MemCP automatically creates parallel shards for optimal query performance across multiple CPU cores.&lt;br /&gt;
&lt;br /&gt;
=== Bulk Insert Optimization ===&lt;br /&gt;
When inserting large amounts of data, MemCP automatically:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Splits bulk inserts into chunks&#039;&#039;&#039; of 60,000 rows (configurable via ShardSize)&lt;br /&gt;
# &#039;&#039;&#039;Creates new shards on-the-fly&#039;&#039;&#039; when the current shard fills up&lt;br /&gt;
# &#039;&#039;&#039;Rebuilds full shards in parallel&#039;&#039;&#039; using background goroutines&lt;br /&gt;
&lt;br /&gt;
This enables insertion of millions of rows while maintaining parallel query execution.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Repartitioning ===&lt;br /&gt;
During &amp;lt;code&amp;gt;rebuild()&amp;lt;/code&amp;gt;, if no partitioning hints exist but data exceeds ShardSize:&lt;br /&gt;
&lt;br /&gt;
* MemCP calculates the optimal number of shards based on data size&lt;br /&gt;
* Creates at least &amp;lt;code&amp;gt;2 × NumCPU&amp;lt;/code&amp;gt; shards for good parallelism&lt;br /&gt;
* Uses the first column for round-robin distribution&lt;br /&gt;
&lt;br /&gt;
=== Performance Characteristics ===&lt;br /&gt;
With parallel sharding enabled: - Query CPU utilization: 1500-1900% (15-19 cores on a 24-core machine) - Speedup: 3-6x compared to single-threaded execution - Throughput: ~0.04 µs/row for COUNT/SUM operations&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Setting&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|ShardSize&lt;br /&gt;
|60,000&lt;br /&gt;
|Rows per shard before splitting&lt;br /&gt;
|-&lt;br /&gt;
|PartitionMaxDimensions&lt;br /&gt;
|10&lt;br /&gt;
|Maximum partitioning dimensions&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Auto_Sharding&amp;diff=249</id>
		<title>Auto Sharding</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Auto_Sharding&amp;diff=249"/>
		<updated>2026-01-25T23:57:40Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;## Parallel Sharding  MemCP automatically creates parallel shards for optimal query performance across multiple CPU cores.  ### Bulk Insert Optimization  When inserting large amounts of data, MemCP automatically:  1. **Splits bulk inserts into chunks** of 60,000 rows (configurable via ShardSize) 2. **Creates new shards on-the-fly** when the current shard fills up 3. **Rebuilds full shards in parallel** using background goroutines  This enables insertion of millions of ro...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;## Parallel Sharding&lt;br /&gt;
&lt;br /&gt;
MemCP automatically creates parallel shards for optimal query performance across multiple CPU cores.&lt;br /&gt;
&lt;br /&gt;
### Bulk Insert Optimization&lt;br /&gt;
&lt;br /&gt;
When inserting large amounts of data, MemCP automatically:&lt;br /&gt;
&lt;br /&gt;
1. **Splits bulk inserts into chunks** of 60,000 rows (configurable via ShardSize)&lt;br /&gt;
2. **Creates new shards on-the-fly** when the current shard fills up&lt;br /&gt;
3. **Rebuilds full shards in parallel** using background goroutines&lt;br /&gt;
&lt;br /&gt;
This enables insertion of millions of rows while maintaining parallel query execution.&lt;br /&gt;
&lt;br /&gt;
### Automatic Repartitioning&lt;br /&gt;
&lt;br /&gt;
During `rebuild()`, if no partitioning hints exist but data exceeds ShardSize:&lt;br /&gt;
&lt;br /&gt;
- MemCP calculates the optimal number of shards based on data size&lt;br /&gt;
- Creates at least `2 × NumCPU` shards for good parallelism&lt;br /&gt;
- Uses the first column for round-robin distribution&lt;br /&gt;
&lt;br /&gt;
### Performance Characteristics&lt;br /&gt;
&lt;br /&gt;
With parallel sharding enabled:&lt;br /&gt;
- Query CPU utilization: 1500-1900% (15-19 cores on a 24-core machine)&lt;br /&gt;
- Speedup: 3-6x compared to single-threaded execution&lt;br /&gt;
- Throughput: ~0.04 µs/row for COUNT/SUM operations&lt;br /&gt;
&lt;br /&gt;
### Configuration&lt;br /&gt;
&lt;br /&gt;
| Setting | Default | Description |&lt;br /&gt;
|---------|---------|-------------|&lt;br /&gt;
| ShardSize | 60,000 | Rows per shard before splitting |&lt;br /&gt;
| PartitionMaxDimensions | 10 | Maximum partitioning dimensions |&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=248</id>
		<title>Persistency and Performance Guarantees</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Persistency_and_Performance_Guarantees&amp;diff=248"/>
		<updated>2025-10-04T22:37:59Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MemCP gives the user several Guarantees for persistency and performance. These are the guarantees:&lt;br /&gt;
&lt;br /&gt;
== Performance Guarantees ==&lt;br /&gt;
MemCP guarantees that:&lt;br /&gt;
&lt;br /&gt;
* Insert/Update without any unique key check or foreign key check will scale over shards&lt;br /&gt;
* Aggregate functions like SUM, AVG will scale perfectly with the amount of CPUs&lt;br /&gt;
&lt;br /&gt;
With these guarantees, you can add more CPU cores whenever you have more data to ensure the same query time even with growing data.&lt;br /&gt;
&lt;br /&gt;
Please consider that memory bandwith still might be a bottleneck. Even modern 128 core CPUs do not scale better than 8 cores for uncompressed data (usually 40 GiB/s bandwith on tested machines). &#039;&#039;&#039;MemCPs [[Columnar Storage]] scales beyond that limit.&#039;&#039;&#039;&lt;br /&gt;
== Persistency Guarantees ==&lt;br /&gt;
There are three persistency modes per table which are:&lt;br /&gt;
&lt;br /&gt;
* ENGINE = memory&lt;br /&gt;
* ENGINE = sloppy&lt;br /&gt;
* ENGINE = logged&lt;br /&gt;
* ENGINE = safe&lt;br /&gt;
In comparison to other RDBMs, MemCP can do this setting per table. MySQL/MariaDB for instance only allows a global setting which is sometimes not what you want.&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = memory ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory and only in memory&lt;br /&gt;
* in case of a crash, all data is gone&lt;br /&gt;
* the schema is saved on disk&lt;br /&gt;
* after a recovery, the table starts empty&lt;br /&gt;
* fastest way to store data&lt;br /&gt;
* use it for session data, observer handles, caches and other data that can be recreated by the software&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = sloppy ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* the delta storage is RAM-only&lt;br /&gt;
* a main storage rebuild is triggered every 15 minutes, so data older than 15 minutes are guaranteed to be persistent&lt;br /&gt;
* in case of a crash, the delta storage is gone, the main storage is recovered&lt;br /&gt;
* after a recovery, some datasets or deletions that happend in the last 15 minutes before the crash may be gone&lt;br /&gt;
* extremely fast way to store data without the fear of losing them in normal operation&lt;br /&gt;
* use it for frequently updated tables with unimportant data like usage statistics or sensor data&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = logged ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation succeeds even if data is not synced to disk permanently yet&lt;br /&gt;
* in case of a crash, data might be recovered&lt;br /&gt;
** in case of a crash of the process, all data will be recovered&lt;br /&gt;
** in case of a power outage or kernel crash, data might be lost&lt;br /&gt;
* allows buffering of the log file in return for the risk of data loss&lt;br /&gt;
* use it for data where you need a high update performance but cannot afford losing the last few seconds of your work&lt;br /&gt;
&lt;br /&gt;
=== ENGINE = safe ===&lt;br /&gt;
&lt;br /&gt;
* all data is held in memory&lt;br /&gt;
* the main storage is mirrored on disk&lt;br /&gt;
* changes to the delta storage are logged on disk files&lt;br /&gt;
* an operation only succeeds after the data is synced to disk permanently&lt;br /&gt;
* in case of a crash, all data will be recovered&lt;br /&gt;
* introduces delays for each transaction since the system has to wait for a write fence&lt;br /&gt;
* IO bound (limited to ~1,700 write operations per second)&lt;br /&gt;
* use it for accounting data or any data that must not be lost&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Settings&amp;diff=247</id>
		<title>Settings</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Settings&amp;diff=247"/>
		<updated>2025-10-04T22:34:55Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Settings are changed by:&lt;br /&gt;
 (settings &amp;quot;key&amp;quot; &amp;quot;value&amp;quot;)&lt;br /&gt;
And read by:&lt;br /&gt;
 (settings &amp;quot;key&amp;quot;)&lt;br /&gt;
The following settings are available:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;Backtrace&amp;quot;&amp;lt;/code&amp;gt;:  &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; whether to print backtraces from Scheme. Using true decreases the performance by ~10% but gives you better debugging capabilities.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;PartitionMaxDimensions&amp;quot;&amp;lt;/code&amp;gt;: number from 0 to 10 how many partitioning dimensions are allowed at max. 0 means, don&#039;t partition shards for values (use it to workaround bugs), 1 means only one-dimensional partitioning.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;DefaultEngine&amp;quot;&amp;lt;/code&amp;gt;: one of &amp;lt;code&amp;gt;&amp;quot;memory&amp;quot; &amp;quot;sloppy&amp;quot; &amp;quot;logging&amp;quot; &amp;quot;safe&amp;quot;&amp;lt;/code&amp;gt; that defines which [[Persistency and Performance Guarantees|persistency level]] to choose if a CREATE TABLE statement is executed without the &amp;lt;code&amp;gt;ENGINE&amp;lt;/code&amp;gt; parameter&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;ShardSize&amp;quot;&amp;lt;/code&amp;gt;: default 60000, defines the size of a shard. Rule of thumb is that no shard scan should last longer than 100ms. For servers and workstations, a shard size of 60,000 is recommended. On Raspberry Pi, you should tend to 10,000 in order to get good use of parallelism.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=246</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=246"/>
		<updated>2025-09-22T11:52:10Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MemCP – A Modern In-Memory Columnar Database =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MemCP is a high-performance, in-memory, column-oriented database designed for modern workloads.&#039;&#039;&#039;  &lt;br /&gt;
It provides a lightweight, developer-friendly alternative to traditional relational databases such as MySQL, with a focus on speed, compression, and direct API integration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Features ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;High Performance&#039;&#039;&#039;: NUMA-aware, parallelized query execution optimized for multicore CPUs, large caches, and NVMe SSDs. Handles both OLTP and OLAP workloads efficiently.  &lt;br /&gt;
* &#039;&#039;&#039;Columnar Storage&#039;&#039;&#039;: Data is stored by column for improved compression, reduced memory footprint, and faster analytical queries.  &lt;br /&gt;
* &#039;&#039;&#039;In-Memory Operation&#039;&#039;&#039;: Designed to keep data in memory, with configurable persistence backends for durability.  &lt;br /&gt;
* &#039;&#039;&#039;Built-in APIs&#039;&#039;&#039;: Exposes RESTful endpoints directly from the database, reducing middleware overhead.  &lt;br /&gt;
* &#039;&#039;&#039;Compression&#039;&#039;&#039;: Multiple strategies (bit-packing, dictionary encoding, sequence compression) reduce storage by up to 80% compared to MySQL/MariaDB.  &lt;br /&gt;
* &#039;&#039;&#039;Simple Deployment&#039;&#039;&#039;: Start with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt; command. Lightweight footprint (~10MB).  &lt;br /&gt;
* &#039;&#039;&#039;Extensible&#039;&#039;&#039;: Written in Go, with pluggable storage backends and custom frontend support (SQL, RDF, REST).  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Why MemCP? ==&lt;br /&gt;
&lt;br /&gt;
Traditional relational databases were designed decades ago, optimized for spinning disks and single-core CPUs.  &lt;br /&gt;
MemCP rethinks the core design for today’s hardware and workloads:&lt;br /&gt;
&lt;br /&gt;
* Real-time dashboards and analytics  &lt;br /&gt;
* Data-heavy SaaS platforms  &lt;br /&gt;
* Embedded systems with limited resources  &lt;br /&gt;
* High-throughput OLTP/OLAP hybrids  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Start ==&lt;br /&gt;
&lt;br /&gt;
Clone and build MemCP from source:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/launix-de/memcp&lt;br /&gt;
cd memcp&lt;br /&gt;
go get&lt;br /&gt;
make&lt;br /&gt;
pm2 start ./memcp ./data/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connect with MySQL tooling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysql -u root -p -P 3307&lt;br /&gt;
Enter password: admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== MemCP vs. MySQL ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! MySQL&lt;br /&gt;
! MemCP&lt;br /&gt;
|-&lt;br /&gt;
| Storage Model&lt;br /&gt;
| Row-based&lt;br /&gt;
| Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
| Performance&lt;br /&gt;
| Good&lt;br /&gt;
| NUMA-optimized, in-memory&lt;br /&gt;
|-&lt;br /&gt;
| In-Memory Capable&lt;br /&gt;
| Limited&lt;br /&gt;
| Yes (default)&lt;br /&gt;
|-&lt;br /&gt;
| REST API Integration&lt;br /&gt;
| External&lt;br /&gt;
| Built-in&lt;br /&gt;
|-&lt;br /&gt;
| Installation Footprint&lt;br /&gt;
| ~150MB+&lt;br /&gt;
| ~10MB&lt;br /&gt;
|-&lt;br /&gt;
| Open Source&lt;br /&gt;
| ✅&lt;br /&gt;
| ✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tables, Schemas, Columns&#039;&#039;&#039;: Familiar SQL-style structures with a columnar physical layout.  &lt;br /&gt;
* &#039;&#039;&#039;Transaction Model&#039;&#039;&#039;: Supports both OLTP and OLAP semantics with delta + main storage.  &lt;br /&gt;
* &#039;&#039;&#039;Persistence&#039;&#039;&#039;: Configurable storage backends (filesystem, S3, Ceph).  &lt;br /&gt;
* &#039;&#039;&#039;Frontends&#039;&#039;&#039;: Multiple query interfaces:&lt;br /&gt;
  - SQL frontend (MySQL wire protocol + SQL over REST)  &lt;br /&gt;
  - RDF/graph query engine  &lt;br /&gt;
  - Custom APIs via in-database web apps  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[What is OLTP and OLAP]]  &lt;br /&gt;
* [[History of the MemCP project]]  &lt;br /&gt;
* [[Hardware Requirements]]  &lt;br /&gt;
* [[Persistency and Performance Guarantees]]  &lt;br /&gt;
* [[Comparison: MemCP vs. MySQL]]  &lt;br /&gt;
* [[Install MemCP with Docker|Install with Docker]]  &lt;br /&gt;
* [[Compile MemCP from Source|Build from Source]]  &lt;br /&gt;
* [[Contributing]]  &lt;br /&gt;
* [[SQL over REST]]  &lt;br /&gt;
* [[In-Database WebApps|REST &amp;amp; Microservices]]  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
==== Persistency Backends (= Storage) ====&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
* [[Cluster Monitor]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.org/launix-de/memcp MemCP on GitHub]  &lt;br /&gt;
* [https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]  &lt;br /&gt;
* [https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]  &lt;br /&gt;
* [https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]  &lt;br /&gt;
&lt;br /&gt;
Additional blog posts on design decisions, compression techniques, and performance optimization are available on the [https://launix.de/launix/ Launix blog].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
&lt;br /&gt;
MemCP is an open-source project maintained by developers for developers.  &lt;br /&gt;
Contributions are welcome — whether in the form of bug reports, feature requests, or pull requests.  &lt;br /&gt;
&lt;br /&gt;
See: [[Contributing]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=245</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=245"/>
		<updated>2025-09-22T11:39:20Z</updated>

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

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management. Read more under: [[MySQL is too slow]]&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039; ===&lt;br /&gt;
MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039; ===&lt;br /&gt;
MemCP reduces &#039;&#039;&#039;storage reqirements by 80%&#039;&#039;&#039; compared to MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039; ===&lt;br /&gt;
MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works by adding collations, that support natural ordering.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039; ===&lt;br /&gt;
MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Unified Support for OLAP and OLTP&#039;&#039;&#039; ===&lt;br /&gt;
MemCP combines &#039;&#039;&#039;Online Transaction Processing (OLTP)&#039;&#039;&#039; and &#039;&#039;&#039;Online Analytical Processing (OLAP)&#039;&#039;&#039; in the same database. This enables simultaneous handling of transactional and analytical workloads without the need for separate systems or data pipelines. Such flexibility enhances operational efficiency and simplifies database architecture.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Support for Multiple Frontends&#039;&#039;&#039; ===&lt;br /&gt;
MemCP provides support for diverse frontends, including &#039;&#039;&#039;SPARQL&#039;&#039;&#039;, &#039;&#039;&#039;microservices&#039;&#039;&#039;, and &#039;&#039;&#039;REST APIs&#039;&#039;&#039;. This versatility allows developers to use MemCP in various application architectures, ranging from semantic web applications to distributed microservices, ensuring seamless integration into modern development environments.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=MySQL_is_too_slow&amp;diff=243</id>
		<title>MySQL is too slow</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=MySQL_is_too_slow&amp;diff=243"/>
		<updated>2025-09-04T12:40:13Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot; =MemCP — Faster alternative when &amp;quot;MySQL is too slow&amp;quot;= &amp;#039;&amp;#039;&amp;#039;Short description:&amp;#039;&amp;#039;&amp;#039; MemCP is an in-memory, column-oriented database optimized for high throughput OLAP and OLTP workloads. It is designed to deliver much faster aggregation and query performance than traditional row-based engines like MySQL. ==Overview== MemCP is a blazing-fast, in-memory, columnar database with built-in REST APIs and a lightweight SQL frontend. It is intended for modern workloads where MySQL...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=MemCP — Faster alternative when &amp;quot;MySQL is too slow&amp;quot;=&lt;br /&gt;
&#039;&#039;&#039;Short description:&#039;&#039;&#039; MemCP is an in-memory, column-oriented database optimized for high throughput OLAP and OLTP workloads. It is designed to deliver much faster aggregation and query performance than traditional row-based engines like MySQL.&lt;br /&gt;
==Overview==&lt;br /&gt;
MemCP is a blazing-fast, in-memory, columnar database with built-in REST APIs and a lightweight SQL frontend. It is intended for modern workloads where MySQL becomes a bottleneck for aggregation and analytic queries.&lt;br /&gt;
==Key benefits==&lt;br /&gt;
*&#039;&#039;&#039;In-memory, columnar storage&#039;&#039;&#039; — very fast for aggregations and analytics.&lt;br /&gt;
*&#039;&#039;&#039;MySQL-compatible SQL frontend&#039;&#039;&#039; — easy to try alongside existing MySQL deployments.&lt;br /&gt;
*&#039;&#039;&#039;Low memory footprint for base system&#039;&#039;&#039; — minimal system requirements for core system.&lt;br /&gt;
*&#039;&#039;&#039;Open source&#039;&#039;&#039; — source code and history available on GitHub.&lt;br /&gt;
==When to consider MemCP==&lt;br /&gt;
*Your MySQL instance struggles with large aggregations or analytics queries.&lt;br /&gt;
*You want an in-memory option that provides much faster group/aggregation performance.&lt;br /&gt;
*You need a developer-friendly, REST-accessible datastore for microservices.&lt;br /&gt;
==Quickstart / Installation==&lt;br /&gt;
A basic example (high level):&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1) Clone the repository&lt;br /&gt;
git clone https://github.com/launix-de/memcp.git&lt;br /&gt;
&lt;br /&gt;
# 2) Build / run according to README (see GitHub repo for exact commands)&lt;br /&gt;
cd memcp&lt;br /&gt;
# follow build/run instructions from repository README&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Example usage==&lt;br /&gt;
*MemCP runs a small management service and exposes a MySQL-compatible port for clients (see documentation and examples on the project pages).&lt;br /&gt;
*For microservices, MemCP provides example code showing prepared statements and a simple key/value microservice using the built-in SQL frontend.&lt;br /&gt;
==Benchmarks &amp;amp; comparisons==&lt;br /&gt;
MemCP&#039;s documentation and comparison pages describe performance improvements versus MySQL for aggregation workloads (examples and benchmark summaries are available on the project site). Please consult the project&#039;s &amp;quot;Comparison: MemCP vs. MySQL&amp;quot; page and published benchmarks for details.&lt;br /&gt;
==Links / Resources==&lt;br /&gt;
*Official site: https://memcp.org&lt;br /&gt;
*Project &amp;amp; source: https://github.com/launix-de/memcp&lt;br /&gt;
==License==&lt;br /&gt;
MemCP is published under GPL 3 in the GitHub repository&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
*[[Deployment]]&lt;br /&gt;
*[[MemCP_for_Microservices]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=242</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=242"/>
		<updated>2025-09-04T12:38:50Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* 🚀 Meet MemCP – The MySQL Alternative You&amp;#039;ve Been Waiting For */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed. - read more under [[MySQL is too slow]]&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
==== Persistency Backends (= Storage) ====&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
* [[Cluster Monitor]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=241</id>
		<title>Cluster Monitor</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=241"/>
		<updated>2025-08-31T21:57:10Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* How it works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cluster monitor lets you scale out MemCP over multiple nodes. Here is what you can achieve:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Multiple users&#039;&#039;&#039;: each user has his own database&lt;br /&gt;
* &#039;&#039;&#039;One big user&#039;&#039;&#039;: Big tables are spread over multiple nodes&lt;br /&gt;
* A mixture of both variants&lt;br /&gt;
&lt;br /&gt;
Each database and each shard (the piece where a part of a table&#039;s data is stored) can be placed either:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COLD&#039;&#039;&#039;: only in storage backend&lt;br /&gt;
* &#039;&#039;&#039;SHARED&#039;&#039;&#039;: read-only on multiple nodes (e.g. the access table)&lt;br /&gt;
* &#039;&#039;&#039;WRITE&#039;&#039;&#039;: exclusively on one node&lt;br /&gt;
Cluster monitors can coordinate all kinds of storage:&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
&lt;br /&gt;
== How to set up ==&lt;br /&gt;
TODO: describe how to edit (settings) to connect to other nodes and authenticate (add at least a common secret and optionally a list of nodes in the cluster)&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
Each node in the network knows all other nodes.&lt;br /&gt;
&lt;br /&gt;
Also, there is a distributed key map that tracks which resource is claimed by whom: &lt;br /&gt;
&lt;br /&gt;
* COLD items are not tracked in the list at all to save space&lt;br /&gt;
* SHARED and WRITE items are tracked together with their owners&lt;br /&gt;
* when a user claims WRITE, all other owners must confirm that they give up their SHARED status&lt;br /&gt;
* when a user claims SHARED, the WRITE owner must confirm that he gives up his SHARED status&lt;br /&gt;
* after you claimed your access, you can use the storage backend to read/write the data&lt;br /&gt;
* when a node dosen&#039;t own a database, the database is shared&lt;br /&gt;
* when a node dosen&#039;t own a shard, the owner is asked to perform the computation&lt;br /&gt;
* when a shard is owned by noone but the shardlist is very big, other nodes are asked to claim the nodes and perform the computation&lt;br /&gt;
&lt;br /&gt;
== ZooKeeper internals ==&lt;br /&gt;
&lt;br /&gt;
* /memcp/resources/&amp;lt;rid&amp;gt; -&amp;gt; information about the resource&lt;br /&gt;
* /memcp/resources/&amp;lt;rid&amp;gt;/owner -&amp;gt; if a write lock exists&lt;br /&gt;
* /memcp/resources/&amp;lt;rid&amp;gt;/readers/&amp;lt;reader-id&amp;gt; -&amp;gt; which nodes read it&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=240</id>
		<title>Cluster Monitor</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=240"/>
		<updated>2025-08-31T20:27:30Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cluster monitor lets you scale out MemCP over multiple nodes. Here is what you can achieve:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Multiple users&#039;&#039;&#039;: each user has his own database&lt;br /&gt;
* &#039;&#039;&#039;One big user&#039;&#039;&#039;: Big tables are spread over multiple nodes&lt;br /&gt;
* A mixture of both variants&lt;br /&gt;
&lt;br /&gt;
Each database and each shard (the piece where a part of a table&#039;s data is stored) can be placed either:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COLD&#039;&#039;&#039;: only in storage backend&lt;br /&gt;
* &#039;&#039;&#039;SHARED&#039;&#039;&#039;: read-only on multiple nodes (e.g. the access table)&lt;br /&gt;
* &#039;&#039;&#039;WRITE&#039;&#039;&#039;: exclusively on one node&lt;br /&gt;
Cluster monitors can coordinate all kinds of storage:&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
&lt;br /&gt;
== How to set up ==&lt;br /&gt;
TODO: describe how to edit (settings) to connect to other nodes and authenticate (add at least a common secret and optionally a list of nodes in the cluster)&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
Each node in the network knows all other nodes.&lt;br /&gt;
&lt;br /&gt;
Also, there is a distributed key map that tracks which resource is claimed by whom: &lt;br /&gt;
&lt;br /&gt;
* COLD items are not tracked in the list at all to save space&lt;br /&gt;
* SHARED and WRITE items are tracked together with their owners&lt;br /&gt;
* when a user claims WRITE, all other owners must confirm that they give up their SHARED status&lt;br /&gt;
* when a user claims SHARED, the WRITE owner must confirm that he gives up his SHARED status&lt;br /&gt;
* after you claimed your access, you can use the storage backend to read/write the data&lt;br /&gt;
&lt;br /&gt;
== ZooKeeper internals ==&lt;br /&gt;
&lt;br /&gt;
* /memcp/resources/&amp;lt;rid&amp;gt; -&amp;gt; information about the resource&lt;br /&gt;
* /memcp/resources/&amp;lt;rid&amp;gt;/owner -&amp;gt; if a write lock exists&lt;br /&gt;
* /memcp/resources/&amp;lt;rid&amp;gt;/readers/&amp;lt;reader-id&amp;gt; -&amp;gt; which nodes read it&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=File_System&amp;diff=239</id>
		<title>File System</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=File_System&amp;diff=239"/>
		<updated>2025-08-31T18:59:41Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the file system persistency layer, each subfolder of your data folder is a database.&lt;br /&gt;
&lt;br /&gt;
Each folder has the following files:&lt;br /&gt;
&lt;br /&gt;
* schema.json - list of all tables, columns, keys and shards; is updated every time a shard is added or removed or the schema changes&lt;br /&gt;
* schema.json.old - fallback file for crash recovery&lt;br /&gt;
* [uuid]-[columnname] - the content of a column (in case the [[Persistency and Performance Guarantees|ENGINE]] is not MEMORY)&lt;br /&gt;
* [uuid].log - transaction log in case the [[Persistency and Performance Guarantees|ENGINE]] is LOGGED or SAFE&lt;br /&gt;
You can also use a [[Cluster Monitor]] for the File System persistency backend. The only thing you have to assure is that each node of the cluster points with -data to the same shared directory.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=File_System&amp;diff=238</id>
		<title>File System</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=File_System&amp;diff=238"/>
		<updated>2025-08-31T18:58:36Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;In the file system persistency layer, each subfolder of your data folder is a database.  Each folder has the following files:  * schema.json - list of all tables, columns, keys and shards; is updated every time a shard is added or removed or the schema changes * schema.json.old - fallback file for crash recovery * [uuid]-[columnname] - the content of a column (in case the ENGINE is not MEMORY) * [uuid].log - transaction log in c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the file system persistency layer, each subfolder of your data folder is a database.&lt;br /&gt;
&lt;br /&gt;
Each folder has the following files:&lt;br /&gt;
&lt;br /&gt;
* schema.json - list of all tables, columns, keys and shards; is updated every time a shard is added or removed or the schema changes&lt;br /&gt;
* schema.json.old - fallback file for crash recovery&lt;br /&gt;
* [uuid]-[columnname] - the content of a column (in case the [[Persistency and Performance Guarantees|ENGINE]] is not MEMORY)&lt;br /&gt;
* [uuid].log - transaction log in case the [[Persistency and Performance Guarantees|ENGINE]] is LOGGED or SAFE&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=237</id>
		<title>Cluster Monitor</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=237"/>
		<updated>2025-08-31T18:55:39Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cluster monitor lets you scale out MemCP over multiple nodes. Here is what you can achieve:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Multiple users&#039;&#039;&#039;: each user has his own database&lt;br /&gt;
* &#039;&#039;&#039;One big user&#039;&#039;&#039;: Big tables are spread over multiple nodes&lt;br /&gt;
* A mixture of both variants&lt;br /&gt;
&lt;br /&gt;
Each database and each shard (the piece where a part of a table&#039;s data is stored) can be placed either:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COLD&#039;&#039;&#039;: only in storage backend&lt;br /&gt;
* &#039;&#039;&#039;SHARED&#039;&#039;&#039;: read-only on multiple nodes (e.g. the access table)&lt;br /&gt;
* &#039;&#039;&#039;WRITE&#039;&#039;&#039;: exclusively on one node&lt;br /&gt;
Cluster monitors can coordinate all kinds of storage:&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
&lt;br /&gt;
== How to set up ==&lt;br /&gt;
TODO: describe how to edit (settings) to connect to other nodes and authenticate (add at least a common secret and optionally a list of nodes in the cluster)&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
Each node in the network knows all other nodes.&lt;br /&gt;
&lt;br /&gt;
Also, there is a distributed key map that tracks which resource is claimed by whom: &lt;br /&gt;
&lt;br /&gt;
* COLD items are not tracked in the list at all to save space&lt;br /&gt;
* SHARED and WRITE items are tracked together with their owners&lt;br /&gt;
* when a user claims WRITE, all other owners must confirm that they give up their SHARED status&lt;br /&gt;
* when a user claims SHARED, the WRITE owner must confirm that he gives up his SHARED status&lt;br /&gt;
* after you claimed your access, you can use the storage backend to read/write the data&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=236</id>
		<title>Cluster Monitor</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=236"/>
		<updated>2025-08-31T18:51:09Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cluster monitor lets you scale out MemCP over multiple nodes. Here is what you can achieve:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Multiple users&#039;&#039;&#039;: each user has his own database&lt;br /&gt;
* &#039;&#039;&#039;One big user&#039;&#039;&#039;: Big tables are spread over multiple nodes&lt;br /&gt;
* A mixture of both variants&lt;br /&gt;
&lt;br /&gt;
Each database and each shard (the piece where a part of a table&#039;s data is stored) can be placed either:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COLD&#039;&#039;&#039;: only in storage backend&lt;br /&gt;
* &#039;&#039;&#039;SHARED&#039;&#039;&#039;: read-only on multiple nodes (e.g. the access table)&lt;br /&gt;
* &#039;&#039;&#039;WRITE&#039;&#039;&#039;: exclusively on one node&lt;br /&gt;
Cluster monitors can coordinate all kinds of storage:&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=235</id>
		<title>Cluster Monitor</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Cluster_Monitor&amp;diff=235"/>
		<updated>2025-08-31T18:50:01Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;The cluster monitor lets you scale out MemCP over multiple nodes. Here is what you can achieve:  * &amp;#039;&amp;#039;&amp;#039;Multiple users&amp;#039;&amp;#039;&amp;#039;: each user has his own database * &amp;#039;&amp;#039;&amp;#039;One big user&amp;#039;&amp;#039;&amp;#039;: Big tables are spread over multiple nodes * A mixture of both variants  Each database and each shard (the piece where a part of a table&amp;#039;s data is stored) can be placed either:  * &amp;#039;&amp;#039;&amp;#039;COLD&amp;#039;&amp;#039;&amp;#039;: only in storage backend * &amp;#039;&amp;#039;&amp;#039;SHARED&amp;#039;&amp;#039;&amp;#039;: read-only on multiple nodes (e.g. the access table) * &amp;#039;&amp;#039;&amp;#039;WRITE&amp;#039;&amp;#039;&amp;#039;: exc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The cluster monitor lets you scale out MemCP over multiple nodes. Here is what you can achieve:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Multiple users&#039;&#039;&#039;: each user has his own database&lt;br /&gt;
* &#039;&#039;&#039;One big user&#039;&#039;&#039;: Big tables are spread over multiple nodes&lt;br /&gt;
* A mixture of both variants&lt;br /&gt;
&lt;br /&gt;
Each database and each shard (the piece where a part of a table&#039;s data is stored) can be placed either:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;COLD&#039;&#039;&#039;: only in storage backend&lt;br /&gt;
* &#039;&#039;&#039;SHARED&#039;&#039;&#039;: read-only on multiple nodes (e.g. the access table)&lt;br /&gt;
* &#039;&#039;&#039;WRITE&#039;&#039;&#039;: exclusively on one node&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=234</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=234"/>
		<updated>2025-08-31T18:37:49Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* Persistency Backends (= Storage) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
==== Persistency Backends (= Storage) ====&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
* [[Cluster Monitor]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=233</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=233"/>
		<updated>2025-08-31T18:37:16Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
==== Persistency Backends (= Storage) ====&lt;br /&gt;
&lt;br /&gt;
* [[File System]]&lt;br /&gt;
* [[S3 Buckets]]&lt;br /&gt;
* [[Ceph/Rados]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Storage&amp;diff=232</id>
		<title>Storage</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Storage&amp;diff=232"/>
		<updated>2025-08-25T18:10:16Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;= Storage =  The &amp;#039;&amp;#039;&amp;#039;Storage&amp;#039;&amp;#039;&amp;#039; module provides functions to manage databases, tables, columns, keys, partitions, and large data operations in SCM.  ← Back to Full SCM API documentation  == scan ==  Performs an unordered parallel filter-map-reduce on a table  &amp;#039;&amp;#039;&amp;#039;Allowed number of parameters:&amp;#039;&amp;#039;&amp;#039; 6–10  &amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039; * &amp;#039;&amp;#039;&amp;#039;schema&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;string|nil&amp;lt;/code&amp;gt;): database name * &amp;#039;&amp;#039;&amp;#039;table&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;string|list&amp;lt;/code&amp;gt;): table name(s) * &amp;#039;&amp;#039;&amp;#039;filterColumns&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;list&amp;lt;/c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Storage =&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Storage&#039;&#039;&#039; module provides functions to manage databases, tables, columns, keys, partitions, and large data operations in SCM.&lt;br /&gt;
&lt;br /&gt;
← Back to [[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
== scan ==&lt;br /&gt;
&lt;br /&gt;
Performs an unordered parallel filter-map-reduce on a table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 6–10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string|nil&amp;lt;/code&amp;gt;): database name&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string|list&amp;lt;/code&amp;gt;): table name(s)&lt;br /&gt;
* &#039;&#039;&#039;filterColumns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): filter columns&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): lambda deciding dataset inclusion&lt;br /&gt;
* &#039;&#039;&#039;mapColumns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): map columns&lt;br /&gt;
* &#039;&#039;&#039;map&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): lambda extracting/processing data&lt;br /&gt;
* &#039;&#039;&#039;reduce&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): optional aggregator&lt;br /&gt;
* &#039;&#039;&#039;neutral&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): neutral element&lt;br /&gt;
* &#039;&#039;&#039;reduce2&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): optional second reducer&lt;br /&gt;
* &#039;&#039;&#039;isOuter&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): outer join–like behavior&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== scan_order ==&lt;br /&gt;
&lt;br /&gt;
Performs an ordered parallel filter with serial map-reduce&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 10–13&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table name&lt;br /&gt;
* &#039;&#039;&#039;filterColumns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): filter columns&lt;br /&gt;
* &#039;&#039;&#039;filter&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): filter lambda&lt;br /&gt;
* &#039;&#039;&#039;sortcols&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): sorting columns&lt;br /&gt;
* &#039;&#039;&#039;sortdirs&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): sorting directions&lt;br /&gt;
* &#039;&#039;&#039;offset&#039;&#039;&#039; (&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;): skip count&lt;br /&gt;
* &#039;&#039;&#039;limit&#039;&#039;&#039; (&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;): max items&lt;br /&gt;
* &#039;&#039;&#039;mapColumns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): map columns&lt;br /&gt;
* &#039;&#039;&#039;map&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): map lambda&lt;br /&gt;
* &#039;&#039;&#039;reduce&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): optional reducer&lt;br /&gt;
* &#039;&#039;&#039;neutral&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): neutral element&lt;br /&gt;
* &#039;&#039;&#039;isOuter&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): outer behavior&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== createdatabase ==&lt;br /&gt;
&lt;br /&gt;
Creates a new database&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database name&lt;br /&gt;
* &#039;&#039;&#039;ignoreexists&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): ignore if exists&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== dropdatabase ==&lt;br /&gt;
&lt;br /&gt;
Drops a database&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database name&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== createtable ==&lt;br /&gt;
&lt;br /&gt;
Creates a new table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 4–5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table name&lt;br /&gt;
* &#039;&#039;&#039;cols&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): column definitions&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): table options&lt;br /&gt;
* &#039;&#039;&#039;ifnotexists&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): safe creation&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== createcolumn ==&lt;br /&gt;
&lt;br /&gt;
Creates a new column in a table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 6–8&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table name&lt;br /&gt;
* &#039;&#039;&#039;colname&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): column name&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): base type&lt;br /&gt;
* &#039;&#039;&#039;dimensions&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): type dimensions&lt;br /&gt;
* &#039;&#039;&#039;options&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): column options&lt;br /&gt;
* &#039;&#039;&#039;computorCols&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): columns for computed value&lt;br /&gt;
* &#039;&#039;&#039;computor&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): compute lambda&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== createkey ==&lt;br /&gt;
&lt;br /&gt;
Creates a new key&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 5–5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;keyname&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): key name&lt;br /&gt;
* &#039;&#039;&#039;unique&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): uniqueness flag&lt;br /&gt;
* &#039;&#039;&#039;columns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): key columns&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== createforeignkey ==&lt;br /&gt;
&lt;br /&gt;
Creates a new foreign key&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 8–8&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;keyname&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): key name&lt;br /&gt;
* &#039;&#039;&#039;table1&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): first table&lt;br /&gt;
* &#039;&#039;&#039;columns1&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): first columns&lt;br /&gt;
* &#039;&#039;&#039;table2&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): second table&lt;br /&gt;
* &#039;&#039;&#039;columns2&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): second columns&lt;br /&gt;
* &#039;&#039;&#039;updatemode&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): action on update&lt;br /&gt;
* &#039;&#039;&#039;deletemode&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): action on delete&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== shardcolumn ==&lt;br /&gt;
&lt;br /&gt;
Suggests partitions for a column&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 3–4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;colname&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): column&lt;br /&gt;
* &#039;&#039;&#039;numpartitions&#039;&#039;&#039; (&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;): partitions&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== partitiontable ==&lt;br /&gt;
&lt;br /&gt;
Applies or adjusts a partition scheme&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 3–3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;columns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): column pivots&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== altertable ==&lt;br /&gt;
&lt;br /&gt;
Alters a table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 4–4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;operation&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): alteration&lt;br /&gt;
* &#039;&#039;&#039;parameter&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): parameter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== altercolumn ==&lt;br /&gt;
&lt;br /&gt;
Alters a column&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 5–5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;column&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): column&lt;br /&gt;
* &#039;&#039;&#039;operation&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): alteration&lt;br /&gt;
* &#039;&#039;&#039;parameter&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): parameter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== droptable ==&lt;br /&gt;
&lt;br /&gt;
Removes a table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 2–3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;ifexists&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): safe drop&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== insert ==&lt;br /&gt;
&lt;br /&gt;
Inserts a dataset into a table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 4–7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;columns&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): column names&lt;br /&gt;
* &#039;&#039;&#039;datasets&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): row values&lt;br /&gt;
* &#039;&#039;&#039;onCollisionCols&#039;&#039;&#039; (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;): collision columns&lt;br /&gt;
* &#039;&#039;&#039;onCollision&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): collision handler&lt;br /&gt;
* &#039;&#039;&#039;mergeNull&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): handle null as equal&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== stat ==&lt;br /&gt;
&lt;br /&gt;
Returns memory statistics&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 0–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database (optional)&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table (optional)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== show ==&lt;br /&gt;
&lt;br /&gt;
Shows databases, tables, or columns&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 0–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): optional database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): optional table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rebuild ==&lt;br /&gt;
&lt;br /&gt;
Rebuilds storages&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 0–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;all&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): rebuild all&lt;br /&gt;
* &#039;&#039;&#039;repartition&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): repartition&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== loadCSV ==&lt;br /&gt;
&lt;br /&gt;
Loads CSV into a table&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 3–5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;table&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): table&lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; (&amp;lt;code&amp;gt;stream&amp;lt;/code&amp;gt;): CSV stream&lt;br /&gt;
* &#039;&#039;&#039;delimiter&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): delimiter&lt;br /&gt;
* &#039;&#039;&#039;firstline&#039;&#039;&#039; (&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;): use header&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== loadJSON ==&lt;br /&gt;
&lt;br /&gt;
Loads JSONL into a database&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 2–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;schema&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): database&lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; (&amp;lt;code&amp;gt;stream&amp;lt;/code&amp;gt;): JSONL stream&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== settings ==&lt;br /&gt;
&lt;br /&gt;
Reads or writes global settings&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;key&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): setting key&lt;br /&gt;
* &#039;&#039;&#039;value&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): new value&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=IO&amp;diff=231</id>
		<title>IO</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=IO&amp;diff=231"/>
		<updated>2025-08-25T18:09:49Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;= IO =  The &amp;#039;&amp;#039;&amp;#039;IO&amp;#039;&amp;#039;&amp;#039; module provides functions for input and output operations, environment handling, file streaming, server control, and argument parsing in SCM.  ← Back to Full SCM API documentation  == print ==  Prints values to stdout (only in IO environment)  &amp;#039;&amp;#039;&amp;#039;Allowed number of parameters:&amp;#039;&amp;#039;&amp;#039; 1–1000  &amp;#039;&amp;#039;&amp;#039;Parameters:&amp;#039;&amp;#039;&amp;#039; * &amp;#039;&amp;#039;&amp;#039;value...&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): values to print  &amp;#039;&amp;#039;&amp;#039;Returns:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;  == env ==  returns the content of a environment vari...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IO =&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;IO&#039;&#039;&#039; module provides functions for input and output operations, environment handling, file streaming, server control, and argument parsing in SCM.&lt;br /&gt;
&lt;br /&gt;
← Back to [[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
== print ==&lt;br /&gt;
&lt;br /&gt;
Prints values to stdout (only in IO environment)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–1000&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;value...&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): values to print&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== env ==&lt;br /&gt;
&lt;br /&gt;
returns the content of a environment variable&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;var&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): envvar&lt;br /&gt;
* &#039;&#039;&#039;default&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): default if the env is not found&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== help ==&lt;br /&gt;
&lt;br /&gt;
Lists all functions or prints help for a specific function&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 0–1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;topic&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): function to print help about&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== import ==&lt;br /&gt;
&lt;br /&gt;
Imports a .scm file into current namespace&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;filename&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): filename relative to folder of source file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== load ==&lt;br /&gt;
&lt;br /&gt;
Loads a file or stream and returns the string or iterates line-wise&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;filenameOrStream&#039;&#039;&#039; (&amp;lt;code&amp;gt;string|stream&amp;lt;/code&amp;gt;): filename or stream&lt;br /&gt;
* &#039;&#039;&#039;linehandler&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): handler for each line&lt;br /&gt;
* &#039;&#039;&#039;delimiter&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): delimiter for line extraction&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string|bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== stream ==&lt;br /&gt;
&lt;br /&gt;
Opens a file readonly as stream&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;filename&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): filename&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;stream&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== watch ==&lt;br /&gt;
&lt;br /&gt;
Loads a file and calls a callback whenever the file changes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 2–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;filename&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): filename&lt;br /&gt;
* &#039;&#039;&#039;updatehandler&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): handler that receives content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== serve ==&lt;br /&gt;
&lt;br /&gt;
Opens a HTTP server at a given port&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 2–2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;port&#039;&#039;&#039; (&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;): port number&lt;br /&gt;
* &#039;&#039;&#039;handler&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): lambda(req res)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== serveStatic ==&lt;br /&gt;
&lt;br /&gt;
Creates a static handler for use in (serve)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;directory&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): folder with files&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mysql ==&lt;br /&gt;
&lt;br /&gt;
Opens a MySQL server with custom handlers&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 4–4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;port&#039;&#039;&#039; (&amp;lt;code&amp;gt;number&amp;lt;/code&amp;gt;): port&lt;br /&gt;
* &#039;&#039;&#039;getPassword&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): password resolver&lt;br /&gt;
* &#039;&#039;&#039;schemacallback&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): schema access checker&lt;br /&gt;
* &#039;&#039;&#039;handler&#039;&#039;&#039; (&amp;lt;code&amp;gt;func&amp;lt;/code&amp;gt;): SQL handler&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== password ==&lt;br /&gt;
&lt;br /&gt;
Hashes a password with sha1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 1–1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;password&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): plain text password&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== args ==&lt;br /&gt;
&lt;br /&gt;
Returns command line arguments&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 0–0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039; _none_&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== arg ==&lt;br /&gt;
&lt;br /&gt;
Gets a command line argument value&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Allowed number of parameters:&#039;&#039;&#039; 2–3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;longname&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): long argument name&lt;br /&gt;
* &#039;&#039;&#039;shortname&#039;&#039;&#039; (&amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;): short argument or default&lt;br /&gt;
* &#039;&#039;&#039;default&#039;&#039;&#039; (&amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;): fallback value&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Returns:&#039;&#039;&#039; &amp;lt;code&amp;gt;any&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=224</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=224"/>
		<updated>2025-08-25T16:44:40Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
===== SCM Documentation =====&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Full_SCM_API_documentation&amp;diff=216</id>
		<title>Full SCM API documentation</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Full_SCM_API_documentation&amp;diff=216"/>
		<updated>2025-08-25T16:06:48Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;= Documentation =  * SCM Builtins * Arithmetic / Logic * Strings * Streams * Lists * Associative Lists / Dictionaries * Date * Vectors * Parsers * Sync * IO * Storage&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [[SCM Builtins]]&lt;br /&gt;
* [[Arithmetic / Logic]]&lt;br /&gt;
* [[Strings]]&lt;br /&gt;
* [[Streams]]&lt;br /&gt;
* [[Lists]]&lt;br /&gt;
* [[Associative Lists / Dictionaries]]&lt;br /&gt;
* [[Date]]&lt;br /&gt;
* [[Vectors]]&lt;br /&gt;
* [[Parsers]]&lt;br /&gt;
* [[Sync]]&lt;br /&gt;
* [[IO]]&lt;br /&gt;
* [[Storage]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=215</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=215"/>
		<updated>2025-08-25T16:03:07Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* How things work in MemCP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
*[[Full SCM API documentation]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
*[[Full SCM API documentation]] &lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Introduction_to_Scheme&amp;diff=214</id>
		<title>Introduction to Scheme</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Introduction_to_Scheme&amp;diff=214"/>
		<updated>2025-08-25T16:02:59Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* Deeper Topics into Scheme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you run &amp;lt;code&amp;gt;./memcp&amp;lt;/code&amp;gt;, you will be dropped at a scheme shell like this:&lt;br /&gt;
 memcp Copyright (C) 2023, 2024   Carl-Philip Hänsch&lt;br /&gt;
     This program comes with ABSOLUTELY NO WARRANTY;&lt;br /&gt;
     This is free software, and you are welcome to redistribute it&lt;br /&gt;
     under certain conditions;&lt;br /&gt;
 &lt;br /&gt;
 loading storage /tmp/x/system/bdf64a22-6315-463c-bbf7-329317ad50ed-id of type 10&lt;br /&gt;
 loading storage /tmp/x/system/bdf64a22-6315-463c-bbf7-329317ad50ed-username of type 20&lt;br /&gt;
 loading storage /tmp/x/system/bdf64a22-6315-463c-bbf7-329317ad50ed-password of type 20&lt;br /&gt;
 &lt;br /&gt;
 Welcome to memcp&lt;br /&gt;
 &lt;br /&gt;
 performing unit tests ...&lt;br /&gt;
 finished unit tests&lt;br /&gt;
 test result: 15/15&lt;br /&gt;
 all tests succeeded.&lt;br /&gt;
 &lt;br /&gt;
 Initializing SQL frontend&lt;br /&gt;
 MySQL server listening on port 3307 (connect with `mysql -P 3307 -u root -p` using password &#039;admin&#039;)&lt;br /&gt;
 listening on &amp;lt;nowiki&amp;gt;http://localhost:4321&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     Type (help) to show help&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;  &lt;br /&gt;
Scheme is a functional programming language and a subset of LISP. Every expression is either a primitive value or a list.&lt;br /&gt;
&lt;br /&gt;
To understand the semantics of Scheme, take a look at the following Scheme REPL session:&lt;br /&gt;
 &amp;gt; 12&lt;br /&gt;
 = 12&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt; &amp;quot;hi&amp;quot;&lt;br /&gt;
 = &amp;quot;hi&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt; (+ 1 2)&lt;br /&gt;
 = 3&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt; (+ 1 2 3)&lt;br /&gt;
 = 6&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt; (+ 2 (* 2 2))&lt;br /&gt;
 = 6&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt; (+ 2 (* 2 4))&lt;br /&gt;
 = 10&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt; (concat &amp;quot;Hello&amp;quot; &amp;quot;World&amp;quot;)&lt;br /&gt;
 = &amp;quot;HelloWorld&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
=== Function Call ===&lt;br /&gt;
A function call has the following format:&lt;br /&gt;
 (functionname param1 param2 param3 ...)&lt;br /&gt;
Function calls start with &amp;lt;code&amp;gt;(&amp;lt;/code&amp;gt;, contain one function and zero or more parameters separated by space  .&lt;br /&gt;
&lt;br /&gt;
Some basic functions are &amp;lt;code&amp;gt;+ - * / print concat&amp;lt;/code&amp;gt;. For more consult the manual with &amp;lt;code&amp;gt;(help)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Literals ===&lt;br /&gt;
The following literals are allowed:&lt;br /&gt;
&lt;br /&gt;
* Number Literals: &amp;lt;code&amp;gt;1 2 3 56 7.5 4.3e20 -6.123e-3&amp;lt;/code&amp;gt;&lt;br /&gt;
* String Literals: &amp;lt;code&amp;gt;&amp;quot;Hello World&amp;quot; &amp;quot;First Line\nSecond Line&amp;quot; &amp;quot;he said: \&amp;quot;what?\&amp;quot; and smiled&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Function names: &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt;&lt;br /&gt;
* Symbol literals &amp;lt;code&amp;gt;&#039;print&amp;lt;/code&amp;gt;&lt;br /&gt;
* List literals &amp;lt;code&amp;gt;&#039;(1 2 3) &#039;(&amp;quot;a&amp;quot; &amp;quot;b&amp;quot; &amp;quot;c&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Associative Array literals &amp;lt;code&amp;gt;&#039;(&amp;quot;key&amp;quot; &amp;quot;value&amp;quot; &amp;quot;size&amp;quot; 45 &amp;quot;name&amp;quot; &amp;quot;Peter&amp;quot; &amp;quot;sublist&amp;quot; &#039;(1 2 3))&amp;lt;/code&amp;gt; - associative arrays are lists with key value pairs flattened down to a one dimensional list of an even number of items.&lt;br /&gt;
* Lambdas: &amp;lt;code&amp;gt;(lambda (param1 param2 ...) body)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Lambda Functions ===&lt;br /&gt;
Scheme allows for creating lambda functions which enclose their own scope:&lt;br /&gt;
 (define decrease-by-one (lambda (number) (- number 1)))&lt;br /&gt;
The function can now be called from scheme:&lt;br /&gt;
 &amp;gt; (decrease-by-one 5)&lt;br /&gt;
 = 4&lt;br /&gt;
Lambda functions can be passed to other functions as values. They enclose your original scope, so you can use variables from the outside inside your function.&lt;br /&gt;
&lt;br /&gt;
== Deeper Topics into Scheme ==&lt;br /&gt;
You can deep-dive into the following topcis:&lt;br /&gt;
&lt;br /&gt;
* [[Full SCM API documentation]]&lt;br /&gt;
* [[Lists and Objects]]&lt;br /&gt;
* [[Pattern Matching]]&lt;br /&gt;
* [[Parsers]]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Dictionary_Compression&amp;diff=213</id>
		<title>Dictionary Compression</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Dictionary_Compression&amp;diff=213"/>
		<updated>2025-08-22T19:06:13Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;Strings are the nightmare of every database. You never know their exact size and you have to either reference them in a separate storage or reserve enough character space to store them in-table.  Columnar databases can do better. But that&amp;#039;s not guaranteed, you have to put a bit of extra effort into it. Here&amp;#039;s how:  At first, memcp converts strings into dictionaries. If you have a large list consisting of [Male, Male, Male, Female, Male, Female, Male, Male], you only have...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Strings are the nightmare of every database. You never know their exact size and you have to either reference them in a separate storage or reserve enough character space to store them in-table.&lt;br /&gt;
&lt;br /&gt;
Columnar databases can do better. But that&#039;s not guaranteed, you have to put a bit of extra effort into it. Here&#039;s how:&lt;br /&gt;
&lt;br /&gt;
At first, memcp converts strings into dictionaries. If you have a large list consisting of [Male, Male, Male, Female, Male, Female, Male, Male], you only have two distinct values. So the dictionary can hold &amp;quot;Male,Female&amp;quot; and then you can reference them by integers (0,0,0,1,0,1,0,0).&lt;br /&gt;
&lt;br /&gt;
Then, these integers can be [[Integer Compression|Integer Compressed]]. And if that&#039;s not enough, you can also add [[Sequence Compression]].&lt;br /&gt;
&lt;br /&gt;
With dictionary compression, you can achieve compression ratios of 10x and higher.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example from &amp;lt;code&amp;gt;(print (stat schema table))&amp;lt;/code&amp;gt;&lt;br /&gt;
 Shard 6254&lt;br /&gt;
 ---&lt;br /&gt;
 main count: 61440, delta count: 0, deletions: 0&lt;br /&gt;
  mode: &#039;&#039;&#039;string-dict[1 entries; 5 bytes]&#039;&#039;&#039;, size = 7.833KiB&lt;br /&gt;
  cntin: seq[176x int[20]/int[20]], size = 1.477KiB&lt;br /&gt;
  cntout: seq[187x int[6]/int[7]], size = 968B&lt;br /&gt;
  duration: int[15], size = 112.6KiB&lt;br /&gt;
  filters: seq[161x int[1]/int[2]], size = 680B&lt;br /&gt;
  append: seq[176x int[6]/int[7]], size = 928B&lt;br /&gt;
  p: &#039;&#039;&#039;string-dict[3 entries; 43 bytes]&#039;&#039;&#039;, size = 15.36KiB&lt;br /&gt;
  ---&lt;br /&gt;
  ---&lt;br /&gt;
  + insertions 40B&lt;br /&gt;
  + deletions 48B&lt;br /&gt;
  ---&lt;br /&gt;
 = total 140KiB&lt;br /&gt;
As you can see, the dictionary can store massive amounts of data (61k items) in 15.4 KiB for a 3-way dictionary. That&#039;s 2 bits per item!&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Add_custom_SQL_operators_to_MemCP&amp;diff=212</id>
		<title>Add custom SQL operators to MemCP</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Add_custom_SQL_operators_to_MemCP&amp;diff=212"/>
		<updated>2025-06-15T12:59:44Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;Some special applications need user defined custom functions.  You can define them in scheme like:  (sql_builtins &amp;quot;ADD_1&amp;quot; (lambda (x) (+ x 1))) Now you can call the function by:  SELECT ADD_1(4) AS result&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some special applications need user defined custom functions.&lt;br /&gt;
&lt;br /&gt;
You can define them in scheme like:&lt;br /&gt;
 (sql_builtins &amp;quot;ADD_1&amp;quot; (lambda (x) (+ x 1)))&lt;br /&gt;
Now you can call the function by:&lt;br /&gt;
 SELECT ADD_1(4) AS result&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=211</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=211"/>
		<updated>2025-06-15T12:57:39Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* SQL Frontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
*[[Add custom SQL operators to MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=210</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=210"/>
		<updated>2025-05-30T09:43:09Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* 🧑‍💻 Built for Developers, by Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=209</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=209"/>
		<updated>2025-05-30T09:38:17Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* 🧑‍💻 Built for Developers, by Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 go get&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp -data ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=208</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=208"/>
		<updated>2025-05-30T09:38:00Z</updated>

		<summary type="html">&lt;p&gt;Carli: /* 🧑‍💻 Built for Developers, by Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp -data ./data/&lt;br /&gt;
 &lt;br /&gt;
 mysql -u root -p -P 3307&lt;br /&gt;
 Enter password: admin&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Main_Page&amp;diff=207</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Main_Page&amp;diff=207"/>
		<updated>2025-05-29T11:03:17Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 🚀 Meet MemCP – The MySQL Alternative You&#039;ve Been Waiting For ==&lt;br /&gt;
&#039;&#039;&#039;Tired of outdated database engines slowing you down?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
MemCP is a blazing-fast, in-memory, column-oriented database designed for modern workloads. It delivers &#039;&#039;&#039;unmatched speed&#039;&#039;&#039;, &#039;&#039;&#039;massive compression&#039;&#039;&#039;, and &#039;&#039;&#039;built-in REST APIs&#039;&#039;&#039; – all with a developer-friendly open-source stack.&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;Replace MySQL with something better.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Something built for the 2020s – not stuck in 2005.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== ⚡ Why Developers Choose MemCP ===&lt;br /&gt;
✅ &#039;&#039;&#039;Turbocharged Performance&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Designed for multicore CPUs, modern caches, and NVMe SSDs – MemCP handles analytical (OLAP) and transactional (OLTP) workloads at lightning speed.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;80% Smaller Data Footprint&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Columnar storage means smarter compression. Typical use cases shrink data 5× smaller than MySQL – with no effort from your side.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Simple JSON APIs Built-in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Query your data with RESTful endpoints – no middleware, no ORM overhead. Just fast results, directly from the DB.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Familiar SQL-like Structure – Zero Lock-In&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don’t need to re-learn everything. Tables, schemas, and logic follow familiar patterns – just modernized and optimized.&lt;br /&gt;
&lt;br /&gt;
✅ &#039;&#039;&#039;Zero-Config Installation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Spin up MemCP with a single &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pm2 start&amp;lt;/code&amp;gt;. Start building in minutes.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 🧑‍💻 Built for Developers, by Developers ===&lt;br /&gt;
MemCP was made for the people who write real-world code, not just benchmark reports. Whether you&#039;re building a SaaS product, IoT platform, or data-heavy analytics dashboard, MemCP gives you the speed and flexibility you need to scale.&lt;br /&gt;
&lt;br /&gt;
 # Ready to try it?&lt;br /&gt;
 git clone &amp;lt;nowiki&amp;gt;https://github.com/launix-de/memcp&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd memcp&lt;br /&gt;
 make&lt;br /&gt;
 pm2 start ./memcp -data ./data/&lt;br /&gt;
&lt;br /&gt;
=== 🆚 MemCP vs MySQL: The Key Differences ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!MySQL&lt;br /&gt;
!MemCP&lt;br /&gt;
|-&lt;br /&gt;
|Storage Model&lt;br /&gt;
|Row-based&lt;br /&gt;
|Column-based (compressed)&lt;br /&gt;
|-&lt;br /&gt;
|Performance&lt;br /&gt;
|Good&lt;br /&gt;
|Excellent (NUMA-optimized)&lt;br /&gt;
|-&lt;br /&gt;
|In-Memory Capable&lt;br /&gt;
|Limited&lt;br /&gt;
|Yes, by default&lt;br /&gt;
|-&lt;br /&gt;
|REST API Integration&lt;br /&gt;
|External services&lt;br /&gt;
|Built-in&lt;br /&gt;
|-&lt;br /&gt;
|Installation Footprint&lt;br /&gt;
|~150MB+&lt;br /&gt;
|~10MB&lt;br /&gt;
|-&lt;br /&gt;
|Open Source&lt;br /&gt;
|✅&lt;br /&gt;
|✅&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 💡 Ideal Use Cases ===&lt;br /&gt;
&lt;br /&gt;
* High-speed dashboards &amp;amp; real-time analytics&lt;br /&gt;
* Embedded systems with minimal resources&lt;br /&gt;
* Data-heavy SaaS backends&lt;br /&gt;
* Replacing outdated MySQL deployments with modern performance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 🧪 Try MemCP Today ===&lt;br /&gt;
Explore the documentation, check out the GitHub repo, and join a growing community of developers building fast, efficient, modern systems with MemCP.&amp;lt;blockquote&amp;gt;Ditch the legacy. Embrace performance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make the switch to MemCP.&#039;&#039;&#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is memcp? ===&lt;br /&gt;
[[File:Webapps.svg|left|frameless]]&lt;br /&gt;
memcp is an open-source, high-performance, columnar in-memory database that can handle both OLAP and OLTP workloads. It provides an alternative to proprietary analytical databases and aims to bring the benefits of columnar storage to the open-source world.&lt;br /&gt;
&lt;br /&gt;
memcp is written in Golang and is designed to be portable and extensible, allowing developers to embed the database into their applications with ease. It is also designed with a focus on scalability and performance, making it a suitable choice for distributed applications.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;fast:&#039;&#039;&#039; MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.&lt;br /&gt;
*&#039;&#039;&#039;efficient:&#039;&#039;&#039; The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB&lt;br /&gt;
*&#039;&#039;&#039;modern:&#039;&#039;&#039; MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs&lt;br /&gt;
* &#039;&#039;&#039;versatile:&#039;&#039;&#039; Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime&lt;br /&gt;
* Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.&lt;br /&gt;
* In-memory database: Stores all data in memory, which allows for extremely fast query execution.&lt;br /&gt;
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)&lt;br /&gt;
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.&lt;br /&gt;
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding&lt;br /&gt;
* Scalability: Designed to scale on a single node with huge NUMA memory&lt;br /&gt;
*Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time&lt;br /&gt;
[[File:MemCP Port.png|frameless]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube&amp;gt;g29FR4Jwius&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=g29FR4Jwius&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
====Introduction==== &lt;br /&gt;
*[[What is OLTP and OLAP]]&lt;br /&gt;
*[[History of the MemCP project]]&lt;br /&gt;
*[[Hardware Requirements]]&lt;br /&gt;
*[[Persistency and Performance Guarantees]] &lt;br /&gt;
*[[Current Status and Open Issues]]&lt;br /&gt;
*[[Comparison: MemCP vs. MySQL]]&lt;br /&gt;
&lt;br /&gt;
====Getting Started====&lt;br /&gt;
*[[Install MemCP with Docker|With Docker]]&lt;br /&gt;
*[[With Singularity]]&lt;br /&gt;
*[[Compile MemCP from Source|Build from Source]]&lt;br /&gt;
*[[Contributing]] &lt;br /&gt;
*[[Introduction to Scheme]]&lt;br /&gt;
&lt;br /&gt;
====Administration====&lt;br /&gt;
&lt;br /&gt;
* [[Deployment]]&lt;br /&gt;
* [[Migration from MySQL and PostgreSQL]]&lt;br /&gt;
* [[Settings]]&lt;br /&gt;
*[[Process Hibernation]]&lt;br /&gt;
*[[Performance Measurement]]&lt;br /&gt;
*[[MemCP Console]]&lt;br /&gt;
&lt;br /&gt;
====Frontends====&lt;br /&gt;
&lt;br /&gt;
=====SQL Frontend===== &lt;br /&gt;
*[[Supported SQL]]&lt;br /&gt;
*[[Advanced SQL Tutorial]]&lt;br /&gt;
*[[SQL over REST]]&lt;br /&gt;
*[[Database Tools compatibility with MemCP|Supported Tooling]]&lt;br /&gt;
*[[How SQL Operators are implemented on MemCP]]&lt;br /&gt;
&lt;br /&gt;
=====RDF Frontend===== &lt;br /&gt;
*[[Introduction to RDF]]&lt;br /&gt;
*[[Advanced Graph Querying]]&lt;br /&gt;
*[[RDF templating and model driven development]]&lt;br /&gt;
&lt;br /&gt;
=====Custom Frontends=====&lt;br /&gt;
&lt;br /&gt;
*[[In-Database WebApps|In-Database WebApps and REST Services]]&lt;br /&gt;
*[[MemCP for Microservices]]&lt;br /&gt;
*[[Websockets in MemCP]]&lt;br /&gt;
&lt;br /&gt;
====Internals====&lt;br /&gt;
&lt;br /&gt;
=====How things work in MemCP===== &lt;br /&gt;
&lt;br /&gt;
*[[Databases, Tables and Columns]]&lt;br /&gt;
*[[Shards, RecordIDs, Main Storage, Delta Storage]]&lt;br /&gt;
*[[Columnar Storage]]&lt;br /&gt;
*[[Transactions]] &lt;br /&gt;
&lt;br /&gt;
=====Optimizations=====&lt;br /&gt;
*[[In-Memory Compression, Columnar Compression Techniques]]&lt;br /&gt;
*[[Temporary Columns]]&lt;br /&gt;
*[[Data Auto Sharding and Auto Indexing]]&lt;br /&gt;
* [[Parallel Computing]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from htop.png|center|frameless|2490x2490px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Further Reading===&lt;br /&gt;
[https://github.org/launix-de/memcp MemCP on Github]&lt;br /&gt;
&lt;br /&gt;
====Scientific====&lt;br /&gt;
&lt;br /&gt;
*[https://www.vldb.org/pvldb/vol13/p2649-boncz.pdf VLDB Research Paper]&lt;br /&gt;
*[https://cs.emis.de/LNI/Proceedings/Proceedings241/383.pdf LNI Proceedings Paper]&lt;br /&gt;
*[https://wwwdb.inf.tu-dresden.de/wp-content/uploads/T_2014_Master_Patrick_Damme.pdf TU Dresden Research Paper]&lt;br /&gt;
*[https://www.dcs.bbk.ac.uk/~dell/teaching/cc/paper/sigmod10/p135-malewicz.pdf Large Graph Algorithms]&lt;br /&gt;
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/ &lt;br /&gt;
&lt;br /&gt;
====How MemCP was built====&lt;br /&gt;
&lt;br /&gt;
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]&lt;br /&gt;
*[https://launix.de/launix/designing-a-programming-language-for-distributed-systems-and-highly-parallel-algorithms/ Designing Programming Languages for Distributed Systems]&lt;br /&gt;
*[https://launix.de/launix/on-designing-an-interface-for-columnar-in-memory-storage-in-golang/ Columnar Storage Interface in Golang]&lt;br /&gt;
*[https://launix.de/launix/how-in-memory-compression-affects-performance/ Impact of In-Memory Compression on Performance]&lt;br /&gt;
*[https://launix.de/launix/memory-efficient-indices-for-in-memory-storages/ Memory-Efficient Indices for In-Memory Storages]&lt;br /&gt;
*[https://launix.de/launix/on-compressing-null-values-in-bit-compressed-integer-storages/ Compressing Null Values in Bit-Compressed Integer Storages]&lt;br /&gt;
*[https://launix.de/launix/when-the-benchmark-is-too-slow-golang-http-server-performance/ Improving Golang HTTP Server Performance]&lt;br /&gt;
*[https://launix.de/launix/how-to-benchmark-a-sql-database/ Benchmarking SQL Databases]&lt;br /&gt;
*[https://launix.de/launix/writing-a-sql-parser-in-scheme/ Writing a SQL Parser in Scheme]&lt;br /&gt;
*[https://launix.de/launix/accessing-memcp-via-scheme/ Accessing memcp via Scheme]&lt;br /&gt;
*[https://launix.de/launix/memcp-first-sql-query-is-correctly-executed/ First SQL Query in memcp]&lt;br /&gt;
*[https://launix.de/launix/sequence-compression-in-in-memory-database-yields-99-memory-savings-and-a-total-of-13/ Sequence Compression in In-Memory Database]&lt;br /&gt;
*[https://launix.de/launix/storing-a-bit-smaller-than-in-one-bit/ Storing Data Smaller Than One Bit]&lt;br /&gt;
*[https://www.youtube.com/watch?v=DWg4nx4KVLo memcp Announcement Video]&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=206</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=206"/>
		<updated>2024-12-20T19:47:32Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039; ===&lt;br /&gt;
MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039; ===&lt;br /&gt;
MemCP reduces &#039;&#039;&#039;storage reqirements by 80%&#039;&#039;&#039; compared to MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039; ===&lt;br /&gt;
MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works by adding collations, that support natural ordering.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039; ===&lt;br /&gt;
MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Unified Support for OLAP and OLTP&#039;&#039;&#039; ===&lt;br /&gt;
MemCP combines &#039;&#039;&#039;Online Transaction Processing (OLTP)&#039;&#039;&#039; and &#039;&#039;&#039;Online Analytical Processing (OLAP)&#039;&#039;&#039; in the same database. This enables simultaneous handling of transactional and analytical workloads without the need for separate systems or data pipelines. Such flexibility enhances operational efficiency and simplifies database architecture.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Support for Multiple Frontends&#039;&#039;&#039; ===&lt;br /&gt;
MemCP provides support for diverse frontends, including &#039;&#039;&#039;SPARQL&#039;&#039;&#039;, &#039;&#039;&#039;microservices&#039;&#039;&#039;, and &#039;&#039;&#039;REST APIs&#039;&#039;&#039;. This versatility allows developers to use MemCP in various application architectures, ranging from semantic web applications to distributed microservices, ensuring seamless integration into modern development environments.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=205</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=205"/>
		<updated>2024-12-19T20:56:20Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039; ===&lt;br /&gt;
MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039; ===&lt;br /&gt;
MemCP uses only &#039;&#039;&#039;20% of the storage&#039;&#039;&#039; required by MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039; ===&lt;br /&gt;
MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works by adding collations, that support natural ordering.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039; ===&lt;br /&gt;
MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Unified Support for OLAP and OLTP&#039;&#039;&#039; ===&lt;br /&gt;
MemCP combines &#039;&#039;&#039;Online Transaction Processing (OLTP)&#039;&#039;&#039; and &#039;&#039;&#039;Online Analytical Processing (OLAP)&#039;&#039;&#039; in the same database. This enables simultaneous handling of transactional and analytical workloads without the need for separate systems or data pipelines. Such flexibility enhances operational efficiency and simplifies database architecture.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Support for Multiple Frontends&#039;&#039;&#039; ===&lt;br /&gt;
MemCP provides support for diverse frontends, including &#039;&#039;&#039;SPARQL&#039;&#039;&#039;, &#039;&#039;&#039;microservices&#039;&#039;&#039;, and &#039;&#039;&#039;REST APIs&#039;&#039;&#039;. This versatility allows developers to use MemCP in various application architectures, ranging from semantic web applications to distributed microservices, ensuring seamless integration into modern development environments.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=204</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=204"/>
		<updated>2024-12-19T20:54:56Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039;    MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
* &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039;    MemCP uses only &#039;&#039;&#039;20% of the storage&#039;&#039;&#039; required by MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
* &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039;   MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works by adding collations, that support natural ordering.&lt;br /&gt;
* &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039;    MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
* &#039;&#039;&#039;Unified Support for OLAP and OLTP&#039;&#039;&#039;MemCP combines &#039;&#039;&#039;Online Transaction Processing (OLTP)&#039;&#039;&#039; and &#039;&#039;&#039;Online Analytical Processing (OLAP)&#039;&#039;&#039; in the same database. This enables simultaneous handling of transactional and analytical workloads without the need for separate systems or data pipelines. Such flexibility enhances operational efficiency and simplifies database architecture.&lt;br /&gt;
* &#039;&#039;&#039;Support for Multiple Frontends&#039;&#039;&#039;MemCP provides support for diverse frontends, including &#039;&#039;&#039;SPARQL&#039;&#039;&#039;, &#039;&#039;&#039;microservices&#039;&#039;&#039;, and &#039;&#039;&#039;REST APIs&#039;&#039;&#039;. This versatility allows developers to use MemCP in various application architectures, ranging from semantic web applications to distributed microservices, ensuring seamless integration into modern development environments.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=203</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=203"/>
		<updated>2024-12-19T20:54:27Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039;   MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
# &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039;   MemCP uses only &#039;&#039;&#039;20% of the storage&#039;&#039;&#039; required by MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
# &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039;   MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works by adding collations, that support natural ordering.&lt;br /&gt;
# &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039;   MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
# &#039;&#039;&#039;Unified Support for OLAP and OLTP&#039;&#039;&#039;MemCP combines &#039;&#039;&#039;Online Transaction Processing (OLTP)&#039;&#039;&#039; and &#039;&#039;&#039;Online Analytical Processing (OLAP)&#039;&#039;&#039; in the same database. This enables simultaneous handling of transactional and analytical workloads without the need for separate systems or data pipelines. Such flexibility enhances operational efficiency and simplifies database architecture.&lt;br /&gt;
# &#039;&#039;&#039;Support for Multiple Frontends&#039;&#039;&#039;MemCP provides support for diverse frontends, including &#039;&#039;&#039;SPARQL&#039;&#039;&#039;, &#039;&#039;&#039;microservices&#039;&#039;&#039;, and &#039;&#039;&#039;REST APIs&#039;&#039;&#039;. This versatility allows developers to use MemCP in various application architectures, ranging from semantic web applications to distributed microservices, ensuring seamless integration into modern development environments.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=202</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=202"/>
		<updated>2024-12-19T20:47:20Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039;  MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
# &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039;  MemCP uses only &#039;&#039;&#039;20% of the storage&#039;&#039;&#039; required by MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
# &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039;  MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works by adding collations, that support natural ordering.&lt;br /&gt;
# &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039;  MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=201</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=201"/>
		<updated>2024-12-19T20:46:04Z</updated>

		<summary type="html">&lt;p&gt;Carli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;MemCP&#039;&#039;&#039; offers several distinct advantages compared to MySQL, making it a compelling choice for optimized database management.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;No 64-Character Limit for Column Names&#039;&#039;&#039;  MemCP removes the restrictive 64-character limit on column names found in MySQL, allowing for more descriptive and meaningful column naming conventions.&lt;br /&gt;
# &#039;&#039;&#039;Significantly Reduced Storage Requirements&#039;&#039;&#039;  MemCP uses only &#039;&#039;&#039;20% of the storage&#039;&#039;&#039; required by MySQL&#039;s InnoDB and MyISAM storage formats. This reduction in storage demand translates to lower infrastructure costs and better scalability for large datasets.&lt;br /&gt;
# &#039;&#039;&#039;Built-In Support for Natural Sorting&#039;&#039;&#039;  MemCP supports &#039;&#039;&#039;natural sort order&#039;&#039;&#039;, which arranges data logically as humans expect, such as &amp;lt;code&amp;gt;1, 2, 10, 11&amp;lt;/code&amp;gt;, rather than lexicographically (&amp;lt;code&amp;gt;1, 10, 11, 2&amp;lt;/code&amp;gt;). This feature works seamlessly with collations, enhancing both user experience and data presentation.&lt;br /&gt;
# &#039;&#039;&#039;Dramatic Performance Improvements&#039;&#039;&#039;  MemCP delivers up to &#039;&#039;&#039;10x faster query performance&#039;&#039;&#039; for aggregation operations compared to MySQL. This makes it ideal for data-intensive applications, business intelligence workloads, and real-time analytics.&lt;br /&gt;
&lt;br /&gt;
By addressing common MySQL limitations and offering superior performance, MemCP positions itself as an efficient, scalable, and user-friendly alternative for modern database management needs.&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
	<entry>
		<id>https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=200</id>
		<title>Comparison: MemCP vs. MySQL</title>
		<link rel="alternate" type="text/html" href="https://www.memcp.org/index.php?title=Comparison:_MemCP_vs._MySQL&amp;diff=200"/>
		<updated>2024-12-19T20:45:02Z</updated>

		<summary type="html">&lt;p&gt;Carli: Created page with &amp;quot;MemCP has the following advantages over MySQL:  * No 64 character limit for column names * uses only 20% of storage compared to InnoDB and MyISAM storage format * supports natural sort (1, 2, 10, 11 instead of 1, 10, 11, 2) with collations * Up to 10x faster query performance for aggregations&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MemCP has the following advantages over MySQL:&lt;br /&gt;
&lt;br /&gt;
* No 64 character limit for column names&lt;br /&gt;
* uses only 20% of storage compared to InnoDB and MyISAM storage format&lt;br /&gt;
* supports natural sort (1, 2, 10, 11 instead of 1, 10, 11, 2) with collations&lt;br /&gt;
* Up to 10x faster query performance for aggregations&lt;/div&gt;</summary>
		<author><name>Carli</name></author>
	</entry>
</feed>