क्या मैं सॉर्ट कर सकता हूं?


13

उदाहरण के लिए bzipवहाँ pbzip है , के एक समानांतर संस्करण bzip। क्या sortप्रदर्शन में सुधार के लिए इस तरह का कोई समानांतर उपकरण है ?

जवाबों:


12

Coreutils 8.6 (2010-10-15) के अनुसार, GNU sortपहले से ही उपलब्ध कई प्रोसेसर का उपयोग करने के लिए समानांतर में सॉर्ट करता है। इसलिए, यह आगे की तरह इस संबंध में सुधार नहीं किया जा सकता pigzया pbzip2में सुधार gzipया bzip2

यदि आपका sortसमानांतर नहीं है, तो आप GNU कोरुटिलsort के नवीनतम संस्करण से GNU को स्थापित और स्थापित कर सकते हैं ।

GNU सॉर्ट के साथ, आप --parallelविकल्प के साथ थ्रेड्स की संख्या को सीमित कर सकते हैं ।


2
Sort --stable 15% परफॉर्मेंस बूस्ट देता है, कम से कम मेरे टेस्ट वर्कलोड में।
jrw32982

8

एक चीज जो मुझे हमेशा सबसे ज्यादा मदद करती है, वह है, जितना संभव हो उतना मेमोरी देना, ताकि स्वैपिंग को कम किया जा सके, जैसे:

sort -S 20G

4
धन्यवाद, यह एक चाल है जिसका मैं हाल ही में उपयोग करता हूं, - बस जरूरत पड़ने पर आधी रैम का उपयोग करने दें:sort -S 50%
मिकू

6

यदि आपकी फ़ाइल काफी बड़ी है, तो सॉर्टिंग डिस्क स्वैपिंग का कारण बनेगी, या तो क्योंकि आवंटित वर्चुअल मेमोरी बहुत बड़ी हो रही है, या क्योंकि sortप्रोग्राम ही डिस्क और बैक को चंक्स स्वैप कर रहा है। पुराने sortकार्यान्वयन में इस तरह के "डिस्क बफर के माध्यम से" प्रकार के व्यवहार की संभावना होती है, क्योंकि पुराने दिनों में बड़ी फ़ाइलों को सॉर्ट करने का एकमात्र तरीका था।

sortयहां एक -mविकल्प है जो आपकी मदद कर सकता है। फ़ाइल को विखंडू में विभाजित करने के लिए तेज़ हो सकता है - साथ में कहें split -l- उन्हें स्वतंत्र रूप से सॉर्ट करें, फिर उन्हें एक साथ मर्ज करें।

तो फिर, यह हो सकता है कि यह वास्तव में "डिस्क बफर के माध्यम से" क्या करता है। यह पता लगाने का एकमात्र तरीका है कि क्या यह आपके विशेष परीक्षण भार पर बेंचमार्क करने में मदद करता है। महत्वपूर्ण पैरामीटर आपके द्वारा दी जाने वाली लाइन की संख्या होगी split -l


आपके उत्तर के लिए धन्यवाद। मैं के साथ कुछ मानक संचालन करेंगे splitऔर mergeकरें और देखें कि यह मदद करता है।
मिकू

@ मिकू: मुझे नहीं लगता कि merge(1)यहां प्रयोज्यता है। का उपयोग करें sort -m
वॉरेन यंग

1
मेरी शिथिलता के लिए खेद है, मेरा मतलब था sort --merge
मिकू

1
यदि आप फ़ाइल को विभाजित करते हैं और टुकड़ों को छाँटते हैं तो आपको अभी भी पूरी चीज़ को सॉर्ट करना होगा जब आप इसे वापस एक साथ डालते हैं? वह तेजी से कैसे होगा?
terdon

2
यह मर्ज सॉर्ट एल्गोरिथ्म पर एक प्रकार है, जो सबसे तेज़ सॉर्टिंग विधियों में से एक है।
वॉरेन यंग

3

मेरे पास बहुत महत्वपूर्ण लाभ था sort -n, जिसके लिए वैज्ञानिक संकेतन के बिना सभी चयनित कॉलमों में संख्यात्मक मान (फ्लोट या पूर्णांक) की आवश्यकता होती है।

एक और संभावना है कि आपकी प्रक्रिया में एक महान सुधार ला सकता है /dev/shmमध्यस्थ फ़ाइलों से निपटने के लिए मेमोरी मैप्ड फ़ोल्डर का उपयोग करना है ।


3
export LC_COLLATE=C
export LANG=C
cat big_file | sort > /dev/null

सामान्य रूप से लिनक्स सॉर्ट यूनिकोड समानता नियमों का पालन करने के लिए कुछ निफ्टी सामान करता है ... यदि आप लोकेल को सी में बदलते हैं तो यह केवल बाइट में बदल जाता है ...

1.4GB फ़ाइल के लिए मेरी मशीन पर अंतर 20s बनाम 400s (!!!) है


धन्यवाद, लेकिन LC_ALL=Cपर्याप्त नहीं होगा ?
मिकू

मुझे ऐसा लगता है ... शायद LC_COLLATEपहले से ही पर्याप्त है। AFAIK तुलना के लिए sortउपयोग करता strcollहै और मैनपेज कहता है कि व्यवहार निर्भर करता हैLC_COLLATE
mt_

0
#! /bin/sh
#config MAX_LINES_PER_CHUNK based on file length
MAX_LINES_PER_CHUNK=1000 
ORIGINAL_FILE=inputfile.txt
SORTED_FILE=outputfile.txt
CHUNK_FILE_PREFIX=$ORIGINAL_FILE.split.
SORTED_CHUNK_FILES=$CHUNK_FILE_PREFIX*.sorted

 #Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null
rm -f $SORTED_FILE

#Splitting $ORIGINAL_FILE into chunks ...
split -l $MAX_LINES_PER_CHUNK $ORIGINAL_FILE $CHUNK_FILE_PREFIX

for file in $CHUNK_FILE_PREFIX*
do
    sort -n -t , -k 1,1 $file > $file.sorted &
done
wait

#echo "**********SORTED CHUNK FILES*********"
#echo $SORTED_CHUNK_FILES
#Merging chunks to $SORTED_FILE ...
sort  -mn $SORTED_CHUNK_FILES > $SORTED_FILE

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null

फ़ाइल को विभाजित किया गया है और इसे सॉर्ट करने की गति बढ़ जाएगी


1
नमस्ते! इस उत्तर को केवल एक कोड डंप होने के बजाय यह समझने के लिए कि यह क्या करना है, को बेहतर बनाया जा सकता है (यह भी, अगर इसे कुछ इनपुट पर GNU सॉर्ट की तुलना में तेज़ होने के लिए बेंचमार्क किया गया है, तो यह जानना दिलचस्प होगा!)।
डेग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.