AmberDB

 view release on metacpan or  search on metacpan

docs/TR.AmberDB_Veritabani_Sistemi.md  view on Meta::CPAN


### 13.1 RAM-Disk Hızlandırması Nedir?

AÄŸ tabanlı önbellek sistemlerinin (Redis veya Memcached gibi) aksine, AmberDB'nin RAM-disk motoru doÄŸrudan iÅŸletim sistemi dosya sistemi blok seviyesinde çalışır. Tabloları ve indeksleri doÄŸrudan iÅŸletim sistemi seviyesindeki RAM-disk baÄ...

**Temel Mimari Farklar:**
* **Harici Sunucu ve Süreç Yok:** Ayrı bir Redis/Memcached sunucusu kurma, konfigüre etme, izleme ve ağ portu açma gereksinimi yoktur.
* **Sıfır Ağ Gecikmesi:** Erişimler TCP soketleri veya IPC yerine doğrudan yerel dosya sistemi çağrılarıyla (`pread`, `pwrite`, `mmap`) gerçekleşir.
* **Birebir Yerel Veri Formatı:** Kalıcı diskteki `.db` ve `.inx` dosyalarıyla aynı ikili (binary) formatta tutulur; ek serileştirme/deserileştirme dönüşüm maliyeti oluşmaz.
* **Süreçler Arası Paylaşımlı Bellek:** Tüm eşzamanlı Perl süreçleri, Apache/FastCGI iş parçacıkları ve arka plan komutları (cron) tarafından doğrudan ortak kullanılır.

### 13.2 Nasıl Çalışır?

* **Yerel Dosya Formatı Aynalama:** AmberDB tüm tablo dosyalarını kendi özgün uzantılarıyla (`.db`, `.inx`, `.fld`, `.src`, `.fac`, `.unq`, `.slg`) RAM-disk üzerinde saklar. Tescilli veya farklı bir `.cache` dosya formatı kullanılmaz.
* **EÅŸzamanlı Çift Yazma (Dual-Write):** Bir kayıt eklendiÄŸinde veya güncellendiÄŸinde, motor hem kalıcı diske hem de RAM-diske eÅŸzamanlı olarak yazar. Okumalar doÄŸrudan bellek hızında RAM-diskten karşılanırken, veri dayanıklılığÄ...
* **ACID İşlem Güvenliği:** RAM-disk katmanındaki tüm yazma işlemleri AmberDB'nin disk tabanlı WAL geri alma günlükleri (`dbstore/journal/txn_*`) ve Strict 2PL kilitleri ile korunur. Bir işlem iptal edilirse (rollback), her iki katmandaki ...
* **Otomatik Bağlantı Denetimi ve Katı Sıfır-Fallback:** Motor, RAM-disk dosyalarına erişmeden önce dosya sisteminin bağlı (`mounted`) olup olmadığını denetler. RAM-disk bağlı olmadığında tüm RAM-disk yolları (`ramdisk_dir`, `tab...

### 13.3 RAM-Disk ile L1 Süreç İçi Önbellek Karşılaştırması

AmberDB bünyesinde iki farklı bellek katmanı bulunur ve amaçları birbirinden ayrılmıştır:

| Özellik | Fiziksel RAM-Disk Katmanı (`use_ramdisk`) | L1 Süreç İçi Önbellek (`get_cache` / `set_cache`) |
| :--- | :--- | :--- |
| **Kapsam** | Süreçler arası ortak, sistem çapında paylaşımlı | Tek bir Perl süreci / iş parçacığı belleği |
| **Depolama Motoru** | Yerel `DB_File` ve ikili indeks dosyaları | Süreç içi Perl hash referansları |
| **Kalıcılık** | Kalıcı disk ile senkronize (Seviye 1, 2 & 4) | Yalnızca süreç çalışma süresi boyunca |
| **Metotlar** | `insert_id`, `read_id`, `search_table`, `update_id` | `$adb->get_cache()`, `$adb->set_cache()` |

```perl
# L1 Süreç İçi Önbellek Kullanımı
$adb->set_cache("panel", "aktif_kullanicilar", @kullanici_idleri);
my @kullanicilar = $adb->get_cache("panel", "aktif_kullanicilar");
$adb->set_cache("panel", "aktif_kullanicilar", undef); # Önbelleği temizle
```

### 13.4 RAM-Disk Hızlandırma Seviyeleri (`use_ramdisk`)

Tablolar şema dosyasında veya dinamik olarak `table_attr()` ile hızlandırma seviyesine bağlanır:

* **`0` (Kapalı):** Standart kalıcı disk erişimi.
* **`1` (Hibrit İndeks Hızlandırması):** Yalnızca ikincil indeks dosyaları (`.inx`, `.src`, `.fld`, `.fac`, `.unq`, `.slg`) RAM-diske alınır ve diske senkron çift yazılır. Ana veri (`.db`) kalıcı diskte saklanır. Arama, filtreleme ve sÄ...
* **`2` (Tam Tablo RAM Aynası - Dual-Write):** Tablo verileri (`.db`) ve tüm indeks dosyaları RAM-diske aynalanır. Okumalar doğrudan RAM'den döner; yazma anında kalıcı diske ve RAM-diske eşzamanlı çift yazma yapılır.
* **`3` (Uçucu RAM-Disk - Pure Volatile Key-Value):** Veri **yalnızca RAM-disk üzerinde** `.db` dosyasında tutulur. Fiziksel diskte hiçbir dosya ve indeks oluşturulmaz (`use_simple => 1`). Oturumlar (session), sepetler ve geçici tokenlar için...
* **`4` (Asenkron Diske Yazma - Write-Behind):** Tüm okuma ve yazmalar RAM-diskte mikrosaniye hızında gerçekleştirilir. Diske yazma ertelenir ve `dbstore/journal/sync_ramdisk` günlüğüne dirty olayı fırlatılır. `amberdb_daemon.pl` arka pl...

### 13.5 Şeffaf Yönetim: `use_ramdisk` Kullanımı

RAM-Disk katmanını yönetmek için özel okuma/yazma fonksiyonları çağırmanıza gerek yoktur; her şey arka planda otomatik yürütülür. Yönetim bütünüyle `use_ramdisk` seçeneği üzerinden sağlanır:

#### 1. Global Yapılandırma (Tüm Tablolar İçin Varsayılan)
Tüm veritabanı genelinde indeks veya tam tablo hızlandırmasını tek seferde etkinleştirebilirsiniz:

```perl
# Kurulum anında tüm tablolara Seviye 1 (Hibrit İndeks) uygulama
my $adb = AmberDB->new(
    cfg => { use_ramdisk => 1 },
    path => { dbase_dir => "/var/data/amberdb" }
);

# Çalışma anında global seviyeyi değiştirme
$adb->config(use_ramdisk => 2); # Tüm tabloları Seviye 2 (Tam Ayna) yap
```

#### 2. Tablo Bazında Esnek Yapılandırma ve İstisnalar
Her tablo için `.table` şema dosyasından veya çalışma anında `table_attr()` ile bağımsız hızlandırma seviyesi belirlenebilir:

```perl
# Yüksek trafikli kategoriler tablosunu Tam RAM Aynasına al
$adb->table_attr("catalog_category", use_ramdisk => 2);

# Seyrek erişilen bir tabloyu global RAM-disk kapsamı dışına çıkar (diskte tut)
$adb->table_attr("audit_archive", use_ramdisk => 0);
```

#### 3. Standart CRUD Çağrılarıyla Doğrudan Kullanım
Geliştirici yalnızca standart AmberDB metotlarını kullanır. Motor, arka planda RAM-disk kopyalamasını, bellekten okumayı ve diske çift yazmayı şeffaf olarak yürütür:

```perl
# Okuma: use_ramdisk tanımlıysa sorgular doğrudan RAM üzerinden mikrosaniyede döner
my @urun = $adb->read_id("catalog_product", 101);
my ($adet, @sonuclar) = $adb->search_table("catalog_product", "kablosuz kulaklik");

# Yazma: Motor otomatik olarak hem kalıcı diske hem RAM-diske yazar (Dual-Write)
$adb->insert_id("catalog_product", 0, @yeni_urun);
$adb->update_id("catalog_product", 101, @guncel_veri);
```

### 13.6 RAM-Disk Yönetimi ve Yardımcı Araçlar

AmberDB, işletim sistemine özgü RAM-disk bağlama noktalarını yerleşik olarak destekler:

- **Windows:** `bin\setup_windows.bat start 512M R:` ile ImDisk sanal sürücüsü oluşturulur. Durum denetimi `bin\setup_windows.bat status`, bağlantı sonlandırma ise `bin\setup_windows.bat stop R:` ile yapılır.
- **Linux:** `/dev/shm` dizini otomatik olarak paylaşımlı bellek alanı olarak tanınır.
- **macOS:** `/Volumes` altındaki APFS RAM-disk birimleri otomatik olarak kullanılır.
- **Arka Plan Eşitleme Daemon'ı (Tier 4):** `perl bin/amberdb_daemon.pl start` komutuyla başlatılır, `status` ile izlenir ve `stop` ile güvenle durdurulur.
- **Depolama Düzeni Senkronizasyonu:** `amberdb update storage` veya `perl bin/amberdb_cli.pl update storage --force` ile tüm dizinler güncellenir.

### 13.7 Uçucu Tablolar ve Kayan TTL Zaman Aşımı (`ramdisk_ttl`)

`ramdisk_ttl` parametresi **yalnızca `use_ramdisk => 3` (uçucu RAM-disk)** modunda çalışan tablolar için geçerlidir (varsayılan: 300 saniye). Süresi dolan kayıtlar erişim anında otomatik olarak temizlenir:

```perl
# Session tablosunu uçucu RAM-disk ve 30 dakika TTL ile ayarlama
$adb->table_attr("session", {
    use_ramdisk => 3,
    ramdisk_ttl => 1800,      # 30 dakika kayan TTL (yalnızca Tier 3 için geçerli)
    table_dir   => 'session'  # ramdisk/session/ altında saklar
});
```

### 13.8 Özel Tablo Dizini (`table_dir`)

Tablolar varsayılan olarak `tables/` dizininde saklanır. `table_dir` parametresi ile istenilen alt klasöre yönlendirilebilir:

```perl
# SipariÅŸ tablosunu 'siparis' dizinine yerleÅŸtirme:
# Fiziksel: dbstore/siparis/siparis_tablosu.db
# RAM-Disk: ramdisk/siparis/siparis_tablosu.db
$adb->table_attr("siparis_tablosu", table_dir => 'siparis');

# Kök dizine yerleştirme (tables/ önekini ezme):
$adb->table_attr("kok_tablosu", table_dir => '');
```

### 13.9 Disk Tabanlı Geçici Buffer

Büyük veri aktarımlarında veya raporlama işlemlerinde RAM dışı geçici disk buffer'ı kullanılır:

```perl
$adb->buffer_write("rapor_gecici", @buyuk_veri);
my @veri = $adb->buffer_read("rapor_gecici");



( run in 0.412 second using v1.01-cache-2.11-cpan-4716db65a44 )