Skip to main content

MergenDB Banner

🏹 MergenDB

PyPI version Python Versions License: MIT Author Compression

"Big Data on Small Hardware"
MergenDB is an ultra-compact, columnar, embedded database engine and custom query language (MergenQL) designed to run analytical workloads on resource-constrained systems (Raspberry Pi, IoT gateways, low-end VPS, and edge devices) with maximum compression, zero memory exhaustion, and blazingly fast execution.

👨‍💻 Author & Lead Developer: Uğur Türker Kebeci (@ugurturkerkebeci)

Named after Mergen, the ancient Turkic deity of wisdom, precision, and archery—who never misses his target.


📦 Installation

Install MergenDB directly from PyPI:

pip install mergendb

(MergenDB has zero external dependencies for its core engine—runs out of the box on Python 3.8+!)


⚡ Core Philosophy & Architecture

Traditional databases (MySQL, PostgreSQL, SQLite) store data in a row-oriented layout. If a table has 40 columns and you only query temperature and room, row-oriented engines must read all 40 columns from disk, wasting massive I/O bandwidth and RAM.

MergenDB redesigns storage from the silicon up:

flowchart TD
    RawData["Raw Input Records (SQL / CSV / JSON / Dicts)"] --> Chunker["Vector Chunker (1024 - 4096 row vectors)"]
    Chunker --> ColSlice["Columnar Vertical Partitioning"]
    
    subgraph CompressionEngine ["Adaptive Compression Engine"]
        ColSlice --> BitPack["Bit-Packing (8 Bools / Byte, Small Ints)"]
        ColSlice --> Delta["Delta / Frame-of-Reference (Timestamps & IDs)"]
        ColSlice --> Dict["Dictionary Encoding (Low-Cardinality Strings)"]
        ColSlice --> RLE["Run-Length Encoding (Consecutive Repeated Data)"]
    end

    CompressionEngine --> ZoneMaps["ZoneMap Generator (Min/Max Indices per Chunk)"]
    ZoneMaps --> Disk[".mgdb Columnar Binary Storage on Disk"]

1. 🗜️ Adaptive Hardware-Level Encodings

  • Bit-Packing: 8 boolean values are packed into a single byte (8x compression).
  • Delta / Frame-of-Reference (FoR): Art arda gelen ID'ler veya zaman damgalarında farklar saklanır (8-byte tamsayı yerine 1-2 byte).
  • Dictionary Encoding: Tekrar eden metinler (status, category, city) 1-2 byte'lık ID tablolarına eşlenir.
  • Run-Length Encoding (RLE): Art arda gelen aynı değerler tek bir sayaçla saklanır.
  • Adaptive Selection: MergenDB her blokta en az yer kaplayan algoritmayı otomatik olarak tespit edip seçer.

2. 🎯 ZoneMap Indexing (Zero I/O Block Pruning)

Her veri bloğu minik bir min_val ve max_val üstverisi taşır. Eğer sorgunuz WHERE temperature > 40 ise ve bloğun tavanı 35 ise, MergenDB o bloğu diskten bile okumadan atlar.

3. ✂️ Column Pruning

Tabloda 50 sütun olsa bile sorgunuz 2 sütun istediyse, kalan 48 sütun diskten hiç okunmaz. Disk I/O darboğazı %90+ oranında yok edilir.

4. 🌊 Vectorized & Chunked Streaming (Zero OOM)

Veriler 2048'lik dilimler (chunk) halinde boru hattından akar. 109 Milyonluk dev bir veritabanı bile 512 MB RAM'li küçük bir cihazda belleği patlatmadan (Out Of Memory olmadan) işlenir.


📊 Benchmark: MergenDB vs SQLite vs JSON

Tested on 100,000 analytical telemetry records (12 columns per row):

Depolama Formatı Disk Boyutu Boyut Oranı Alan Tasarrufu Disk I/O Okuma
JSON Lines (.jsonl) ~ 19.5 MB 1.00x %0.0 ~ 19.5 MB
Standard SQL (SQLite) 8.11 MB 2.40x %58.4 8.11 MB (Tüm tablo)
MergenDB (.mgdb) 1.65 MB 11.80x %91.5 0.29 MB (Sadece 2 sütun!)

🚀 Sonuç: MergenDB SQLite'tan 5 kat, JSON'dan 12 kat daha küçüktür. Analitik sorgularda diski 27 kat daha az yorar!


📖 MergenQL & Komut Başvuru Kılavuzu (Cheat Sheet)

MergenDB'nin özgün sorgu dili MergenQL, verinin mantıksal olarak soldan sağa aktığı boru hattı (|) mimarisine dayanır.

1. Boru Hattı Aşamaları (Pipeline Stages)

Komut Açıklama Örnek
FROM Kaynak .mgdb dosyasını belirtir. FROM "telemetry.mgdb"
WHERE Satırları filtreler (ZoneMap uyumludur). | WHERE temp > 30.0 AND room == "Lab"
COMPUTE Yeni hesaplanmış sütun üretir. | COMPUTE temp_f = (temp * 1.8) + 32.0
SELECT Yansıtılacak sütunları seçer (Column Pruning). | SELECT device_id, temp, temp_f
AGGREGATE Özet fonksiyonları çalıştırır. | AGGREGATE avg(temp) AS ortalama BY room
SORT Sıralama yapar (ASC veya DESC). | SORT ortalama DESC
LIMIT Sonuç satır sayısını sınırlar. | LIMIT 10

2. Desteklenen Filtreleme Operatörleri (WHERE)

  • Karşılaştırma: ==, =, !=, <>, <, <=, >, >=
  • Mantıksal: AND, OR
  • Metin Arama: LIKE (SQL % ve _ joker karakterlerini destekler)
    Örnek: | WHERE room LIKE "kit%" veya | WHERE email LIKE "%@gmail.com"

3. Agregasyon Fonksiyonları (AGGREGATE)

  • count(*) veya count(col): Satır adedi
  • sum(col): Toplam
  • avg(col): Aritmetik ortalama
  • min(col): En küçük değer
  • max(col): En büyük değer
  • median(col): Medyan (ortanca) değer
  • stddev(col): Standart sapma

📥 SQL & phpMyAdmin Veritabanlarını İçe Aktarma

1. phpMyAdmin veya MySQL Dump Dosyalarını Aktarma (.sql)

phpMyAdmin'den dışa aktarılan database.sql dosyalarını tek satırda dönüştürün (MySQL'e özel ENGINE=InnoDB, AUTO_INCREMENT, LOCK TABLES gibi fazlalıklar otomatik temizlenir):

import mergendb

table = mergendb.from_sql_dump("phpmyadmin_dump.sql", "database.mgdb")
print(f"Toplam {table.row_count:,} satır MergenDB'ye aktarıldı!")

2. SQLite Veritabanlarını Aktarma (.db, .sqlite)

table = mergendb.from_sqlite("legacy.db", "orders.mgdb", table_name="orders")

3. Canlı MySQL / PostgreSQL / Oracle Bağlantılarından Çekme

import pymysql
from mergendb.io.importer import DataImporter

conn = pymysql.connect(host="localhost", user="root", password="", database="eticaret")
cur = conn.cursor()
cur.execute("SELECT * FROM siparisler")

DataImporter.from_cursor(cur, output_mgdb_path="siparisler.mgdb")

4. CSV Dosyalarını Otomatik Tip Algılama ile Aktarma

table = mergendb.from_csv("sensor_data.csv", "sensor_data.mgdb")

💻 İnteraktif Terminal Kabuğu (REPL CLI)

Terminalden doğrudan MergenDB kabuğunu başlatın:

python -m mergendb.cli.repl
# veya
mergen
  __  __                               _____  ____  
 |  \/  |                             |  __ \|  _ \ 
 | \  / | ___ _ __ __ _  ___ _ __     | |  | | |_) |
 | |\/| |/ _ \ '__/ _` |/ _ \ '_ \    | |  | |  _ < 
 | |  | |  __/ | | (_| |  __/ | | |   | |__| | |_) |
 |_|  |_|\___|_|  \__, |\___|_| |_|   |_____/|____/ 
                   __/ |                            
                  |___/   v0.2.0 (Edge Columnar Engine)

mergen> .info telemetry.mgdb
--- Storage Footprint: telemetry.mgdb ---
Total Rows           : 100,000
File Size on Disk    : 1.65 MB
Compression Ratio    : 11.80x (Saved 91.5% space)

mergen> .import sql backup.sql backup.mgdb
Successfully imported 250,000 rows in 320 ms

mergen> FROM "telemetry.mgdb"
   ...> | WHERE temp > 35.0 AND room LIKE "Server%"
   ...> | AGGREGATE avg(temp) AS ortalama, stddev(temp) AS sapma BY building
   ...> | SORT ortalama DESC
   ...> | LIMIT 5;

🧪 Test Paketini Çalıştırma

python -m unittest discover tests

(Tüm 16 birim testi sıfır hata ile geçmektedir).


👨‍💻 Yazar & İletişim

📄 Lisans

Bu proje MIT Lisansı ile lisanslanmıştır. Açık kaynak dünyasına ve düşük donanımlı sistemlerde büyük veri analitiğine katkı sağlamak amacıyla geliştirilmiştir.

Metadata

Release files for mergendb 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mergendb 0.3.0
File Size Uploaded
mergendb-0.3.0.tar.gz 41.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mergendb 0.3.0
File Interpreter ABI Platform
mergendb-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 79.7 kB

Release files / mergendb-0.3.0.tar.gz

Download URL mergendb-0.3.0.tar.gz
Size 41.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4a8f5a000b2c1fb05fc4d0f902a681ef2b9832568e39c6ba72b18e168bce5b7c
BLAKE2b-256 checksum
How to use checksums
e392f98ef8c4edbbc5d981a3fae52d5e51b601d5ab67d4bcdd4b158b0f617a0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.8.7rc1

Release files / mergendb-0.3.0-py3-none-any.whl

Download URL mergendb-0.3.0-py3-none-any.whl
Size 38.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be200bb62439d2593e50f0edcfcc00f2ba73f5b550cf8c4eae99da817c7dc966
BLAKE2b-256 checksum
How to use checksums
3962a9c9936fd4b8fc8d79329b66b2a89a5d4deb142e3db7af2e48a9a8e4c0cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.8.7rc1

Release history Release notifications | RSS feed

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.10

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

This release

0.3.0 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page