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.
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
periodbir sayıdır,startvarsayılan olarak 0'dır. - Tarih anahtarlarında
periodbir süredir (180d,4w,12h) vestartzorunludur.
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
.ndbcdosyası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.
# 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:
# hata: 'use_remote_server' belongs to .set_distribution()
create_schema('x')
.fields({'id': {type: int64}})
.set_partition({'id': {period: 10000, use_remote_server: true}});