Data format — ma’lumotning elementlari, turlari va tuzilishi qanday ifodalanishini belgilaydigan qoidalar majmui. JSON, XML, CSV, Protocol Buffers, rasm formati va database dump bunga misoldir. Format producer yozgan bayt yoki matnni boshqa dastur bir xil ma’noda o‘qishi uchun umumiy kelishuv yaratadi.
Matnli va binary format
Matnli format odatiy editor bilan ko‘riladi va diagnostika qilish oson. JSON obyekt, array, son, boolean, null va stringlarni ifodalaydi. CSV jadvalga qulay, ammo delimiter, quote, encoding va newline bo‘yicha dialektlari mavjud. XML namespace, atribut va aralash content kabi boy model beradi.
Binary format odatda ixchamroq va parse qilish tezroq bo‘lishi mumkin. Protocol Buffers field raqami va schema orqali xabar kodlaydi. Rasm, audio va compressed archive tabiatan binarydir. “Binary har doim tez” qoidasi yo‘q; data hajmi, parser implementatsiyasi, compression va access pattern o‘lchanadi.
Schema va ma’no
Syntax formatning yozilish qoidasi, schema esa qaysi maydon, type va constraint qonuniyligini belgilaydi. JSON Schema yoki XML Schema validationni avtomatlashtiradi. Lekin amount son ekanini tekshirish uning valyutasi, yaxlitlash qoidasi va manfiy bo‘lishi mumkinligini to‘liq tushuntirmaydi. Semantic shartlar hujjat va biznes qoidalarida beriladi.
Sana uchun ISO 8601 ishlatilsa ham timezone va aniqlik kelishiladi. Sonni floating point’da yuborish moliyaviy qiymatda rounding muammosi berishi mumkin; minor unit integer yoki decimal string tanlanadi. ID’ni son sifatida yuborish JavaScript xavfsiz integer chegarasidan oshsa aniqlik yo‘qotadi.
Versiyalash
Format vaqt o‘tishi bilan rivojlanadi. Yangi optional field eski reader tomonidan e’tiborsiz qoldirilishi forward compatibility beradi. Required fieldni olib tashlash yoki ma’nosini o‘zgartirish breaking change bo‘lishi mumkin. Field nomini boshqa ma’noda qayta ishlatishdan ko‘ra deprecated qilib, yangi field qo‘shish xavfsizroq.
Version top-level maydon, media type yoki protokol negotiation orqali ko‘rsatiladi. “Versiya bor”ning o‘zi migrationni hal qilmaydi; producer va consumer qaysi kombinatsiyani qo‘llashi, qancha muddat parallel saqlanishi va eski data qanday yangilanishi aniqlanadi. Golden file testlari real eski namunalarni yangi parserda tekshiradi.
Parser xavfsizligi
Ishonchsiz input hajm, nesting chuqurligi, array uzunligi va string o‘lchami bilan cheklanadi. XML external entity, zip bomb va juda katta son resurs sarfi yoki ma’lumot oshkor qilishga olib kelishi mumkin. Parser xavfsiz opsiyalar bilan sozlanadi va timeout hamda memory limit ichida ishlaydi.
Canonical representation imzo va hash uchun zarur. JSON obyekt key tartibi semantik jihatdan muhim bo‘lmasa ham, xom bayt hashida farq qiladi. Imzolashdan oldin standart canonicalization yoki aniq serialization algoritmi qo‘llanadi. Floating point, Unicode normalization va whitespace ham deterministic natijaga ta’sir qiladi.
Tanlash mezoni
Format tanlashda inson o‘qishi, schema, streaming, random access, hajm, latency va ecosystem baholanadi. Ichki servis uchun qulay binary format public API clientlari uchun ortiqcha to‘siq bo‘lishi mumkin. Uzoq muddatli arxiv ochiq spetsifikatsiya, version metadata va mustaqil implementatsiyaga muhtoj.
Streaming va chegaralar
Katta data format butun hujjatni xotiraga yuklamasdan ketma-ket o‘qilishi mumkin. NDJSON har qatorda mustaqil JSON qiymati beradi, CSV row bo‘yicha, ayrim binary format esa frame bo‘yicha parse qilinadi. Streaming parser partial input va chunk chegarasini to‘g‘ri boshqaradi; bitta Unicode belgining baytlari ikki chunk orasida bo‘linishi mumkin. Xato aniqlanganda qaysi yozuvgacha natija commit qilingani ham aniq bo‘lishi kerak.
Bog‘liq tushunchalar
Serialization, Schema, JSON, XML, CSV, Protocol Buffers, Data interchange