সহজে অ্যাপ্লিকেশন ইন্টারঅপারেবিলিটির জন্য বেশিরভাগ ডেটা সহজে-পঠনযোগ্য ফাইল ফর্ম্যাটে সংরক্ষণ করা হয়। ইমেজ, ভিডিও এবং সাউন্ড কম্প্রেশনের জন্য ব্যাপকভাবে ব্যবহৃত ফরম্যাট থাকলেও, বেশিরভাগ অন্যান্য ডেটা JSON, CSV বা অন্যান্য অনুরূপ টেক্সট-ভিত্তিক ফর্ম্যাট হিসাবে পাঠ্য হিসাবে সংরক্ষণ করা হয়।
Parquet, Avro, এবং ORC-এর মত ফরম্যাটে ঐচ্ছিক কম্প্রেশন থাকে, তাই সাধারণত, এই ফরম্যাটগুলো আগে থেকেই সংকুচিত হয়ে থাকে। ভিডিও এবং চিত্রগুলিও সাধারণত ডোমেন-নির্দিষ্ট অ্যালগরিদমগুলির সাথে সংকুচিত হয় যা জেনেরিক ফর্ম্যাটের চেয়ে ভাল কম্প্রেশন অফার করে।
যাইহোক, কাস্টম ডেটার জন্য, ডেটাকে একটি জটিল বিন্যাসে রাখা পছন্দনীয় যা অ্যাক্সেস করার জন্য একটি ডিকম্প্রেশন ধাপ অন্তর্ভুক্ত করে না। আমরা এই ডেটা ডিস্কে সংরক্ষণ করার আগে সংকুচিত করার একটি বিকল্প দিতে চাই।
সিস্টেমের সামগ্রিক কর্মক্ষমতা প্রভাবিত না করে স্বচ্ছ কম্প্রেশন সক্ষম করার জন্য MinIO-এর জন্য কম্প্রেশন তৈরি করা হয়েছে।
MinIO S2 নামক Snappy এর উপর ভিত্তি করে একটি কম্প্রেশন পদ্ধতি ব্যবহার করে। এটি Snappy বিষয়বস্তুর সাথে সামঞ্জস্যপূর্ণ, তবে দুটি ফর্ম্যাট এক্সটেনশন রয়েছে৷ প্রথমত, এটি স্ন্যাপি স্ট্রিমগুলির জন্য অনুমোদিত 64KB ব্লকের চেয়ে বড় ব্লকের অনুমতি দেয়। এটি ব্যাপকভাবে কম্প্রেশন উন্নত করে। দ্বিতীয়ত, এটি "পুনরাবৃত্তি অফসেট" যোগ করে, যা মূলত মেশিন-জেনারেটেড ডেটা, যেমন লগ ফাইল, JSON এবং CSV-এ কম্প্রেশন উন্নতি অফার করে। এটি 64 বাইট বাইটের চেয়ে দীর্ঘ ম্যাচগুলিকে কার্যকরভাবে এনকোড করার অনুমতি দেয়, যা স্ন্যাপির জন্য একটি ব্যথার বিষয়।
S2 একাধিক ব্লকের একযোগে সংকোচনের অনুমতি দেয় যখন ইনপুট একটি একক কোর শোষণ করতে পারে তার চেয়ে দ্রুত। পৃথক অনুরোধের প্রতিক্রিয়াশীলতা বজায় রাখার জন্য এটি গুরুত্বপূর্ণ। কার্যকরভাবে 16+ কোরের সীমাবদ্ধতা মেমরির গতি হবে।
কিছু যন্ত্রপাতি বিক্রেতা প্রতি টিবি খরচ গণনা করার সময় একটি প্রদত্ত কম্প্রেশন অনুপাতের প্রতিশ্রুতি দেবে, বা অনুমান করবে। কম্প্রেশনের সাথে, 1:1 এর উপরে কোন গ্যারান্টিযুক্ত অনুপাত নেই। বিভিন্ন ডেটা টাইপ বিভিন্ন কম্প্রেশন অনুপাত প্রদান করে এবং আমাদের মতে গড় কম্প্রেশন রেশিও প্রদান করার কোন অর্থপূর্ণ উপায় নেই। কম্প্রেশন অনুপাতকে কখনই ভ্যাকুয়ামে মূল্যায়ন করা উচিত নয় — এগুলি সর্বদা কম্প্রেশন গতির সাথে যুক্ত করা উচিত, যেহেতু ব্যবহারিক কম্প্রেশন এই দুটি কারণের একটি ট্রেডঅফ।
আসুন পার্থক্যগুলি পর্যবেক্ষণ করতে একটি একক ডেটা টাইপ তুলনা করি। আমরা 16 কোর পর্যন্ত ব্যবহার করে একটি AMD64 প্ল্যাটফর্মে এই অ্যালগরিদমগুলির Go বাস্তবায়নের তুলনা করি।
প্রথমত, অনুভূমিক অক্ষ হল একটি ছেঁটে যাওয়া সংকোচন অনুপাত, সংকুচিত আকার থেকে অর্জিত হ্রাস। অধিকারই ভালো। একটি রেফারেন্স দিতে, একক-থ্রেডেড জিজিপ স্তর 5 অন্তর্ভুক্ত করা হয়েছে।
কম্প্রেসার | গতি MB/s | আকার | হ্রাস | ডিসেম্বর MB/s |
---|---|---|---|---|
S2 ডিফল্ট | 15148 | 1043196283 | 83.37% | 2378 |
S2 আরও ভাল | 11551 | 954430842 | 84.79% | 2300 |
S2 সেরা | 680 | 832855431 | 86.73% | 2572 |
LZ4 দ্রুততম | 5645 | 1280414160 | 79.59% | 2680 |
LZ4 সেরা | 1552 | 1091826460 | 82.60% | 2694 |
চটপটি | 946 | 1525176492 | 75.69% | 1828 |
জিজিপ এল৫ | 206 | 942726276 | 84.97% | 557 |
ডিকম্প্রেশন গতি একটি একক কোর ব্যবহার করছে, যদিও S2 সমসাময়িক ডিকম্প্রেশন অফার করে।
এই ডেটার জন্য, Snappy Gzip রেফারেন্স থেকে প্রায় 10% কম পড়ে। যেহেতু আমরা হ্রাসের শতাংশ নিয়ে কাজ করছি, এর মানে এই যে Snappy Gzip সংকুচিত ডেটার প্রায় 1.6x জায়গা নেয়। এটি এই সত্যটিকে উপেক্ষা করে যে Snappy Gzip থেকে প্রায় 4x দ্রুত ডিকম্প্রেস করে।
LZ4 সাধারণত Snappy থেকে উচ্চতর হিসাবে দেখা হয়। LZ4 এর একটি বাস্তবায়ন যা একাধিক কোরে সংকোচনের অনুমতি দেয় এই বিষয়টিকে আরও পরিষ্কার করে। কিন্তু বেস কম্প্রেশন ভাল। LZ4 বেস্ট, যাকে কখনও কখনও LZ4-HC হিসাবেও উল্লেখ করা হয়, এটি জিজিপের কাছাকাছি কম্প্রেশন অফার করে, তবে ডিকম্প্রেশন দ্রুত হলেও কম্প্রেশনটি ইন্টারেক্টিভ গতিতে হয় না।
S2 তিনটি কম্প্রেশন স্তর অফার করে; S2 ডিফল্ট দ্রুততম সম্ভব, এবং একক মূল ব্যবহারের ক্ষেত্রে Snappy-এর সরাসরি প্রতিযোগী হিসাবে দেখা যেতে পারে। এই ডেটা টাইপের সাথে এটি উল্লেখযোগ্যভাবে উচ্চতর থ্রুপুট সহ যে কোনও LZ4 স্তরের চেয়ে ভাল পারফর্ম করে। এই মোডটি MinIO দ্বারা প্ল্যাটফর্মগুলির জন্য ব্যবহৃত হয় যেখানে একটি সমাবেশ বাস্তবায়ন উপলব্ধ নয়।
S2 বেটার উচ্চতর কম্প্রেশনের জন্য কিছুটা CPU ট্রেড করার অনুমতি দেয়। এখানে কম্প্রেশন Gzip এর প্রতিদ্বন্দ্বী, কিন্তু ডিকম্প্রেশন গতি অনেক ভালো। এই মোডটি MinIO দ্বারা প্ল্যাটফর্মগুলিতে ব্যবহৃত হয় যেখানে সমাবেশ উপলব্ধ — বর্তমানে AMD64।
S2 সেরা হল সেরা কম্প্রেশন S2 বর্তমান বিন্যাসের সাথে করতে পারে। এটি এমন পরিস্থিতিতে ব্যবহার করা যেতে পারে যেখানে কম্প্রেশন গতি/সম্পদ সবচেয়ে গুরুত্বপূর্ণ নয়, তবে দ্রুত ডিকম্প্রেশন এখনও প্রয়োজন। বর্তমানে MinIO এই মোডটি ব্যবহার করে না, কিন্তু কিছু সময়ের মধ্যে পরিবর্তিত না হওয়া বস্তুগুলির জন্য একটি জীবনচক্র বিকল্প হিসাবে এটি প্রয়োগ করতে পারে।
তুলনা করার জন্য, এখানে অন্যান্য ডেটা প্রকারের কয়েকটি তুলনা রয়েছে:
আধুনিক কম্প্রেশনের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল এটি প্রাক-সংকুচিত ডেটার সাথে ভাল আচরণ করে। ঐতিহ্যগতভাবে প্রাক-সংকুচিত ডেটা কম্প্রেশন অ্যালগরিদমের জন্য একটি সমস্যা হয়েছে। প্রায়শই সংকোচকারী অযৌক্তিকভাবে ধীর হয়ে যায় যখন অসংকোচযোগ্য ডেটার মুখোমুখি হয়।
অনেক লোক তাই সহজাতভাবে জানে যে ইতিমধ্যে সংকুচিত ডেটা পুনরায় সংকুচিত করা খারাপ। যাইহোক, অনেক আধুনিক বাস্তবায়ন এখন অসংকোচযোগ্য বিভাগগুলি দ্রুত এড়িয়ে যেতে যুক্তিসঙ্গত ডিগ্রিতে সক্ষম।
উপরের কম্প্রেসারগুলির জন্য, এইগুলি হল 2GiB (2,147,483,647 বাইট) অসংকোচনীয় ডেটার গতি:
কম্প্রেসার | গতি MB/s | আকার | হ্রাস |
---|---|---|---|
S2 ডিফল্ট | 13045 | 2147487753 | 0.00% |
S2 আরও ভাল | 9894 | 2147487753 | 0.00% |
S2 সেরা | 3938 | 2147487753 | 0.00% |
LZ4 দ্রুত | 6400 | 2147485710 | 0.00% |
LZ4 সেরা | 12488 | 2147745841 | -0.01% |
চটপটি | 6564 | 2147745801 | -0.01% |
Gzip (Go) L5 | 63 | 2148139030 | -0.03% |
Gzip (alt) L5 | 5535 | 2147647512 | -0.01% |
এখানে আমরা এই "খারাপ" আচরণের প্রতিনিধি হিসাবে Go স্ট্যান্ডার্ড লাইব্রেরি থেকে gzip অন্তর্ভুক্ত করেছি। একটি বিকল্প gzip বাস্তবায়ন এই সমস্যা দেখায় না। অন্যান্য সমস্ত ক্ষেত্রে বিষয়বস্তু বেশ দ্রুত প্রক্রিয়া করা হয় এবং তারা একটি পাস পায়।
এর মানে হল যে MinIO প্রাক-সংকুচিত ডেটা ভালভাবে পরিচালনা করবে বলে আশা করা যেতে পারে।
কম্প্রেশনের একটি সাধারণ খারাপ দিক হল যে একটি ফাইলের মধ্যে এড়িয়ে যাওয়ার ক্ষমতা হারিয়ে গেছে। এর সমাধান হল ব্লকগুলিকে স্বাধীনভাবে সংকুচিত করা এবং একটি সূচী রাখা যা সংকুচিত অফসেটে অনেকগুলি অসংকুচিত অফসেটকে ম্যাপ করে যেখানে ডিকম্প্রেশন শুরু হতে পারে।
স্বাধীন ব্লক কম্প্রেস করলে কম্প্রেশন কিছুটা কম হবে, কিন্তু বড় ব্লকের সাথে কম। Snappy/S2 ডিজাইন দ্বারা স্বাধীন ব্লক হিসাবে স্ট্রীম কম্প্রেস করে।
MinIO-এর জন্য এটি প্রাসঙ্গিক কারণ S3 GetObject অনুরোধগুলি পুনরুদ্ধার করার জন্য ঐচ্ছিক ব্যাপ্তি অন্তর্ভুক্ত করতে পারে। এটি বস্তুর অংশগুলি পুনরুদ্ধার করার অনুমতি দেয় এবং আমরা এটি যতটা সম্ভব কার্যকর করতে চাই।
RELEASE.2022-07-13T23-29-44Z থেকে শুরু করে আমরা এখন আপলোড করা প্রতিটি ফাইল অংশের জন্য একটি সূচক তৈরি করি যা 8MB-এর থেকে বড়৷ তারপর সূচকটি মেটাডেটার সাথে অভ্যন্তরীণভাবে সংযুক্ত করা হয়। এটি আমাদের কার্যকরভাবে এগিয়ে যাওয়ার অনুমতি দেয় এবং অনুরোধ করা ডেটা ফেরত দেওয়ার জন্য প্রয়োজনীয় বস্তুর অংশটিকে ডিকোড করতে দেয়।
সূচকটি সাধারণত 16 বাইট + প্রায় 3 বাইট প্রতি এমবি ডেটা। এটি MinIO-কে প্রথম বাইট পুনরুদ্ধারের মতো একই গতিতে একটি সংকুচিত ফাইলের মধ্যে থেকে যেকোনো বাইট পরিবেশন করতে দেয়।
ডিস্কে এনক্রিপ্ট করা ডেটা সংকুচিত করার জন্য MinIO-এর জন্য ডিফল্টভাবে একটি অতিরিক্ত প্যারামিটার প্রয়োজন। এটি নিশ্চিত করার জন্য যে আপনি এর প্রভাব সম্পর্কে সচেতন।
ডেটা সংকুচিত করার সময় আপনি দুটি সংখ্যা পাবেন; সংকুচিত এবং সংকুচিত আকার। সংকোচন ছাড়াই যে কেউ আপনার ডেটা প্রাপ্ত করে শুধুমাত্র এইগুলির মধ্যে একটি দেখতে পাবে - অসঙ্কোচিত আকার।
যদিও এটি এখনও আপনাকে সংকুচিত ফাইলের মধ্যে কোনও ডেটাতে অ্যাক্সেস দেয় না, এটি ডেটাতে কিছু ইঙ্গিত দেয়। এটি আপনাকে কিছু ধরণের ডেটা বলতে পারে যা এটি হতে পারে না। আপনি যদি এমন একটি ফাইল দেখেন যা 50% দ্বারা সংকুচিত হয় তবে এতে MP4 সংকুচিত ভিডিও থাকার সম্ভাবনা খুব কম।
একইভাবে, শুধুমাত্র কয়েকটি বাইটে সংকুচিত একটি ফাইল সম্ভবত একটি খুব সাধারণ পুনরাবৃত্তি ক্রম ধারণ করবে। ক্রমটি কী তা বলা সম্ভব নয়, তবে এটি সম্ভাবনাগুলি হ্রাস করে। RELEASE.2022-07-13T23-29-44Z থেকে MinIO 256 বাইটের একাধিক কম্প্রেসড আউটপুট প্যাড করবে। এই প্যাডিং কোথাও রেকর্ড করা হয় না. আমরা এটিকে সমস্যার সম্পূর্ণ সমাধান হিসাবে বিবেচনা করি না, তবে এটি প্রতিপক্ষের কাছে ফাঁস হওয়া আকারের তথ্যের উপযোগিতাকে ব্যাপকভাবে হ্রাস করে।
এই প্রধান কারণ MinIO ক্লায়েন্টদের সংকুচিত আকার সম্পর্কে কোনো তথ্য ফেরত দেয় না। তাই এই সম্পর্কে যেকোন তথ্যের প্রয়োজন হবে ব্যাকএন্ড স্টোরেজ বা ব্যাকএন্ড নেটওয়ার্ক যোগাযোগে অ্যাক্সেস।
এই তথ্যের সাহায্যে আপনি এখন কম্প্রেশন এবং এনক্রিপশন সক্ষম করা নিরাপদ মনে করেন কিনা তা নির্ধারণ করার জন্য যথেষ্ট জ্ঞান দিয়ে সজ্জিত।
MinIO-তে CRIME- স্টাইল আক্রমণ সম্ভব নয়, যেহেতু আমরা কোনো সংকুচিত স্ট্রীমে পরিবর্তন বা সংযুক্ত করার অনুমতি দিই না। আমরা অবজেক্ট সংস্করণ জুড়ে অনুলিপি/সংকুচিত করি না কারণ এটি ফাইল সম্পর্কে খুব বেশি তথ্য ফাঁস করবে।
ডিফল্টরূপে, MinIO-তে অন-ডিস্ক কম্প্রেশন অক্ষম করা হয়। অন-ডিস্ক কম্প্রেশন যে কোনো সময় সক্ষম বা নিষ্ক্রিয় করা যেতে পারে। অন-ডিস্ক কম্প্রেশন সক্ষম করতে mc admin config set myminio compression enable=on
ব্যবহার করুন।
এটি একটি প্রিসেট নম্বর এক্সটেনশন এবং MIME প্রকারের জন্য কম্প্রেশন সক্ষম করবে৷ ডিফল্টরূপে এর মধ্যে অন্তর্ভুক্ত থাকবে:
এক্সটেনশন | মাইম প্রকার |
---|---|
.txt.log.csv.json.tar.xml.bin | text/*application/jsonapplication/xmlbinary/octet-stream |
আপনি mc admin config get myminio compression
।
আপনি যে কোনো সময় এই তালিকাটি পরিবর্তন করে পরিবর্তন করতে পারেন:
mc admin config set myminio compression \ extensions=.txt,.log,.csv,.json,.tar,.xml,.bin \ mime_types=text/*,application/json,application/xml,binary/octet-stream
ডিফল্টরূপে MinIO জোরপূর্বক সাধারণভাবে সংকোচযোগ্য ডেটার এক্সটেনশনগুলিকে বাদ দেয়, যেমন gzip, অডিও, ভিডিও, চিত্র ফাইল।
এক্সটেনশন তালিকা এবং মাইম প্রকারগুলিকে খালি করে সেট করে বাদ দেওয়া ব্যতীত সমস্ত বস্তুর জন্য কম্প্রেশন সক্ষম করা সম্ভব:
mc admin config set myminio compression enable=on extensions= mime_types=
চূড়ান্ত সেটিং হল allow_encryption=on
, যা এনক্রিপ্ট করা বস্তুর জন্যও কম্প্রেশনের অনুমতি দেয়। আপনি উপরের বিভাগটি পড়লে এবং এর প্রভাব বুঝতে পারলেই এটি সেট করুন।
MinIO সর্বোত্তম-শ্রেণীর কম্প্রেশন স্কিম অফার করে যা ডিস্কে ডেটার সম্পূর্ণ স্বচ্ছ সংকোচনের অনুমতি দেয়। এটি অনেক পরিস্থিতিতে শুধুমাত্র সংকোচন সক্ষম করে স্টোরেজ খরচ হ্রাস করতে পারে।
GET এবং PUT কর্মক্ষমতা সব ক্ষেত্রে একই কাছাকাছি থাকা উচিত যখন কম্প্রেশন সক্ষম করা হয়। প্রকৃতপক্ষে, এমন পরিস্থিতিতে যেখানে কর্মক্ষমতা ডিস্ক পড়ার গতি দ্বারা সীমিত, কম ডেটা পড়ার কারণে কম্প্রেশন অতিরিক্ত কর্মক্ষমতা দিতে পারে।
আমরা নতুন ফিচার যোগ করতে থাকব। আমরা বর্তমানে বালতি/প্রিফিক্স স্তরের কনফিগারেশন বিকল্পগুলির পাশাপাশি কম্প্রেশন-ভায়-লাইফসাইকেল মূল্যায়ন করছি যা ফাইলগুলি একটি নির্দিষ্ট বয়সে পৌঁছানোর সাথে সাথে সংকুচিত করবে।
আপনি যদি এই বৈশিষ্ট্যগুলিতে আগ্রহী হন, d MinIO লোড করুন এবং নিজের জন্য এটি চেষ্টা করুন। যদি আপনার কোন প্রশ্ন থাকে বা আপনি MinIO ব্যবহার করে যে দুর্দান্ত অ্যাপস তৈরি করছেন সে সম্পর্কে আমাদের বলতে চান, আমাদেরকে [email protected] এ পিং করুন, স্ল্যাক সম্প্রদায়ে যোগ দিন, আমাদের ব্লগ অনুসরণ করুন বা আমাদের নিউজলেটারে সদস্যতা নিন।
এছাড়াও এখানে প্রকাশিত.