JSONB مقابل JSON: متى تستخدم كلًّا منهما
اختر بين JSON (نصي يحافظ على المسافات البيضاء) وJSONB (ثنائي قابل للفهرسة ويزيل المفاتيح المكررة) للتخزين المناسب
JSONB مقابل JSON: متى تستخدم كلًّا منهما درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
نوعا JSON في PostgreSQL
JSON— يخزن النص الدقيق الذي أدخلتهJSONB— تنسيق ثنائي مفكك، مع إزالة تكرار المفاتيح، وقابل للفهرسة
JSON: تخزين نصي
يحافظ JSON على المسافات البيضاء وترتيب المفاتيح والمفاتيح المكررة. ويُعاد تحليله عند كل قراءة. ولا يدعم فهرسة GIN. ونادرًا ما يكون الخيار الصحيح للتعليمة البرمجية الجديدة.
INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs; -- whatever the parser picksJSONB: ثنائي وقابل للفهرسة
يتميز JSONB بما يلي:
- يُخزن بعد تفكيكه ← لا حاجة إلى إعادة تحليله عند القراءة
- تُدمج المفاتيح المكررة (وتفوز القيمة الأخيرة)
- لا يُحافَظ على ترتيب المفاتيح
- يدعم فهرسة GIN
- يدعم عوامل مسار غنية
مثال على JSONB
جدول بسيط للأحداث:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
data JSONB NOT NULL
);
INSERT INTO events (data) VALUES
('{"type":"login","user_id":42,"ip":"1.2.3.4"}');عوامل المسار
يحتوي JSONB على عوامل غنية (سيُشرح ذلك في الدرس التالي):
SELECT data->'user_id' FROM events; -- → JSONB
SELECT data->>'user_id' FROM events; -- → TEXT
SELECT data #>> '{user,name}' FROM events; -- nested text pathالاحتواء
عامل JSONB الأكثر فائدة: @> (يحتوي).
SELECT * FROM events WHERE data @> '{"type":"login"}';
-- Combined with a GIN index, this is fast even on billions of rows.مساواة JSONB
تتساوى قيمتا JSONB إذا تطابقت محتوياتهما — ولا يهم ترتيب المفاتيح:
SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB; -- TRUEالتحويل بين النوعين
أجرِ التحويل بحرية:
SELECT '{"a":1}'::JSONB->'a'; -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a'; -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT; -- 1 (as INT after extraction)متى لا تستخدم JSONB
إذا كانت البيانات ذات بنية ثابتة، فاستخدم أعمدة حقيقية:
- استعلامات أسرع (من دون تحليل مستند لكل صف)
- أنواع وقيود قوية
- تخزين أصغر حجمًا
- إحصاءات أفضل
يتألق JSONB عندما تختلف البنية أو تتطور بسرعة.
النمذجة الهجينة
أفضل ممارسة: استخدم أعمدة منظمة للحقول الثابتة، وJSONB للإضافات المتغيرة:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
extra JSONB NOT NULL DEFAULT '{}'::JSONB
);التحقق
يخزن JSONB أي JSON صالح. ولتطبيق قيود منظمة، استخدم قيود CHECK أو فرض المخطط في طبقة التطبيق:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type');مراجعة
يُفضَّل JSONB على JSON في جميع حالات الإنتاج تقريبًا.
- JSONB: ثنائي، قابل للفهرسة، ومسارات سريعة
- JSON: تخزين نصي وإعادة النص كما هو فقط
- استخدم JSONB للبنى المتغيرة، والأعمدة الحقيقية للبنى الثابتة
تحقق سريع
أنت تصمم جدولًا جديدًا لتخزين مستندات JSON التي يحمّلها المستخدمون، وستستعلم عنها حسب المحتوى. هل تختار JSON أم JSONB؟
الأسئلة الشائعة
هل درس «JSONB مقابل JSON: متى تستخدم كلًّا منهما» مجاني؟
نعم — نص درس «JSONB مقابل JSON: متى تستخدم كلًّا منهما» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «JSONB مقابل JSON: متى تستخدم كلًّا منهما»؟
اختر بين JSON (نصي يحافظ على المسافات البيضاء) وJSONB (ثنائي قابل للفهرسة ويزيل المفاتيح المكررة) للتخزين المناسب تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «JSONB مقابل JSON: متى تستخدم كلًّا منهما»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- JSONB مقابل JSON: متى تستخدم كلًّا منهما
- معاملات المسار: -> ->> @>
- فهرسة JSONB باستخدام GIN
- النمذجة: متى يتفوق JSONB على التطبيع