Main Page: Difference between revisions

From MemCP
Jump to navigation Jump to search
No edit summary
Line 1: Line 1:
   
 
=== What is memcp? ===
 
=== What is memcp? ===
[[File:https://www.memcp.org/images/0/03/Webapps_with_MemCP.svg|left|frameless]]
+
[[https://www.memcp.org/images/0/03/Webapps_with_MemCP.svg|left|frameless]]
 
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.
 
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.
   
Line 15: Line 15:
 
*Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.
 
*Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.
 
*In-memory database: Stores all data in memory, which allows for extremely fast query execution.
 
*In-memory database: Stores all data in memory, which allows for extremely fast query execution.
* Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)
+
*Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)
* OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.
+
*OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.
 
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding
 
*Compression: Lots of compression formats are supported like bit-packing and dictionary encoding
 
*Scalability: Designed to scale on a single node with huge NUMA memory
 
*Scalability: Designed to scale on a single node with huge NUMA memory
Line 28: Line 28:
 
====Introduction====
 
====Introduction====
 
*[[What is OLTP and OLAP]]
 
*[[What is OLTP and OLAP]]
* [[History of the MemCP project]]
+
*[[History of the MemCP project]]
* [[Hardware Requirements]]
+
*[[Hardware Requirements]]
 
*[[Persistency and Performance Guarantees]]
 
*[[Persistency and Performance Guarantees]]
 
*[[Current Status and Open Issues]]
 
*[[Current Status and Open Issues]]
Line 57: Line 57:
 
=====Custom Frontends=====
 
=====Custom Frontends=====
   
* [[In-Database WebApps|In-Database WebApps and REST Services]]
+
*[[In-Database WebApps|In-Database WebApps and REST Services]]
 
*[[Websockets in MemCP]]
 
*[[Websockets in MemCP]]
   
====Administration ====
+
====Administration====
   
 
*[[Settings]]
 
*[[Settings]]
Line 68: Line 68:
 
====Internals====
 
====Internals====
   
===== How things work in MemCP=====
+
=====How things work in MemCP=====
   
 
*[[Databases, Tables and Columns]]
 
*[[Databases, Tables and Columns]]
 
*[[Shards, RecordIDs, Main Storage, Delta Storage]]
 
*[[Shards, RecordIDs, Main Storage, Delta Storage]]
 
*[[Columnar Storage]]
 
*[[Columnar Storage]]
* [[Transactions]]
+
*[[Transactions]]
   
 
=====Optimizations=====
 
=====Optimizations=====
* [[In-Memory Compression, Columnar Compression Techniques]]
+
*[[In-Memory Compression, Columnar Compression Techniques]]
 
*[[Temporary Columns]]
 
*[[Temporary Columns]]
 
*[[Data Auto Sharding and Auto Indexing]]
 
*[[Data Auto Sharding and Auto Indexing]]
Line 85: Line 85:
   
   
===Further Reading ===
+
===Further Reading===
 
[https://github.org/launix-de/memcp MemCP on Github]
 
[https://github.org/launix-de/memcp MemCP on Github]
   
Line 96: Line 96:
 
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/
 
*https://wwwdb.inf.tu-dresden.de/research-projects/eris/
   
====How MemCP was built====
+
====How MemCP was built ====
   
 
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]
 
*[https://launix.de/launix/how-to-balance-a-database-between-olap-and-oltp-workflows/ Balancing OLAP and OLTP Workflows]

Revision as of 11:30, 31 October 2024

What is memcp?

[[1]] 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.

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.


FeaturesMemCP Port.png

  • fast: MemCP is built with parallelization in mind. The parallelization pattern is made for minimal overhead.
  • efficient: The average compression ratio is 1:5 (80% memory saving) compared to MySQL/MariaDB
  • modern: MemCP is built for modern hardware with caches, NUMA memory, multicore CPUs, NVMe SSDs
  • versatile: Use it in big mainframes to gain analytical performance, use it in embedded systems to conserve flash lifetime
  • Columnar storage: Stores data column-wise instead of row-wise, which allows for better compression, faster query execution, and more efficient use of memory.
  • In-memory database: Stores all data in memory, which allows for extremely fast query execution.
  • Build fast REST APIs directly in the database (they are faster because there is no network connection / SQL layer in between)
  • OLAP and OLTP support: Can handle both online analytical processing (OLAP) and online transaction processing (OLTP) workloads.
  • Compression: Lots of compression formats are supported like bit-packing and dictionary encoding
  • Scalability: Designed to scale on a single node with huge NUMA memory
  • Adjustable persistency: Decide whether you want to persist a table or not or to just keep snapshots of a period of time

https://www.youtube.com/watch?v=g29FR4Jwius

Navigation

Introduction

Getting Started

Frontends

SQL Frontend
RDF Frontend
Custom Frontends

Administration

Internals

How things work in MemCP
Optimizations


Screenshot from htop.png


Further Reading

MemCP on Github

Scientific

How MemCP was built