বড় ফাইলগুলি বাছাই কিভাবে?


35

আমার একটি পিসি ইন্টেল (আর) পেন্টিয়াম (আর) সিপিইউ জি 640 @ 2.80 গিগাহার্টজ এবং 8 জিবি র‌্যামের সাথে রয়েছে। আমি এটিতে এক্সটি 3 ফাইল সিস্টেম সহ বৈজ্ঞানিক লিনাক্স 6.5 চালাচ্ছি।

এই সেটআপে, sort -u200 গিগাবাইট ফাইলটিতে আমি সবচেয়ে দ্রুতগতিতে কী করতে পারি ?

আমি কি ফাইলগুলি ছোট ফাইলগুলিতে (8 গিগাবাইটের চেয়ে ছোট) sort -uবিভক্ত করব, সেগুলি একসাথে রেখে, আবার তাদের আবার আলাদা আকারে ভাগ করে নেব sort -u, ইত্যাদি? বা এমন কোনও বাছাই করা স্ক্রিপ্ট, প্রোগ্রাম রয়েছে যা আমার সীমিত পরিমাণে র‌্যামের সাহায্যে এই ফাইলগুলিকে বড় আকারে পরিচালনা করতে পারে?


6
দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন এবং আপনার পোস্ট করা আদেশটি চেষ্টা করার পরে কী হবে তা ব্যাখ্যা করুন। আপনার কি ডিস্কের জায়গা শেষ? কমান্ডটি যতক্ষণ কাজ করতে পারে যতক্ষণ আপনার নিজের উপর পর্যাপ্ত ফাঁকা জায়গা থাকে /tmp
টেরডন


1
মনোনীত উত্তর মূলত বলছেন @terdon কি বলছে দেখা হয় কিন্তু এই এক খুঁজে বার করো - stackoverflow.com/a/13025731/2801913 । কিছু সিস্টেমে ডিফল্টরূপে ইনস্টল করা এমন আরও parallelবেশি সরঞ্জামের চেয়ে আপনার মনে হয় এর জন্য আপনার জিএনইউ প্রয়োজন parallel
গ্রীম

1
আপনি অ্যামাজন এস 3 এ ফাইলটি আপলোড করতে পারেন, তারপরে এটির বাছাইয়ের জন্য কয়েকশ নোড দিয়ে একটি ইলাস্টিক মানচিত্র হ্রাস কাজটি স্পিন করতে পারেন!
অ্যালান শুটকো

2
sort(1)স্থান শেষ হতে পারে /tmp; যদি তা হয় তবে আপনি পরিবেশের পরিবর্তনশীল TMPDIR, বা পতাকা সহ অস্থায়ী ফাইলগুলির জন্য অন্য একটি অঞ্চল নির্ধারণ করতে পারেন-T=<tmpdir>
ভনব্র্যান্ড

উত্তর:


46

জিএনইউ sort(যা বেশিরভাগ লিনাক্স সিস্টেমে ডিফল্ট), এর একটি --parallelবিকল্প রয়েছে। Http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html থেকে :

'--Parallel = এন'

N এর সমান্তরালে চালিত ধরণের সংখ্যা নির্ধারণ করুন। ডিফল্টরূপে এন উপলব্ধ প্রসেসরের সংখ্যায় সেট করা থাকে তবে এটি 8 এর মধ্যে সীমাবদ্ধ থাকে কারণ এর পরে কার্যকারিতা লাভ হ্রাস পাচ্ছে। আরও মনে রাখবেন যে এন থ্রেড ব্যবহার করে লগ এন এর একটি উপাদান দ্বারা মেমরির ব্যবহার বৃদ্ধি করে increases এছাড়াও এনপ্রোকের অনুরোধ দেখুন।

যেহেতু আপনার সিপুতে 2 টি কোর রয়েছে তাই আপনি এটি করতে পারেন:

sort --parallel=2 -uo list-sorted.txt list.txt

প্রসেসরের হাইপার-থ্রেডিংয়ের কারণে আরও বেশি উপস্থিত হতে পারে বলে কোরের প্রকৃত সংখ্যা উল্লেখ করা ভাল ।

niceপ্রসেসরের সময়সূচী অগ্রাধিকারকে ioniceপ্রভাবিত করতে এবং I / O সময়সূচীটিকে প্রভাবিত করতে আপনি পরীক্ষাও করতে পারেন । আপনি এই জাতীয় প্রসেসের তুলনায় অগ্রাধিকার বাড়িয়ে দিতে পারেন, আমি মনে করি না যে এটি আপনার বড় সঞ্চয় দেবে কারণ তারা ব্যাকগ্রাউন্ড প্রক্রিয়া খুব বেশি সংস্থান ব্যবহার করে না তা নিশ্চিত করার জন্য সাধারণত তারা আরও ভাল । কখনই না আপনি এগুলিকে এমন কিছুর সাথে সংযুক্ত করতে পারেন:

nice -n -20 ionice -c2 -n7 sort --parallel=2 -uo list-sorted.txt list.txt

এও লক্ষ্য করুন যে গিলস মন্তব্য করেছিলেন, একক জিএনইউ সাজ্ট কমান্ড ব্যবহার করা বাছাই ভাঙার যে কোনও পদ্ধতির চেয়ে দ্রুত হবে কারণ অ্যালগরিদম ইতিমধ্যে বড় ফাইলগুলি হ্যান্ডেল করার জন্য অনুকূলিত হয়েছে। অন্য যে কোনও কিছুই সম্ভবত জিনিসকে ধীর করবে।


10
এবং আপনার লক্ষ করা উচিত যে আপনি যে sortকোনও কিছুই করতে পারবেন তার চেয়ে সরাসরি কল করা ভাল। জিএনইউ বাছাই র‌্যামের চেয়ে অনেক বড় ফাইলগুলির সাথে ভালভাবে মোকাবেলা করার জন্য ডিজাইন করা হয়েছে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

- সমান্তরাল সাজানোর বিকল্পটি আমার আরএইচ 6.5 সার্ভারগুলিতে কাজ করে না। বাছাই - রূপান্তর মনে করে যে এটি কোর্টিলগুলি 8.4 থেকে আসে। সমান্তরাল সংস্করণে আমার কোন সংস্করণটি প্রয়োজন?
মার্কাস_বি

3
আরও দেখুন superuser.com/questions/938558/sort-parallel-isnt-parallelizing - আপনি যদি আপনি এটি আসলে parallelising না লক্ষ্য -S512M ভালো কিছু উল্লেখ করতে হতে পারে।
অহংকার

46

sortকমান্ডটি ব্যবহার করা সম্ভবত দ্রুততম বিকল্প হবে।

তবে আপনি সম্ভবত লোকালটি সিতে ঠিক করতে চাইবেন

sort -uঅনন্য লাইনগুলি প্রতিবেদন করে না, তবে রেখাগুলির প্রতিটি সেটগুলির মধ্যে একটি যা একইভাবে সাজায়। সি লোকালে, 2 টি পৃথক লাইন প্রয়োজনীয়ভাবে একই বাছাই করে না, তবে জিএনইউ সিস্টেমে বেশিরভাগ ইউটিএফ -8 ভিত্তিক লোকেলগুলিতে এটি হয় না।

এছাড়াও, সি লোকেল ব্যবহার ইউটিএফ -8 পার্স করার ওভারহেড এড়িয়ে যায় এবং জটিল ক্রম অর্ডারগুলি প্রক্রিয়াকরণ করে যাতে নাটকীয়ভাবে পারফরম্যান্সে উন্নতি হয়।

তাই:

LC_ALL=C sort -u file

আপনি অস্থায়ী ফাইলগুলির জন্য দ্রুত ড্রাইভ (বা ইনপুট এবং / অথবা আউটপুট ফাইলগুলির মধ্যে একটি পৃথক ড্রাইভ) ব্যবহার করে -Tবা কিছু বাস্তবায়ন দ্বারা সমর্থিত বিকল্পটি $TMPDIRসজ্জিত করে কর্মক্ষমতা উন্নত করতে পারেন ) ।-Ssort

কিছু ধরণের ইনপুট বা ধীর সঞ্চয়স্থানের জন্য, --compress-programজিএনইউ বিকল্পটি ব্যবহার করা sort(উদাহরণস্বরূপ lzop) স্টোরেজ ব্যবহারের পাশাপাশি কর্মক্ষমতা উন্নত করতে পারে।


এখন যারা আপত্তি করছেন তাদের জন্য কেবল একটি নোট (সঠিকভাবে কিছুটা হলেও) যে এটি সঠিক ক্রম হবে না :

আমি একমত যে একজন মানুষ হিসাবে আমি স্টেফানকে স্টেফান এবং স্টেফানির মধ্যে সাজিয়ে দেখতে চাই , তবে:

  • একটি কম্পিউটার চাইবেন Stéphane সাজানোর পর থেকে éএকটি অক্ষর অথবা পরে তার UTF-8 এনকোডিং প্রকারের বাইট (কোডপয়েন্ট বা বাইট মান পরিপ্রেক্ষিতে) হিসেবে (অন্তত যখন যেমন U + এ 00E9 প্রকাশ)। এটি একটি সাজানোর অর্ডার যা প্রয়োগ করা খুব সহজ এবং এটি একটি কঠোর মোট অর্ডার এবং এতে কোনও আশ্চর্য হওয়ার কিছু নেই।
  • আপনার লোকেলের বাছাইয়ের আদেশটি এমনকি কোনও ক্ষেত্রে এমনকি অনেক ক্ষেত্রে সন্তুষ্ট হবে না। উদাহরণস্বরূপ, ডিফল্ট en_GB.utf8 লোকেল সহ আমার সিস্টেমে:

    • স্টাফেন এবং স্টাফেন (একটি ইউ + 00E9 সহ, অন্যটি ইইউ + 0301 সহ) একটিকে সাজান না:

      $ printf '%b\n' 'Ste\u0301phane' 'St\u00e9phane' | sort -u
      Stéphane
      Stéphane
      
    • তবে ③, ①, ② সব একইভাবে সাজান (স্পষ্টতই সেই লোকাল সংজ্ঞাগুলিতে একটি বাগ):

      $ printf '%s\n' ③ ① ② | sort -u
      ③
      

      এখানে, এটি ③, তবে এটি ঠিক ① বা ② হিসাবেও হতে পারে ②

সুতরাং আইএমও, sort -uযদি আপনি অনন্য লাইন চান তবে আপনি সর্বদা LC_ALL = C এর সাথে চান্স চান। এবং যদি আপনি চান যে ফলাফলের তালিকাটি ব্যবহারকারীর ক্রম অনুসারে বাছাই করা হয়েছে তবে এটিকে sortআবার পাইপ করুন :

LC_ALL=C sort -u | sort

LC_ALL=C sort | LC_ALL=C uniq -c | sort -k2

8
স্থানীয় অবস্থান নির্ধারণের জন্য +1: এটি কার্য সম্পাদনে বিশাল প্রভাব ফেলতে পারে
অ্যাড্রিয়ান প্রানক

1
হ্যাঁ। 250000 লাইন দিয়ে ফাইল বাছাই করা LC_ALL জিনিসগুলিকে 8 বার গতি দেয়।
জান Vlcinsky

-1

এখানে GB RAM দম্পতি সঙ্গে একটি নিয়মিত মেশিনে টিবি স্কেল তথ্য বাছাইয়ের জন্য ব্যাশ স্ক্রিপ্ট ব্যবহার করার জন্য একটি প্রস্তুত: http://sgolconda.blogspot.com/2015/11/sort-very-large-dataset.html এটা সংখ্যা পরীক্ষা আপনার যন্ত্রটিকে সমস্ত কোর হিসাবে ব্যবহার করে এবং এটি ব্যবহার করে। বাছাই, সংখ্যা বা স্ট্রিং ফাইল। টিবি স্কেল ডেটাতে অনন্য রেকর্ড খুঁজে পেতে ব্যবহার করা যেতে পারে।


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