İçeriğe geç
NarDBv0.2.0-dev

Partition ve dağıtım

Veriyi aralıklara bölmek ve her aralığın nerede durduğunu .ndbc içine yazmak.

İki ayrı soru var. Partition verinin nasıl bölündüğünü, dağıtım her parçanın nerede durduğunu söyler.

NarQL
create_schema('kayitlar')
    .fields({
        'seq':  {type: int64, autoincrement: true, primary_key: true},
        'olay': {type: string, max_length: 200}
    })
    .set_partition({
        'seq': {strategy: range, period: 10000}
    })
    .set_distribution({
        'seq': [
            {start: 0,     end: 10000, location: local()},
            {start: 10000, end: 30000, location: file('parts/kayitlar_2.ndbp')},
            {start: 30000, location: remote('10.0.0.12:7070'), credential: 'node02'}
        ]
    })
    .commit();

Partition#

  • Tek bir anahtar alan kullanılır. Birden fazla alanla bölme henüz yok.
  • Strateji: range.
  • Tamsayı anahtarlarda period bir sayıdır, start varsayılan olarak 0'dır.
  • Tarih anahtarlarında period bir süredir (180d, 4w, 12h) ve start zorunludur.
NarQL
create_schema('loglar')
    .fields({'gun': {type: date}, 'mesaj': {type: text}})
    .set_partition({'gun': {start: '2026-01-01', period: 180d}})
    .commit();

Süre birimleri: ms, s, m, h, d, w. Ay ve yıl sabit uzunlukta olmadığı için kullanılamaz.

Dağıtım haritası#

  • Aralıklar [start, end) biçimindedir: başlangıç dahil, bitiş hariç. Yalnızca son aralığın sonu açık bırakılabilir.
  • Aralıklar sıralı olmalı ve birbiriyle çakışmamalıdır. Her sınır bir partition sınırına (start + n × period) denk gelmelidir.
  • Haritada yer almayan aralıklar bu .ndbc dosyasında durur.
  • Konumlar: local(), file('yol.ndbp') (.ndbp = nar database partition), remote('host:port').

Harita .ndbc içine gömülüdür. Bir partition başka bir dosyada ya da sunucuda olsa bile onun nerede olduğu bilgisi veritabanının kendisinde durur. Her veritabanının 128 bitlik bir database_id'si vardır; dış partition'lar doğru veritabanına bu kimlikle bağlanacak.

Anahtarlar şemaya yazılmaz#

Uzak bir aralık credential ister. Bu değer bir anahtarın kendisi değil, sistem anahtar deposundaki kaydın adıdır.

NarQL
# hata: never put keys in a schema: store the key in the system keychain and write credential: 'name' instead
create_schema('x')
    .fields({'id': {type: int64}})
    .set_partition({'id': {period: 10000}})
    .set_distribution({'id': [
        {start: 0, location: remote('10.0.0.12:7070'), private_key: 'ndb_tbk_93hdhf'}
    ]});

Sunucu bilgisi set_partition içine yazılamaz:

NarQL
# hata: 'use_remote_server' belongs to .set_distribution()
create_schema('x')
    .fields({'id': {type: int64}})
    .set_partition({'id': {period: 10000, use_remote_server: true}});