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 )