- SQLite'ın mevcut JSON işlevleri yeniden yazıldı. Kullanım desenine bağlı olarak birkaç kata kadar daha hızlı çalışıyor
- Orijinal JSON işlevleri 3 aşamada çalışıyordu
- JSON'u, C kodunun kolayca işleyebileceği dahili bir ikili biçime ayrıştırma
- İstenen işlemi gerçekleştirme; belirli bir alanı bulma ya da JSON'u değiştirme gibi
- İşlem JSON'u değiştirdiyse, dahili ikili biçimi çıktı veya depolama için RFC-8279 JSON dizgesine dönüştürme
-
- aşama dışındaki 1 ve 3, ek yük oluşturuyordu
- SQLite, çok sayıda işaretçi içeren dahili ikili JSON biçimi kullanıyordu. Bu, C programları için uygundu ancak serileştirmesi zordu
- JSONB yeniden yazımıyla birlikte, bu JSON'un dahili ikili gösterimi SQL BLOB olarak okunup yazılabilen bitişik bir bayt dizisine dönüştürüldü
- Böylece dahilde kullanılan JSON gösterimi, JSON metni yerine veritabanında saklanabildiği için 1. ve 3. aşamaların ek yükü ortadan kaldırılabiliyor
Değişenler
- Mevcut tüm işlevler aynen korunuyor. Yalnızca yeni özellikler ekleniyor
- Artık JSON metnini girdi olarak alan tüm JSON işlevleri, aynı parametreler için JSONB ikili içeriğini de kabul ediyor
- İşleve metin mi yoksa ikili veri mi alacağını söylemeye gerek yok. İşlev bunu kendi kendine ayırt ediyor
- Artık JSON üreten JSON işlevleri iki sürüm halinde sunuluyor
- Mevcut
json_ işlevleri eskisiyle aynı şekilde çalışıyor
- Metin JSON yerine JSONB döndüren
jsonb_ işlevleri var; böylece genel işlem akışında 3. aşama atlanıyor
- Uygulama değiştirilmezse hız biraz (%1) artıyor, ancak her şey eskisi gibi çalışmaya devam ediyor
- Ancak uygulamayı değiştirip metin JSON yerine JSONB depolamaya başlarsanız, en azından JSON yoğun iş yüklerinde 3 kata kadar performans artışı görebilirsiniz
- Ayrıca JSONB çoğu durumda metin JSON'dan biraz daha küçüktür (yaklaşık %5 ila %10 daha küçük), bu nedenle JSON'u yoğun kullanan durumlarda veritabanı boyutunda da bir miktar azalma görülebilir
1 yorum
Hacker News görüşleri
JSONB konusunda çok fazla kafa karışıklığı var
jsonb_önekiyle kullanılabilir.JSONB, Postgres'in sunduğu bir biçimdir ve normal JSON'a kıyasla okuma performansını artırdığı için önerilir.
Belge deposunun amacını anlamak yıllar aldı ve POC (Proof of Concept) oluşturmak için mükemmel.
SQLite'ın sürüm sürecine dair merak var.
JSONB, ön sürüm snapshot'larında veya playground'da denenebilir.
JSONB spesifikasyonunun temel fikri, her öğenin boyut ve tipi içeren bir başlıkla başlamasıdır.
MongoDB'nin BSON'una aşina olanlar var, ancak JSONB'ye değil.
JSONB performansı etkiler.
JSON verisini birden fazla satır boyunca sıkıştırmanın bir yolu olsaydı iyi olurdu.
İç biçime rağmen uygulamada hemen kullanılabilir.
json_each, uygulamada JSONB BLOB olarak bağlanan parametreleri kabul edebilir.