- SQLite के मौजूदा JSON functions को फिर से लिखा गया है. उपयोग पैटर्न के अनुसार यह कई गुना तक तेज़ चल सकता है
- मूल JSON functions 3 चरणों में काम करते थे
- JSON को ऐसे internal binary format में parse करना जिसे C code आसानी से प्रोसेस कर सके
- मांगा गया काम करना, जैसे किसी खास field को ढूंढना या JSON को संशोधित करना
- अगर काम के दौरान JSON बदला गया हो, तो internal binary format को RFC-8279 JSON string में बदलकर output या store करना
- चरण 2 को छोड़कर 1 और 3 overhead थे
- SQLite JSON के internal binary रूप का उपयोग करता था, जिसमें कई pointers होते थे. यह C programs के लिए उपयुक्त था, लेकिन serialize करना कठिन था
- JSONB rewrite के जरिए इस JSON के internal binary representation को एक continuous byte array में बदला गया है, जिसे SQL BLOB के रूप में पढ़ा या लिखा जा सकता है
- इससे internal JSON representation को JSON text की जगह database में store किया जा सकता है, इसलिए चरण 1 और 3 का overhead हटाया जा सकता है
क्या बदला है
- सभी मौजूदा features वैसे ही बने रहेंगे. केवल नई functionality जोड़ी गई है
- अब JSON text को input के रूप में स्वीकार करने वाले सभी JSON functions, उन्हीं parameters के लिए JSONB binary content भी स्वीकार करेंगे
- यह बताने की ज़रूरत नहीं होगी कि function को text लेना है या binary data. function खुद ही पहचान लेगा
- अब JSON output देने वाले JSON functions दो versions में उपलब्ध हैं
- मौजूदा
json_ functions पहले की तरह ही काम करेंगे
jsonb_ functions text JSON के बजाय JSONB लौटाते हैं, इसलिए सामान्य processing में चरण 3 छोड़ दिया जाता है
- अगर application में कोई बदलाव न किया जाए, तब भी speed थोड़ी (1%) बढ़ेगी, लेकिन बाकी सब पहले की तरह काम करता रहेगा
- लेकिन अगर application को बदलकर text JSON की जगह JSONB store करना शुरू किया जाए, तो कम से कम JSON-intensive workloads में 3 गुना performance improvement देखा जा सकता है
- साथ ही, ज़्यादातर मामलों में JSONB text JSON से थोड़ा छोटा होता है (लगभग 5% या 10% छोटा), इसलिए अगर JSON का बहुत उपयोग होता है तो database size भी थोड़ा कम हो सकता है
1 टिप्पणियां
Hacker News राय
JSONB को लेकर काफी भ्रम है
jsonb_prefix के साथ उपलब्ध हैं.JSONB, Postgres द्वारा दिया गया format है, और सामान्य JSON की तुलना में बेहतर read performance के कारण इसकी सिफारिश की जाती है.
document store के उद्देश्य को समझने में कई साल लगे, और यह POC(Proof of Concept) बनाने के लिए बेहतरीन है.
SQLite के release process को लेकर जिज्ञासा है.
JSONB को pre-release snapshot या playground में आज़माया जा सकता है.
JSONB spec का मुख्य विचार यह है कि हर element एक header से शुरू होता है जिसमें size और type शामिल होते हैं.
MongoDB के BSON से परिचित हैं, लेकिन JSONB से नहीं.
JSONB performance को प्रभावित करता है.
काश कई rows में फैले JSON data को compress करने का कोई तरीका होता.
internal format के बावजूद यह application में तुरंत उपयोग योग्य है.
json_eachapplication से JSONB BLOB के रूप में bind किए गए parameters स्वीकार कर सकता है.