2010-08-06 9 views
17

मैंने हाल ही में किसी से बात की, जो अमेज़ॅन के लिए काम करता है और उसने मुझसे पूछा: मैं प्रोग्रामिंग भाषा का उपयोग कर डेटा के टेराबाइट्स को सॉर्ट करने के बारे में कैसे जाऊं?क्या कोई वास्तव में डेटा के टेराबाइट सॉर्ट करता है?

मैं एक सी ++ लड़का हूं और निश्चित रूप से, हमने विलय सॉर्ट के बारे में बात की है और संभावित तकनीकों में से एक डेटा को छोटे आकार में विभाजित करना है और उनमें से प्रत्येक को क्रमबद्ध करना है और अंत में उन्हें विलय करना है।

लेकिन वास्तव में, अमेज़ॅन या ईबे जैसे कंपनियां डेटा के टेराबाइट्स को सॉर्ट करती हैं? मुझे पता है, वे बहुत सारी जानकारी स्टोर करते हैं, लेकिन क्या वे उन्हें सॉर्ट करते हैं?

संक्षेप में मेरा प्रश्न यह है कि: डेटा के टेराबाइट्स को सॉर्ट करने के बजाय वे उन्हें पहले स्थान पर क्यों नहीं क्रमबद्ध करेंगे?

+1

कई संगठनों के लिए, टेराबाइट बहुत अधिक डेटा नहीं है। ओरेकल उपयोगकर्ता समूह की बैठक में न जाएं और अपने बड़े टेराबाइट डेटाबेस के बारे में बात करें। यह निश्चित रूप से दस साल पहले से एक बदलाव है, जब लोगों ने आम तौर पर एक टेराबाइट बड़ा माना था। –

+0

इस दुनिया के हर किसी के लिए भयानक प्रतिक्रियाओं के लिए धन्यवाद। वास्तव में Stackoverflow समुदाय द्वारा आश्चर्यचकित। – user373215

+0

मैंने एक वेब क्रॉलर चलाया कि, अपने चरम पर, डेटा के दो टेराबाइट नियमित रूप से सॉर्ट कर रहा था। और यह अमेज़ॅन या Google जैसी कंपनी की तुलना में एक बहुत छोटा ऑपरेशन था। –

उत्तर

6

हां, कुछ कंपनियां निश्चित रूप से कम से कम उस डेटा को हर दिन क्रमबद्ध करती हैं।

Google के पास MapReduce नामक एक ढांचा है जो काम को विभाजित करता है - एक मर्ज सॉर्ट की तरह - विभिन्न बक्से पर, और हार्डवेयर और नेटवर्क विफलताओं को आसानी से संभालता है।

Hadoop एक समान अपाचे प्रोजेक्ट है जिसे आप स्वयं के साथ खेल सकते हैं, ताकि कंप्यूटर्स के क्लस्टर पर एक प्रकार एल्गोरिदम को विभाजित किया जा सके।

+0

डीन, क्या आप Google के लिए काम करते हैं? वे त्रुटियों और नेटवर्क विफलताओं को कैसे संभालते हैं? यह विकसित करने के लिए रोमांचक परियोजना लगता है। – user373215

+0

मेरा मतलब था, अगर कोई त्रुटि है, तो क्या कोई थ्रेड/प्रक्रिया उस स्थान से ले जाती है जहां से इसे छोड़ा गया था आदि। – user373215

+0

अपाचे हैडूप पर एक नज़र डालें, वे विफलताओं को संभालने के लिए चेकपॉइंटिंग और प्रतिकृति करते हैं –

11

लेकिन हकीकत में, अमेज़ॅन/eBay जैसी कंपनियों को डेटा के टेराबाइट सॉर्ट करें? मैं जानता हूं, वे बहुत सारी जानकारी स्टोर करते हैं लेकिन उन्हें सॉर्ट करते हैं ???

हां। पिछली बार मैंने Google संसाधितover 20 petabytes डेटा दैनिक की जांच की।

क्यों वे उन्हें पर क्रमबद्ध रखने नहीं होगा बजाय डेटा की टेराबाइट्स छँटाई की पहली जगह, एक संक्षेप में मेरे सवाल है।

संपादित करें: रीलेट एक बहुत अच्छा बिंदु बनाता है; आपको केवल इंडेक्स रखने की आवश्यकता है और उनको हल किया गया है। आप इस तरह से सॉर्ट डेटा को आसानी से और कुशलतापूर्वक पुनर्प्राप्त कर सकते हैं। आपको पूरे डेटासेट को सॉर्ट करने की आवश्यकता नहीं है।

+0

मैं सहमत हूं। लेकिन संदेह एक शॉट पर इतना डेटा सॉर्ट कर रहा है, कोई ऐसा क्यों करेगा। – user373215

+0

+1। हाल ही में, प्रोग्रामर की एक टीम 1 टेराबाइट को 1 मिनट में सॉर्ट करने में सक्षम थी। – Fosco

+1

शायद वह मौजूदा डेटा को नए या संशोधित मानदंड के अनुसार क्रमबद्ध करना चाहता है? –

3

प्रत्येक डेटाबेस इंडेक्स आपके डेटा के कुछ हिस्सों का एक क्रमबद्ध प्रतिनिधित्व है। यदि आप इसे अनुक्रमित करते हैं, तो आप कुंजी को सॉर्ट करते हैं - भले ही आप पूरे डेटासेट को जरूरी नहीं करते हैं।

1

वैज्ञानिक डेटासेट आसानी से टेराबाइट्स में चला सकते हैं। जब आप डेटा इकट्ठा करते हैं तो आप उन्हें सॉर्ट कर सकते हैं और उन्हें एक ही तरीके से स्टोर कर सकते हैं (तिथि से कहें)। हालांकि, किसी बिंदु पर कोई अन्य विधि द्वारा क्रमबद्ध डेटा चाहता है, उदा। यदि आप पृथ्वी के बारे में डेटा का उपयोग कर रहे हैं तो अक्षांश से।

7

सर्वर से लॉग डेटा पर विचार करें, अमेज़ॅन में बड़ी मात्रा में डेटा होना चाहिए। लॉग डेटा आम तौर पर इसे प्राप्त होने के रूप में संग्रहीत किया जाता है, यानी, समय के अनुसार क्रमबद्ध किया जाता है। इस प्रकार यदि आप इसे उत्पाद द्वारा क्रमबद्ध करना चाहते हैं, तो आपको पूरे डेटा सेट को सॉर्ट करना होगा।

एक और मुद्दा यह है कि प्रोसेसिंग आवश्यकता के अनुसार डेटा को कई बार सॉर्ट करने की आवश्यकता होती है, जो पहले से ज्ञात नहीं हो सकता है।

उदाहरण के लिए: हालांकि टेराबाइट नहीं है, मैंने हाल ही में मर्ज सॉर्ट का उपयोग करके 24 जीबी ट्विटर अनुयायी नेटवर्क डेटा को सॉर्ट किया है। मैंने जो कार्यान्वयन किया था वह प्रोफेसर दान लेमेर द्वारा किया गया था।

http://www.daniel-lemire.com/blog/archives/2010/04/06/external-memory-sorting-in-java-the-first-release/

डेटा userids के अनुसार छाँटे गए किया गया था और प्रत्येक पंक्ति व्यक्ति जो उसे पीछा कर रहा है की उपयोगकर्ता आईडी के बाद उपयोगकर्ता आईडी निहित। हालांकि मेरे मामले में मैं डेटा चाहता था कि किसके पीछे है। इस प्रकार मुझे प्रत्येक लाइन में दूसरे उपयोगकर्ता द्वारा इसे फिर से सॉर्ट करना पड़ा।

हालांकि 1 टीबी सॉर्ट करने के लिए मैं Hadoop का उपयोग करके मानचित्र-कम उपयोग का उपयोग करूंगा। मानचित्र फ़ंक्शन के बाद डिफ़ॉल्ट चरण सॉर्ट करें। इस प्रकार मैं मानचित्र फ़ंक्शन को पहचानने के लिए चुनता हूं और कोई भी कार्य और सेटअप स्ट्रीमिंग नौकरियों को कम करता है।

हैडोप HDFS का उपयोग करता है जो 64 एमबी के विशाल ब्लॉक में डेटा संग्रहीत करता है (यह मान बदला जा सकता है)। डिफ़ॉल्ट रूप से यह प्रति ब्लॉक एकल नक्शा चलाता है। मानचित्र फ़ंक्शन चलाने के बाद मानचित्र से आउटपुट सॉर्ट किया जाता है, मुझे लगता है कि मर्ज सॉर्ट के समान एल्गोरिदम द्वारा अनुमान लगाया जाता है। http://hadoop.apache.org/common/docs/r0.16.4/api/org/apache/hadoop/mapred/lib/IdentityMapper.html

आपको लगता है कि डेटा में कुछ तत्व के आधार पर सॉर्ट करना चाहते हैं तो मुझे लगता है कि तत्व XXX में एक महत्वपूर्ण और नक्शे के आउटपुट के रूप में मूल्य के रूप में लाइन होगा:

यहां पहचान नक्शाकार के लिए लिंक है ।

3

हां। कुछ कंपनियां करते हैं। या शायद व्यक्ति भी। आप एक उदाहरण के रूप में उच्च आवृत्ति व्यापारियों ले सकते हैं। गोल्डमैन सैक्स कहते हैं, उनमें से कुछ अच्छी तरह से जाना जाता है। वे बाजार के खिलाफ बहुत परिष्कृत एल्गोरिदम चलाते हैं, पिछले कुछ सालों से टिक टिक डेटा लेते हैं, जो कीमत की पेशकश में हर बदलाव है, असली सौदा कीमतें (प्रिंट एकेए को प्रिंट के रूप में) आदि। अत्यधिक अस्थिर उपकरणों, जैसे शेयरों के लिए , वायदा और विकल्प, हर दिन डेटा के गीगाबाइट होते हैं और उन्हें पिछले कुछ वर्षों से हजारों उपकरणों के लिए डेटा पर वैज्ञानिक अनुसंधान करना पड़ता है। खबरों का जिक्र नहीं है कि वे बाजार, मौसम की स्थिति और यहां तक ​​कि चंद्रमा चरण से भी संबंधित हैं। तो, हाँ, ऐसे लोग हैं जो डेटा के टेराबाइट सॉर्ट करते हैं। शायद हर दिन नहीं, लेकिन फिर भी, वे करते हैं।

0

बड़ी कंपनियां नियमित रूप से डेटा के टेरा और पेटबाइट्स को क्रमबद्ध करती हैं। मैंने एक से अधिक कंपनियों के लिए काम किया है। डीन जे की तरह, कंपनियां इस तरह के कार्यों को कुशलतापूर्वक और लगातार संभालने के लिए बनाए गए ढांचे पर भरोसा करती हैं। इसलिए, डेटा के उपयोगकर्ताओं को अपने स्वयं के सॉर्टिंग को लागू करने की आवश्यकता नहीं है। लेकिन ढांचे का निर्माण करने वाले लोगों को यह पता लगाना था कि बड़े पैमाने पर कुछ चीजें कैसे करें (केवल छंटनी नहीं, बल्कि महत्वपूर्ण निष्कर्षण, समृद्ध, इत्यादि)। इसके बावजूद, ऐसी स्थितियां हो सकती हैं जब आपको अपनी खुद की छंटाई को लागू करने की आवश्यकता होगी। उदाहरण के लिए, मैंने हाल ही में डेटा प्रोजेक्ट पर काम किया है जिसमें मोबाइल ऐप्स से आने वाली घटनाओं के साथ लॉग फाइल प्रोसेसिंग शामिल है। सुरक्षा/गोपनीयता नीतियों के लिए लॉग फ़ाइलों में कुछ फ़ील्ड को आगे संसाधित करने के लिए डेटा को स्थानांतरित करने से पहले एन्क्रिप्ट किया जाना आवश्यक था। इसका मतलब था कि प्रत्येक पंक्ति के लिए, एक कस्टम एन्क्रिप्शन एल्गोरिदम लागू किया गया था। हालांकि, चूंकि एन्क्रिप्टेड घटनाओं का अनुपात उच्च था (उसी फ़ील्ड मान फ़ाइल में 100 बार बार प्रकट होता है), यह फ़ाइल को पहले सॉर्ट करने के लिए अधिक कुशल था, मान को एन्क्रिप्ट करें, प्रत्येक दोहराए गए मान के परिणाम को कैश करें।

संबंधित मुद्दे