Binary‌ odcoding ‌ بدلاً من ‌JSON

تشفير نفس البيانات أقل بكثير

بيت.

صورة


لماذا "هذا" يجب أن تقلق



يتم تخزين البيانات في الذاكرة في شكل هياكل البيانات ، مثل الكائنات والقوائم والمصفوفات ، وما إلى ذلك. ولكن إذا كنت ترغب في إرسال البيانات عبر الشبكة أو إلى ملف ، فأنت بحاجة إلى ترميزها كتسلسل من baytov. الترجمة تسمى التمثيلات في الذاكرة في سلسلة من وحدات البايت التشفير ، والتحويل العكسي - dekodirovaniem. وفي النهاية قد يتطور مخطط البيانات الذي يعالجه التطبيق ، أو المخزن في الذاكرة ، ويمكن إضافة حقول جديدة أو إزالتها starye. ‌Used‌ ‌ ترميز ‌must‌ ‌have‌ ‌as‌ عكسي ‌ (new‌ ‌code‌ ‌must‌ ‌be‌ ‌capable‌ قراءة ‌data ‌ write‌ old ‌code) ،‌ ‌so ‌and‌ ‌direct‌ ‌ (old‌ ‌code‌ ‌must‌ ‌be‌ ‌capable ‌read‌ ‌data ‌‌wrote‌‌new‌‌code) ‌ pat'patibility.‌ ‌

في

هذه المقالة ، سنناقش مجموعة متنوعة من تنسيقات التشفير ، ومعرفة سبب كون الترميز الثنائي أفضل من JSON ، و XML ، وكذلك لأن طرق الترميز الثنائي تدعم مخططات التغييرات

dannyh.

أنواع "تنسيق الترميز"

هناك

نوعان من تنسيقات التشفير:



  • ‌ تنسيق ‌
  • Binary‌ "تنسيقات"
‌ ‌

تنسيق النص



تنسيقات النص من أمثلة التنسيقات الشائعة JSON و CSV و XML. تنسيقات النص سهلة الاستخدام والفهم ، ولكن لديها مشاكل معينة:



  • . , XML CSV . JSON , , . . , , 2^53 Twitter, 64- . JSON, API Twitter, ID — JSON- – - , JavaScript- .
  • CSV , .
  • تستهلك تنسيقات النص مساحة أكبر من التشفير الثنائي. على سبيل المثال ، أحد الأسباب هو أن JSON و XML غير مخطط وبالتالي يجب أن يحتوي على أسماء الحقول.


{
    "userName": "Martin",
    "favoriteNumber": 1337,
    "interests": ["daydreaming", "hacking"]
}


يستغرق تشفير JSON لهذا المثال 82 بايت بعد إزالة كل المسافات البيضاء.



ترميز ثنائي



لتحليل البيانات التي يتم استخدامها داخليًا فقط ، يمكنك اختيار تنسيق أصغر حجمًا أو أسرع. على الرغم من أن تنسيق JSON أقل من XML ، إلا أن كلاهما لا يزال يشغل مساحة كبيرة عند مقارنتهما بالتنسيقات الثنائية. في هذه المقالة ، سنناقش ثلاثة تنسيقات ترميز ثنائية مختلفة:



  1. تقطير
  2. مخازن البروتوكول
  3. أفرو


توفر جميعها تسلسلًا فعالًا للبيانات باستخدام المخططات ولديها أدوات لإنشاء التعليمات البرمجية ، بالإضافة إلى دعم العمل بلغات برمجة مختلفة. كلهم يدعمون تطور المخطط ، مما يوفر التوافق مع الإصدارات السابقة والأمامية.



مخازن التوفير والبروتوكول



تم تطوير Thrift بواسطة Facebook وتم تطوير Protocol Buffers بواسطة Google. في كلتا الحالتين ، مطلوب مخطط لتشفير البيانات. يعرّف Thrift المخطط باستخدام لغة تعريف الواجهة الخاصة به (IDL).



struct Person {
  1: string       userName,
  2: optional i64 favouriteNumber,
  3: list<string> interests
}


مخطط مكافئ لمخازن البروتوكول:



message Person {
    required string user_name        = 1;
    optional int64  favourite_number = 2;
    repeated string interests        = 3;
}


كما ترى ، يحتوي كل حقل على نوع بيانات ورقم علامة (1 و 2 و 3). يحتوي Thrift على تنسيقين مختلفين للترميز الثنائي: BinaryProtocol و CompactProtocol. التنسيق الثنائي بسيط كما هو موضح أدناه ويستغرق 59 بايت لترميز البيانات أعلاه.



صورة



التشفير باستخدام بروتوكول Thrift الثنائي يعتبر البروتوكول



المضغوط معادلًا ثنائيًا ، ولكنه يحزم نفس المعلومات في 34 بايت فقط. يتم التوفير عن طريق تعبئة نوع الحقل ورقم العلامة في بايت واحد.



صورة



الترميز باستخدام Thrift Compact



Protocol Buffers يقوم بترميز البيانات بطريقة مماثلة لبروتوكول Compact في Thrift ، وبعد التشفير ، تكون نفس البيانات 33 بايت.



صورة



ترميز باستخدام المخازن المؤقتة للبروتوكول



تدعم أرقام العلامات تطور المخططات في مخازن Thrift و Protocol. إذا حاول الرمز القديم قراءة البيانات المكتوبة باستخدام المخطط الجديد ، فإنه ببساطة سيتجاهل الحقول التي تحتوي على أرقام العلامات الجديدة. وبالمثل ، يمكن للكود الجديد قراءة البيانات المكتوبة في المخطط القديم من خلال وضع علامة على القيم على أنها فارغة لأرقام العلامات المفقودة.



أفرو



Avro يختلف عن Buffers Protocol و Thrift. يستخدم Avro أيضًا مخططًا لتعريف البيانات. يمكن تعريف المخطط باستخدام Avro IDL (تنسيق قابل للقراءة البشرية):



record Person {
    string               userName;
    union { null, long } favouriteNumber;
    array<string>        interests;
}


أو JSON (تنسيق أكثر قابلية للقراءة آليًا):



"type": "record",
    "name": "Person",
    "fields": [
        {"name": "userName",        "type": "string"},
        {"name": "favouriteNumber", "type": ["null", "long"]},
        {"name": "interests",       "type": {"type": "array",      "items": "string"}}
    ]
}


لاحظ أن الحقول لا تحتوي على أرقام الملصقات. تستغرق نفس البيانات المشفرة باستخدام Avro 32 بايت فقط.



صورة



البرمجة مع Avro.



كما ترى من تسلسل البايت أعلاه ، لا يمكن تحديد الحقول (في تسميات Thrift و Protocol Buffers التي يتم استخدام الأرقام لها) ، من المستحيل أيضًا تحديد نوع بيانات الحقل. يتم تجميع القيم ببساطة. هل يعني هذا أن أي تغيير في الدائرة أثناء فك التشفير سوف يولد بيانات غير صحيحة؟ الفكرة الرئيسية لـ Avro هي أن مخطط الكتابة والقراءة لا يجب أن يكون هو نفسه ، ولكن يجب أن يكون متوافقًا. عندما يتم فك تشفير البيانات ، تحل مكتبة Avro هذه المشكلة من خلال النظر في كلتا الدائرتين وترجمة البيانات من دائرة المسجل إلى دائرة القارئ.



صورة



القضاء على الفرق بين



دارات القارئ والكاتب ربما تفكر في كيفية تعلم القارئ بدوائر الكاتب. كل شيء عن سيناريو استخدام الترميز.



  1. عند نقل ملفات أو بيانات كبيرة ، قد يشمل المُسجل الدائرة في بداية الملف مرة واحدة.
  2. في قاعدة بيانات تحتوي على سجلات فردية ، يمكن كتابة كل صف باستخدام مخططه الخاص. الحل الأبسط هو تضمين رقم إصدار في بداية كل إدخال والاحتفاظ بقائمة المخططات.
  3. لإرسال سجل عبر الشبكة ، يمكن للقارئ والكاتب الموافقة على مخطط عند إنشاء الاتصال.


واحدة من المزايا الرئيسية لاستخدام تنسيق Avro هو دعم المخططات التي تم إنشاؤها ديناميكيًا. نظرًا لعدم إنشاء علامات مرقمة ، يمكنك استخدام نظام التحكم في الإصدار لتخزين إدخالات مختلفة مشفرة بمخططات مختلفة.



خاتمة



في هذه المقالة ، نظرنا في تنسيقات النص والترميز الثنائي ، وناقشنا كيف يمكن أن تشغل نفس البيانات 82 بايت بترميز JSON ، و 33 بايت ترميز مع المخازن المؤقتة Thrift و Protocol ، و 32 بايت فقط باستخدام ترميز Avro. تقدم التنسيقات الثنائية العديد من المزايا المتميزة عبر JSON عند نقل البيانات عبر الشبكة بين الخدمات الخلفية.



مصادر



لمعرفة المزيد حول تشفير وتصميم التطبيقات التي تتطلب بيانات مكثفة ، أوصي بشدة بقراءة Designing Data Intensive Applications بواسطة مارتن كليبمان.



صورة



تعرف على تفاصيل كيفية الحصول على مهنة رفيعة المستوى من الصفر أو المستوى الأعلى في المهارات والراتب من خلال الحصول على دورات SkillFactory المدفوعة عبر الإنترنت:






قراءة المزيد






All Articles