বিশাল আকারের ফাইলগুলির জন্য 'বাছাই -u' এর স্কেলেবিলিটি


23

'সাজানোর -u' এর যুক্তিসঙ্গত স্কেলাবিলিটি সীমাটি কী? ("লাইনের দৈর্ঘ্য", "লাইনের পরিমাণ", "মোট ফাইলের আকার"?)

"লাইনের পরিমাণ" এর মাত্রা ছাড়িয়ে ফাইলগুলির জন্য ইউনিক্স বিকল্প কী? (অবশ্যই আমি সহজেই এটি প্রয়োগ করতে পারি তবে আমি ভাবলাম কিছু সাধারণ লিনাক্স কমান্ড দিয়ে কিছু করা যায় কিনা?)


: ঐ যে এটা বাইনারি অনুসন্ধান করতে চান বা জানেন কিভাবে পারে জন্য unix.stackexchange.com/q/247508/9689
Grzegorz Wierzowiecki

2
এমন পরিস্থিতিতে আছে যেখানে সাহায্যের uniqআগে এক sort -u। বিটিডাব্লু, এএসসিআইআই ডেটার জন্য LC_ALL=C sortsort
জিএনইউকে

উত্তর:


39

sortআপনি লিনাক্স যে থেকে আসে coreutils প্যাকেজ এবং কার্যকরী একটি এক্সটার্নাল আর-ওয়ে একত্রীকরণ । এটি তথ্যগুলিকে খণ্ডগুলিতে ভাগ করে দেয় যা এটি স্মৃতিতে পরিচালনা করতে পারে, এগুলি ডিস্কে সঞ্চয় করে এবং তারপরে সেগুলিকে মার্জ করে। খণ্ডগুলি সমান্তরালভাবে করা হয়, যদি মেশিনটির জন্য প্রসেসর থাকে।

সুতরাং যদি কোনও সীমা থাকতে হয়, তবে এটি ফ্রি ডিস্ক স্পেস যা sortফলাফলের সাথে মিলিত করে অস্থায়ী ফাইলগুলি একত্রীকরণের জন্য সংরক্ষণ করতে ব্যবহার করতে পারে।


3
নোট করুন যে GNU বাছাই সেই টেম্প ফাইলগুলিকে আরও বেশি প্যাক করতে (এবং ধীর ডিস্কের সাহায্যে পারফরম্যান্স বাড়িয়ে তুলতে পারে) comp
স্টাফেন চেজেলাস

1
@ স্টাফেনচেজেলা আপডেটের জন্য ধন্যবাদ। আমি নিজেকে ভাবছিলাম যে কোনও স্থান পুরোপুরি একীভূত হয়ে যাওয়ার পরে (যদি উত্সটি ইতিমধ্যে আংশিকভাবে সাজানো থাকে তবে সহজেই ঘটতে পারে) স্থান অপ্টিমাইজেশন হিসাবে শঙ্কিত ফাইলগুলি মুছে ফেলার জন্য যথেষ্ট স্মার্ট কিনা। আমি আজকাল উত্স কোডটিতে ডুব দেওয়ার সময় পাইনি :-(
অ্যান্থন

3
স্মৃতি ছাড়াও আরও একটি সীমা রয়েছে যা মার্জ পর্বে প্রযোজ্য: একই সাথে খোলা যেতে পারে এমন ফাইলগুলির সংখ্যা। এটি সাধারণত অপারেটিং সিস্টেম দ্বারা আরোপিত একটি সীমা। জিএনইউ সেই সাথে কপিগুলিকেও বাছাই করে, পুনরাবৃত্তভাবে এক সাথে খোলার পুরানো ফাইলগুলির সংখ্যা সংশ্লেষ করে!
ডায়োমিডিস স্পিনেলিস 14

@ স্টাফেনচাজেলাস যদি আমি খুব বড় ফাইলগুলি বাছাই করার জন্য বিশেষত কোনও সরঞ্জাম ডিজাইন করতাম তবে আমি লাইনগুলি মূল ফাইলটিতে সূচি হিসাবে সংরক্ষণ করতাম। জিএনইউ বাছাই এটি করে না, বা এটি কেবল একটি প্রচলিত সংক্ষেপণ অ্যালগরিদম ব্যবহার করে?
র্যান্ডম 832

3
@ র্যান্ডম 832 এবং এর অর্থ ফাইলটি নিজের উপর (ও sort -o file file) ওভাররাইট করতে সক্ষম হবে
স্টাফেন চেজেলাস

1

আমি বিক্রেতার নির্দিষ্ট প্রয়োগের জন্য কথা বলতে পারি না, তবে UNIX sortবাস্তবায়ন বড় ফাইলগুলিকে ছোট ফাইলগুলিতে বিভক্ত করে, এই ফাইলগুলি বাছাই করে এবং এর পরে বাছাই করা ছোট ফাইলগুলিকে একত্রিত বাছাই করা আউটপুটে সংযুক্ত করে।

মধ্যবর্তী সময়ে তৈরি করা ছোট ফাইলগুলির জন্য কেবলমাত্র সীমাবদ্ধতা হ'ল sortতবে পরিবেশ পরিবর্তনশীল সেট করে ফাইলগুলি একটি স্বেচ্ছাসেবী ডিরেক্টরিতে পুনঃনির্দেশ করা যায় TMPDIR


3
আপনি কী ইউনিক্স বাছাই বাস্তবায়ন কল ? এটি কি ইউনিক্স সংস্করণ 3 থেকে আসল? সেখানকার ম্যান পেজটি জানায় যে এটি 128KiB এর চেয়ে বড় ফাইলগুলি বাছাই করতে পারে না।
স্টাফেন শেজেলাস

ইউনিক্স সংস্করণ 3 দ্বারা আপনি কী বোঝেন? সংস্করণ 1973 থেকে? আসল ইউএনআইএক্স সাজানোর বাস্তবায়ন বছরের পর বছর ধরে উন্নত করা হয়েছে এবং আইআইআরসি, সোলারিস সংস্করণটি আরও বেশি দ্রুত জিনু সংস্করণে রয়েছে। অবশ্যই, 25 বছর পূর্বে মাল্ট-বাইট চরিত্রগুলি বোঝার জন্য বাছাই করা উন্নত হয়েছিল এবং আমি ইউএসএনইটি আলোচনা থেকে যা মনে করি তা হ'ল এটি সোলারিসের উপর দক্ষতার সাথে করা হয়েছে। বিটিডাব্লু: বৃহত ফাইল সচেতন হিসাবে man largefileতালিকাবদ্ধ করে sort
ধীরে ধীরে

2
তাহলে আপনি কি আসলে ওরাকল বিক্রেতার নির্দিষ্ট সংস্করণের কথা বলছেন sort? বা এটিএন্ডটি ইউনিক্স বাছাইয়ের কোনও সংস্করণের কোনও ডেরাইভেটিভ? অথবা এর কোনও ইউনিক্স শংসিত সংস্করণ sort( sortওএস / এক্সে জিএনইউর মতো )?
স্টাফেন চেজেলাস

sortবহু-বাইট চরগুলির সাথে আধুনিক বাস্তবায়নের মানটি পরিবর্তিত হতে পারে, sortস্প্লিট ইন্টারমিডিয়েট ফাইলগুলি ব্যবহার করে এমন ঘটনাটি মূল কোডের উপর ভিত্তি করে সমস্ত ইউএনআইএক্স বাস্তবায়নের ক্ষেত্রে সাধারণ। BTW: সোলারিস সংস্করণ OSS "OpenSolaris" হিসাবে, দেখতে sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/...
schily

25 বছর আগে, ইউটিএফ -8 এখনও আবিষ্কার হয়নি? ইউটিএফ -8 লোকেলের জন্য সমর্থন সোলারিস 7 ( 1 , 2 ) এ যুক্ত করা হয়েছিল। আপনি কি অন্য কিছু মাল্টিবাইট চরিত্র সেট উল্লেখ করছেন?
স্টাফেন চেজেলাস

1

Https://blog.mafr.de/2010/05/23/sorting-large-files/ এবং /unix//a/88704/9689 এর উপর ভিত্তি করে :

split -n l/20 input input-
for inpf in input-* ; do
    sort --parallel="$(nproc --all)" "${inpf}" > sorted-"{$inpf}"
done
sort -m sorted-input-* > sorted-input

হালনাগাদ:

থেকে আমরা উপরে উত্তর দেখতে sortঅর্থাত - ইতিমধ্যে কি স্নিপেট উল্লেখ করে বাহ্যিক আর-ওয়ে একত্রীকরণ । সুতরাং সব চলমান পরে:

sort --parallel="$(nproc --all)" -u input > output

পর্যাপ্ত হতে হবে।

সীমা সম্পর্কে আমার বর্তমান অনুমানগুলি (কোড পরীক্ষা না করে) হ'ল:

  • সর্বোচ্চ লাইনের দৈর্ঘ্য দৈহিক মেমরির পরিমাণ দ্বারা সীমাবদ্ধ। বাছাই করতে কমপক্ষে দুটি মেমরির মধ্যে ফিট করতে হবে
  • লাইনের পরিমাণ - আমি অবগত নই
  • ফাইল আকার - অবশ্যই ফাইল সিস্টেম দ্বারা
  • সমান্তরালভাবে খোলা ফাইলের পরিমাণ - অপারেটিং সিস্টেমের উপর নির্ভর করে (এটি নির্দেশ করার জন্য ধন্যবাদ ডায়োমিডিস স্পিনেলিস !)

(এই উত্তরটিকে সম্প্রদায় উইকি হিসাবে চিহ্নিত করা হয়েছে - এটি উন্নত করতে উত্সাহিত বোধ করুন! :))


2
জিএনইউ sortডিফল্টরূপে সমান্তরালভাবে সাজান (যে পৃষ্ঠাটির সাথে আপনি সংযোগ করছেন তার 2010 এর পরে), সর্বোত্তমটি নির্ধারণ করার --parallelপরিবর্তে সমবর্তী থ্রেডগুলির সংখ্যা হ্রাস sortকরতে হবে। বাছাই করা ইতিমধ্যে একটি বিভাজন এবং আরও কার্যকর উপায়ে অভ্যন্তরীণ মার্জ করে। আমি সন্দেহ করি যে অতিরিক্ত বিভাজন করতে সাহায্য করবে।
স্টাফেন শেজেলাস 26'16
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.