-
Notifications
You must be signed in to change notification settings - Fork 0
TR Concept Relational Records
Turkce Dokumantasyon | English Documentation
Kategori: Mimari Kavramlar ve Prensipler
Alt Sistem: Veri Modeli ve Ters Indeksler (AmberDB::Base&AmberDB::Index)
Madde Turu: Iliskisel Veri Modeli Rehberi
AmberDB, iliskisel veritabanlarindaki katı tablo bolunmelerini ve SQL JOIN darboğazlarini JOIN-Free Hiyerarsik Blok Modeli ile cozer. Ancak gercek dunya senaryolarinda bir kaydin icinde baska tablolara veya harici tanimlara ait Harici Anahtarlar (Foreign Keys) bulunmasi kacinilmazdir (ornegin: Urun
AmberDB'de iliskisel baglantilar iki guclu mekanizma ile yonetilir:
-
Coklu Deger CSV Harici Anahtarlari (
match_block): Bir kaydin icinde"5,12,89"seklinde tutulan harici anahtarlarin ters indeks (.fld) uzerinden$O(1)$ hizinda taranmasi. -
Harici Metin Verisinin Arama Indeksine Otomatik Dahil Edilmesi (
search_block): Tablo semasindasearch_blocktanimlanirken, yalnizca tablonun kendi text bloklari degil, harici tablolara bagli iliskisel bloklar ([ 2, "catalog_categories", 1 ]veyardbm) da belirtilebilir. Motor indeks uretirken (search_add), bloktaki icerik text ise dogrudan arama indeksine ekler; harici bir tabloya referans iceriyorsa o harici tablo dosyasini acip ilgili ID'nin karsiligi olan tam metni/ismi otomatik olarak bulur ve arama indeksine (.src) dahil eder. Boylece kullanici "Sony Ses Sistemleri" veya "Samsung Kulaklik" aradiginda iliskiselJOINyapmadan tek bir fonetik tam metin aramayla (search_table) tum sonuclara ulasilir. -
Cift Yonlu Sozluk ve Tekillik Indeksi (
.unq): Metinsel etiketlerin (orn. Yayinevi, Marka, Format) otomatik olarak tam sayi ID'lere eslenmesi ve tekillik denetiminin yonetilmesi.
search_block Otomatik Harici Metin Cozumleme Mimarisi
[Urun Kaydi: catalog_products]
- [1] Baslik: "Sony WH-1000XM5" (Dogrudan Text) ──┐
- [2] Kategori FK: 12 (rdbm Referans) ──┼──> [AmberDB search_add Boru Hatti]
│ │
[Harici Tablo: catalog_categories] │ v
- ID 12 => [1] "Kablosuz Ses Sistemleri" ──────────┘ .src Indeksine Yazilan Kelimeler:
"sony", "wh", "1000xm5",
"kablosuz", "ses", "sistemleri" ──> [1001]
Bir urun birden fazla kategoriye veya etikete ait oldugunda, AmberDB'de ara baglanti tablosu (Many-to-Many join table) acilmaz. Iliskili ID'ler virgulle birlestirilerek tek bir blokta saklanir:
# Kayit Dizisi:
my @urun = (
0, # [0] ID
"MacBook Pro 16", # [1] Baslik
"5,12,89", # [2] Kategori Harici Anahtarlari (FK CSV)
84999.00, # [3] Fiyat
);Tablo semasinda match_block => [ 2 ] tanimlandiginda, motor "5,12,89" degerini otomatik olarak ayristirir ve 5, 12 ve 89'un .fld indeksine bu urunun ID'sini ekler.
# 12 Numarali kategorideki tum urunleri SIFIR JOIN ile $O(1) hizinda bul:
my ($toplam, @urunler) = $adb->field_fetch("catalog_products", 2 => 12);E-ticaret sistemlerinde kullanicilar yalnizca urun adini degil, o urunun bagli oldugu kategori adini veya markasini da arama kutusuna yazarlar.
SQL veritabanlarinda bu arama JOIN categories ON ... WHERE categories.name LIKE '%...%' seklinde cok tablolu yavas bir tarama gerektirir.
AmberDB'de ise gelistiricinin manuel olarak metin birlestirmesine gerek yoktur. Tablo semasinda iliskili blok search_block listesine eklendiginde, motor indeksleme aninda harici tabloya giderek ilgili metni otomatik olarak cozer:
{
fields => [
{ id => "id", name => "Urun ID", type => "num" }, # [0]
{ id => "title", name => "Urun Adi", type => "text" }, # [1]
{ id => "cat_id", name => "Kategori", type => "num", rdbm => "catalog_categories;1" }, # [2]
{ id => "price", name => "Fiyat", type => "num" }, # [3]
],
# Arama indeksine hem urun basligi (1) hem de harici kategorinin adi ([2, "catalog_categories", 1]) dahil edilir:
search_block => [ 1, [ 2, "catalog_categories", 1 ] ],
}use AmberDB;
my $adb = AmberDB->new(path => { dbase_dir => "./dbstore" });
# 1. Kategori tablosunda Kategori #12 = "Kablosuz Ses Sistemleri" tanimlidir.
# 2. Urunu eklerken sadece dogal veriyi girersiniz:
my @urun = (
0, # [0] PK ID (Otomatik uretilir)
"Sony WH-1000XM5", # [1] Orijinal Urun Basligi (Text)
12, # [2] Kategori FK (catalog_categories tablosuna bagli ID)
12499.00, # [3] Fiyat
);
# insert_id aninda AmberDB:
# - Blok 1'deki "Sony WH-1000XM5" metnini alir.
# - Blok 2'deki 12 degerini gorup "catalog_categories" dosyasini acar, 12 ID'li kaydin 1. blogundaki "Kablosuz Ses Sistemleri" metnini okur.
# - Her iki metnin kelimelerini birlestirerek catalog_products_1.src indeksine yazar.
$adb->insert_id("catalog_products", @urun);
# 3. Artik kullanici "Sony Ses Sistemleri" aradiginda urun SIFIR JOIN ile aninda bulunur:
my ($toplam, @bulunanlar) = $adb->search_table("catalog_products", "sony ses sistemleri");
print "Eslesen urun sayisi: $toplam\n";Eger harici veriler metinsel dinamik etiketler ise (orn: Yayinevi, Marka, Renk, Beden), AmberDB .unq (${tablo}_${blok}.unq) cift yonlu sozluk dosyalarini yonetir:
- Metin
$\rightarrow$ Tamsayi ID (s:Metin$\rightarrow$ ID) - Tamsayi ID
$\rightarrow$ Metin (n:ID$\rightarrow$ Metin)
Bu sayede hem tekillik (valid => "unique") garanti altina alinir hem de devasa string degerler yerine kucuk tamsayilar indekslenerek disk ve bellek kullanimi dramatik olarak dusurulur.
- Sifir Calisma Zamani JOIN Maliyeti: Sorgu aninda diskten birden fazla tabloyu okuyup birlestirme ihtiyaci ortadan kalkar.
-
Tek Geciste Cok Boyutlu Arama: Kategori, marka ve ozellikler tek bir
.srcindeksine entegre edildigi icin tum metin aramasi tek hamlede cozulur. - Maksimum Olceklenebilirlik: Milyonlarca kayit iceren veritabanlarinda yuksek trafik altinda dahi sorgular mikrosaniyeler icinde yanitlanir.
AmberDB — High-Performance Schema-Driven NoSQL Database Engine for Perl.
Copyright 2005-2026 Maruf Cetin. Released under the Artistic License 2.0.
CPAN · GitHub Repository · Issue Tracker
- Berkeley DB (DB_File) Engine
- AmberDB Table Schema
- Global Flags
- Table Schema Flags
- Directory Structure
- File Structure (Extensions)
- Repeat Blocks
- Auto-Increment ID
- ASCII ID
- Relational Records
- Record Anatomy
- JOIN-Free Architecture
- Packed Binary Index
- Strict 2PL Locking
- Undo Journal & Rollback
- Tiered Junk Indexing
- Disjunctive Faceting
- Phonetic Accent Search
- 2-Pillar Disaster Recovery
- RAM-Disk Acceleration
- In-Memory Schema Mutation
- Simple Mode
- new
- config
- set_datadir
- insert_id
- insert_list
- modify_id
- modify_list
- delete_id
- delete_list
- read_id
- read_all
- read_list
- exist_id
- exist_list
- exist_table
- table_count
- table_keys
- table_lastid
- table_attr
- table_create
- field_fetch
- field_filter
- search_table
- facet_menu
- field_fltkeys
- field_allfltkeys
- facet_rules
- slug_read
- slug_fetch
- transact_start
- transact_end
- transact_commit
- transact_rollback
- transact_recover
- flock_open
- flock_close
- cache_setup
- cache_read
- cache_write
- cache_delete
- cache_preload
- cache_ensure
- buffer_write
- buffer_read
- buffer_delete
- recs_scan
- recs_get
- recs_put
- recs_del
- locale_uc
- locale_lc
- locale_sort
- locale_to_ascii
- locale_num2text
- locale_format_currency
- locale_format_date
- array_sort
- array_punch
- array_filter
- array_sublist
- deep_copy
- log_owner
- use_counter
- use_junk
- keep_deleted
- auto_id
- buffer_write
- simple
- no_write
- no_backup
- jnktype
- keys_only
- id_type
- language
- .db · .table · .dbase
- .inx · .fld · .src
- .fac · .srt · .slg
- .unq · .del · .aut
- .cnt · .txn · .amberdb
- .csv · .cache · .tmp