অনেক অনুরূপ বড় ফাইলগুলি সংক্ষেপণ


18

আমার সংকোচনের জন্য শত শত অনুরূপ বড় ফাইল (প্রতিটি 30 মেগাবাইট) রয়েছে। প্রতিটি জোড়া ফাইলের 99% একই ডেটা থাকে (তারপরে 1% পার্থক্য কম) তবে আমি আশা করি 40-50 মেগাবাইট আর্কাইভের বেশি হবে না।

একক ফাইল 13-15 মেগাবাইট করে 30 মেগাবাইট থেকে সংকুচিত করা যেতে পারে (সঙ্গে xz -1, gz -1, bzip2 -1), কিন্তু যখন দুই বা ততোধিক ফাইল সংকুচিতকারী আমি আকার সঙ্গে সংরক্ষণাগার করতে চান 13-15MB + N*0.3MBযেখানে n ফাইলের সংখ্যা।

যখন ব্যবহার tar(ঘন পদার্থ সংরক্ষণাগার তৈরি) এবং xz -6(- কম্প্রেশন অভিধান বড় বেশি ফাইল হতে নির্ধারণ করতে আপডেট -! এই যথেষ্ট ছিল না ), আমি এখনও আকার সঙ্গে সংরক্ষণাগার N*13MB

আমি মনে করি যে gzipএবং উভয়ই bzip2আমাকে সাহায্য করবে না কারণ তাদের অভিধান 1 এমবি এরও কম এবং আমার টার স্ট্রিমের প্রতি 30 এমবিতে পুনরাবৃত্তি রয়েছে।

আমি কীভাবে মানক সরঞ্জামগুলি ব্যবহার করে আধুনিক লিনাক্সে আমার সমস্যাটি সংরক্ষণাগারভুক্ত করতে পারি?

xzদ্রুত সংকোচনের জন্য টিউন করা সম্ভব , তবে 30-60 এমবি এর চেয়ে বড় অভিধানটি ব্যবহার করুন?

আপডেট : সাথে কৌতুক করেছেন tar c input_directory | xz --lzma2=dict=128M,mode=fast,mf=hc4 --memory=2G > compressed.tar.xz। প্রয়োজনীয় mf=hc4এবং --memory=2Gবিকল্পগুলি সম্পর্কে নিশ্চিত নন ; তবে dict=128Mঅভিধানটি যথেষ্ট বড় হতে হবে (এক ফাইলের চেয়ে বড়), এবং mode=fastপ্রক্রিয়াটির চেয়ে কিছুটা দ্রুত করুন -e


রানিং xz -1 --memory=2Gকোনও উপকারে আসেনি, সেটটি থেকে 2 এবং 4 টি ফাইল পরীক্ষিত হয়েছিল।
ওসজিএক্স

উত্তর:


12

আপনার বিবরণ দেওয়া, আমি ধরে নিলাম যে আপনি যাচাই করেছেন যে আপনার ফাইলগুলিতে সত্যিকারের 99% ডেটা অভিন্ন রয়েছে, যার মধ্যে একটি অবিচ্ছিন্ন (বা প্রায় স্বতন্ত্র) 1% পার্থক্য রয়েছে।

প্রথমে, আপনার ভিতরে থাকা ফাইলগুলি দিয়ে একটি সংরক্ষণাগার তৈরি করতে আপনার ব্যবহার করা উচিত। পরীক্ষাগুলির জন্য, আমি 10 টি ফাইল দিয়ে একটি .tar তৈরি করব, তাই 300MB আকারের।

তারপরে, xz ব্যবহার করে, আপনাকে এটি সেট করতে হবে যাতে অভিধানটি একটি ফাইলের আকারের চেয়ে বড় হয়। যেহেতু আপনার মেমরির বিধিনিষেধ আছে কিনা আপনি বলবেন না, তাই আমি xz -9 নিয়ে যাব। সমস্ত উপলব্ধ মেমরি ব্যবহার না করার কোনও মানে নেই।

আমি --extreme প্রিসেটটিও ব্যবহার করব, এটির কোনও পার্থক্য রয়েছে কিনা তা পরীক্ষা করতে।

অভিধান আকার

একটি ডকুমেন্টেশনে যা আমার কাছে পাওয়া যায় - সাইট - এটি বলা হয় যে অভিধানের আকারটি প্রায় ডেকম্প্রেসর মেমরির ব্যবহারের সমান। এবং -1 পরামিতিটির অর্থ 1MiB এর ডিক্ট, -6 এর অর্থ 10 মাইবি (বা একই ম্যানুয়ালটির অন্য অংশে 8 মাইবি)। এজন্য আপনি এই ফাইলগুলি একসাথে রেখে কোনও সুবিধা পাচ্ছেন না। -9 ব্যবহারের ফলে সংক্রামক হবে (এবং, অভিধান) Mi৪ মাইবি, এবং আমার মনে হয় আপনি এটি চেয়েছিলেন।

সম্পাদন করা

আরেকটি সম্ভাবনা অন্য একটি সংক্ষেপক ব্যবহার করা হবে। আমি 7 জিপ নিয়ে যাব, তবে প্রথমে এই ফাইলগুলি ট্যারি করব এবং তারপরে সেগুলি 7zip করে দেব।

আপনার ফাইলগুলির সামগ্রীর উপর নির্ভর করে, আপনি পিপিএম-ডি পদ্ধতিতে 7zip ব্যবহার করতে পারেন (এলজেডএমএ বা এলজেডএমএ 2 এর পরিবর্তে, এটি ডিফল্ট এবং xz দ্বারা ব্যবহৃত একই)

ভাল নয়: জিপ (ডিক্ট = 32 কেবি), বিজিপ (ডিক = 900 কেবি)।


এক্সজেড এবং 7-জিপ উভয়ই এলজেডএমএ 2 ব্যবহার করে যাতে সেখানে কোনও লাভ হয় না। পিপিএমডি ইতিমধ্যে সংক্ষেপিত মিডিয়া (যেমন এমপি 3 এবং ভিডিও) থেকে অত্যন্ত ধীর অথচ উচ্চ সংক্ষেপণ হার এন্ট্রপি নিষ্কাশনের জন্য অনুকূলিত হয়েছে ized দুটি ফাইলের মধ্যে বৃহত্তর মিল খুঁজে পাওয়া এবং এটি অভিধানে সংরক্ষণ করার সম্ভাবনা নেই - এলজেডএমএ 2 এর চেয়ে বেশি সম্ভাবনা নেই।
অলকুইসোটিক

উলিভিরাজ, না -1বা -9প্রিসেট ব্যবহার না করে তবে নির্দিষ্ট dict=64MBবা dict=128MBসেট করুন mode=fast?
osgx

-১ বা -9 এর পরিবর্তে ডিক্ট = এক্সএক্সএমবি ব্যবহার করা সরাসরি পয়েন্টে যেতে পারে, তবে যেহেতু আমি জানি না যে আপনি যখন -9 ব্যবহার করবেন তখন এক্স জেড কীভাবে অন্যান্য পরামিতিগুলি সেট করে তা আমি জানি না আপনি কিছু মিস করবেন না কিনা অন্য। আমি মনে করি আপনি সঠিক পথে আছেন এবং কেবল পরীক্ষা আপনাকে সুনির্দিষ্ট উত্তর দেবে।
উওলিভিরাজ

3
সঙ্গে xz --lzma2=dict=128M,mode=fast,mf=hc4 --memory=2Gআমি 18 মেগাবাইট tar.xz সংরক্ষণাগার 250 ফাইল (7.5 GB) এর কম্প্রেস করতে সক্ষম হন।
osgx

@osgx :) এটি বেশ সুন্দর। যদি এটি খুব বেশি সময় না নেয় (যেমন, এটি আপনার প্রয়োজনের মধ্যে), সমস্যা সমাধান হয়ে যায়! :) সুতরাং আপনি ফাইনাল সাইজ = 13 এমবি + এক্স * 6 কেবি, কম বা কম পেয়েছেন।
উলিভিরাজ

9

যদি আপনি যা বলেন সেগুলি যদি সত্যই 99% একই হয় তবে আপনি ফাইলগুলির মধ্যে পার্থক্য গণনা করার জন্য বিএসডিফ বা একটি অনুরূপ অ্যালগরিদম ব্যবহার করতে সক্ষম হবেন । পার্থক্যটি কি संचयी (অর্থাত, প্রতিটি ফাইল প্রথম থেকে কিছুটা আলাদা হয়), বা কোনও দুটি ফাইলের মধ্যে পার্থক্য কি অনেকটা একই?

যদি এটি সংশ্লেষিত না হয় তবে আপনার এটি করতে সক্ষম হওয়া উচিত:

  • "বেসলাইন" হিসাবে যেকোন যথেচ্ছ ফাইল নিন
  • bsdiffপ্রতিটি অতিরিক্ত ফাইলের সাথে বেসলাইন ফাইলের তুলনা চালান
  • বেসলাইন ফাইলের পাশাপাশি প্রতিটি পৃথক পৃথক ফাইল হিসাবে সংরক্ষণ করুন
  • xzফলাফলগুলি জুড়ে একটি কম্প্রেসার চালান (বেসলাইন + পার্থক্য)।

ফলাফলটি xzপুরো আর্কাইভটি যুক্ত করার চেয়ে অনেক ছোট হওয়া উচিত ।

তারপরে আপনি অন্যান্য ফাইলগুলির প্রতিটি খুঁজে পেতে বেসলাইনের উপরে পৃথক "প্রয়োগ" করে মূল ফাইলগুলি "পুনর্গঠন" করতে পারেন।


संचयी নয়। ("প্রতিটি জোড়ের ফাইলের 99% একই ডেটা থাকে ...")
ওএসজিএক্স

1
পার্থক্যগুলি যদি संचयी না হয় তবে এটি bsdiffআলগোরিদিমের একটি ভাল প্রয়োগ হওয়া উচিত । একবার চেষ্টা করে দেখো.
অ্যালকুইসোটিক

আপনার উত্তরের জন্য আপনাকে ধন্যবাদ, তবে আমি ইতিমধ্যে xz: tar c directory|xz --lzma2=dict=128M,mode=fastএবং মুছে ফেলা ইনপুট ফাইলগুলি দিয়ে কাজটি করেছি । আসলে আমার ইনপুট ফাইলগুলি পাঠ্য ছিল, তাই আমি এমনকি পরিবর্তে bsdiff(যা আমার পিসিতে ইনস্টল করা হয় না) ব্যবহার করতে পারি।
osgx

5

আপনি (আই) লম্বা-পরিসরের প্যাটার্ন সনাক্তকরণে সক্ষম এমন কিছু আরকিভারের সাথে টার ব্যবহার করতে পারেন, উদাহরণস্বরূপ, rzip বা lrzip ( Readme )। উভয়ই দীর্ঘ-পরিসরের রিডানডেন্সি সনাক্তকরণ / প্রতিলিপি ব্যবহার করে, তারপরে rzip bzip2 ব্যবহার করে এবং lrzip xz (lzma) / ZPAQ ব্যবহার করে:

জিজেপ বা বিজিপ ২ এর মতো কার্যকারিতার অনুরূপ rzip একটি সংক্ষেপণ প্রোগ্রাম, তবে ফাইলগুলিতে দীর্ঘ দূরত্বের অপ্রয়োজনীয় সুযোগগুলি নিতে সক্ষম, যা কখনও কখনও আরজিপকে অন্যান্য প্রোগ্রামের তুলনায় আরও ভাল সংকোচনের অনুপাত উত্পাদন করতে দেয়। ... rzip এর প্রধান সুবিধাটি হ'ল এটির কার্যকরী ইতিহাসের বাফার 900 Mbyte রয়েছে। এর অর্থ এটি অন্যান্য ব্যবহৃত সংক্ষেপণের প্রোগ্রামগুলির তুলনায় বিশাল দূরত্বে ইনপুট ফাইলের টুকরো মিলে যায়। গিজিপ প্রোগ্রামটি তুলনা করে 32 কেবিটির হিস্ট্রি বাফার ব্যবহার করে এবং বিজিপ 2 900 কেবিটি-র ইতিহাসের বাফার ব্যবহার করে

lrzip এর বৃহত্তর বাফার থাকে এবং অনেকগুলি সংক্ষেপণ অ্যালগরিদম (খুব দ্রুত, দ্রুত, ভাল, এবং সেরাগুলির মধ্যে একটি - জেডপিএকিউ) ছাড়ের পরে ব্যবহার করতে পারে:

Lrzip rzip এর বর্ধিত সংস্করণ ব্যবহার করে যা প্রথম পাসের দূরত্বের রিডানডেন্সি হ্রাস করতে পারে। Lrzip পরিবর্তনগুলি এটিকে মেমরির আকার অনুযায়ী স্কেল করে।

ডেটাগুলি এরপরে হয়: 1. lzma (ডিফল্ট) দ্বারা সংকুচিত যা bzip2 সংক্ষেপণের গতিবেগের দ্বিগুণে দুর্দান্ত সংকোচন দেয় ...

অন্য উপায়ে গিট প্যাকফিলের উপর ভিত্তি করে ব্লক- / সেগমেন্ট-স্তরের অনুদানের সাথে বুপ - ব্যাকআপ প্রোগ্রাম ব্যবহার করা হচ্ছে :

বড় ফাইলগুলিকে খণ্ডগুলিতে বিভক্ত করতে এটি একটি রোলিং চেকসাম অ্যালগরিদম (rsync এর অনুরূপ) ব্যবহার করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.