আমি PHP-তে JSON-এর পরিবর্তে একটি কাস্টম বাইনারি ফরম্যাট ব্যবহার করেছি
ওয়েব এবং মোবাইল অ্যাপের জন্য আমাদের রিচ টেক্সট (rich text) সংরক্ষণ করা প্রয়োজন।
বছরের পর বছর ধরে, আমরা আমাদের ডাটাবেসে বিশুদ্ধ HTML ব্যবহার করেছি। পরবর্তীতে, এডিটিং এবং প্রিন্টিং আলাদা করার জন্য আমরা JSON-এ চলে যাই।
ডাটা বাড়ার সাথে সাথে JSON একটি সমস্যা হয়ে দাঁড়ায়। একটি মাত্র লিঙ্ক পরিবর্তন করতে হলেও আমাদের পুরো অ্যারেটি (array) পার্স (parse), রিবিল্ড (rebuild) এবং স্ট্রিংফাই (stringify) করতে হতো। এই প্রক্রিয়াটি ছিল ধীরগতির এবং অদক্ষ।
আমি PHP ব্যবহার করে একটি কাস্টম বাইনারি ফরম্যাট তৈরি করার সিদ্ধান্ত নিই।
কেন আমি এই পরিবর্তনটি করেছি তার কারণগুলো নিচে দেওয়া হলো:
- গতি: পার্সিং এবং সার্চিং অনেক দ্রুত হয়ে গেছে।
- নিয়ন্ত্রণ: সবকিছু মেমরিতে লোড না করেই আমি নির্দিষ্ট বাইটগুলো ম্যানিপুলেট করতে পারি।
- গঠন: আমি একটি নেস্টেড ট্রি (nested tree) থেকে এলিমেন্টগুলোর একটি ফ্ল্যাট লিস্টে (flat list) চলে এসেছি।
বেশিরভাগ রিচ টেক্সট কাজের জন্য জটিল কোনো ট্রি-র প্রয়োজন হয় না। আপনার প্রায়ই শুধু টেক্সট বা নির্দিষ্ট ট্যাগ খুঁজে বের করার প্রয়োজন হয়। অফসেটগুলোর (offsets) একটি সাধারণ ট্রি-র সাথে এলিমেন্টগুলোর একটি ফ্ল্যাট স্ট্রাকচার আরও ভালো কাজ করে।
PHP কোনো লো-লেভেল ল্যাঙ্গুয়েজ নয়। এটি Zig বা C-এর মতো বাইট ম্যানিপুলেশনের জন্য অপ্টিমাইজ করা হয়নি। তবে, PHP-তে সঠিক টুলস রয়েছে:
pack()সংখ্যা বা স্ট্রিংকে র (raw) বাইটে রূপান্তরিত করে।unpack()সেই বাইটগুলোকে পুনরায় ব্যবহারযোগ্য ডাটাতে রূপান্তরিত করে।
আমি মাল্টিবাইট স্ট্রিং ফাংশন ব্যবহার করা বন্ধ করে দিয়েছি। পরিবর্তে, আমি বাইটের নির্দিষ্ট চাঙ্ক (chunks) পড়ি। উদাহরণস্বরূপ, একটি আনসাইনড (unsigned) 64-বিট ইন্টিজারের জন্য ঠিক ৮ বাইট প্রয়োজন।
১০,০০০ লুপের পরের ফলাফল:
পুরাতন JSON এনকোডিং: ২.১৮ সেকেন্ড পুরাতন JSON ডিকোডিং: ০.৮৬ সেকেন্ড নতুন বাইনারি এনকোডিং: ১.১৯ সেকেন্ড নতুন বাইনারি ডিকোডিং: ০.৬৭ সেকেন্ড
বাইনারি ফরম্যাটটি দ্রুততর। এটি আকারেও বড়। এটি JSON-এর তুলনায় ২ গুণ এবং HTML-এর তুলনায় ৩ গুণ বড়। যেহেতু আমরা সার্ভার-সাইড রেন্ডারিং (server-side rendering) ব্যবহার করি, তাই এটি আমাদের জন্য কোনো সমস্যা নয়।
আপনি যদি একটি কাস্টম ফরম্যাট তৈরি করেন, তবে একটি নিয়ম মেনে চলুন: একটি স্পেসিফিকেশন (specification) লিখুন। আপনার ফরম্যাটটি স্পষ্টভাবে ডকুমেন্ট করুন। তা না করলে আপনি পরে অনুশোচনা করবেন।
এটি করতে এক সপ্তাহ সময় লেগেছে। এটি সার্থক ছিল।
উৎস: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok