पर जो बात करता है भंडारण की एक बड़ी राशि संरचित डेटा के रूप में बूँद समझ बनाने के लिए?

0

सवाल

हम चल रहे हैं, एक डेटाबेस समर्थित वेब अनुप्रयोग के लिए डेटा विश्लेषण, वर्तमान के आधार पर C#.NET के साथ EntityFramework सर्वर पर है, और मुख्य रूप से HTML+जावास्क्रिप्ट चौखटे ग्राहक पक्ष पर (वेब आधारित).

हमारे नियमित रूप से आवेदन प्राप्त करता है माप X/Y datapoints batched बड़ी मात्रा में, यानी 1e6 या उससे अधिक है, उपयोगकर्ताओं द्वारा अपलोड की गई या प्राप्त द्वारा अन्य बुनियादी सुविधाओं.

वर्तमान में हम एक तालिका में MSSQL कहा जाता है Values के साथ id, series_id as int; x, y, z as float. इस तालिका में है BULK INSERT डेटा से भरा एक ग्राहक इसे अपलोड, और संबद्ध मेटाडेटा में सहेजा गया है एक Series तालिका. कुल db आकार वर्तमान में आ 1TB, 99.99% है, जो की Values डेटा.

इस दृष्टिकोण था लागू करने के लिए सरल लेकिन यह कई कमियां है जो इसे बनाया है, जटिल और धीमी गति से समय के साथ:

  • हम सम्मिलित करने के लिए, मात्रा में करने के लिए अधिभार नहीं IIS प्रक्रिया है जो preprocesses यह (वर्तमान में 200'000 datapoints प्रति खंड)
  • IIS प्रक्रिया स्मृति आवश्यकताओं के दौरान सम्मिलित हैं बड़ा (>1500MB के लिए डेटा की 200MB)
  • डालने अभी तक बहुत धीमी गति से (5 लाख के रिकॉर्ड कर रहे हैं 100 एमबी, इस >30 सेकंड सम्मिलित करने के लिए, यहां तक कि का उपयोग कर भारी मात्रा सम्मिलित करें)
  • के दौरान सम्मिलित पूरी तालिका को बंद कर दिया है, यानी केवल एक उपयोगकर्ता सम्मिलित कर सकते हैं एक समय में
  • पुनर्प्राप्त डेटा भी काफी धीमी गति से अनुरोध 1e6 रिकॉर्ड कभी कभी लेता है >10 सेकंड
  • हटाने श्रृंखला के साथ >1e6 रिकॉर्ड नियमित रूप से समय समाप्ति का कारण बनता है पर वेब अनुप्रयोग की ओर ।

डेटा कभी आंशिक रूप से चयनित है, तो हम वास्तव में जरूरत नहीं है करने के लिए यह एक टेबल में. लेकिन यह 'बाहर thinned' के प्रदर्शन से पहले करने के लिए भेजा ग्राहकों, यानी 1e6 रिकॉर्ड कर रहे हैं - डिफ़ॉल्ट रूप से, यानी के 99% में मामलों का उपयोग करें - करने के लिए कम 2000 या 10'000 के रिकॉर्ड से पहले ग्राहक के लिए भेजा. इस कैश की गई है, क्लाइंट पर है, लेकिन अगर एक नए ग्राहक के अनुरोध के एक ही सेट के साथ, यह फिर से संसाधित. मूल्यों की मेज भी एक सूचकांक पर series_id लेता है, जो और अधिक डिस्क स्थान की तुलना में तालिका में ही है ।

मैं सोच रहा हूँ कि क्या यह समझ बनाने के लिए बदलने के लिए इस भंडारण प्रारूप करने के लिए एक बूँद भंडारण में "मूल्यों" के साथ अपने स्वयं के डेटा प्रारूप (सीएसवी या JSON या बाइनरी), और - शायद - अतिरिक्त कॉलम के साथ preprocessed 'कम' डेटासेट के लिए प्रदर्शन कर सकते हैं, जो धक्का दिया जा करने के लिए ग्राहकों के बिना परिवर्तन (उदाहरण के लिए । में JSON). इसलिए नए Values तालिका स्वरूप के लिए किया जाएगा की तरह कुछ

id, series_id, data(blob), reduced_data(blob)

और वहाँ होना चाहते हैं सिर्फ एक Value प्रति Series प्रविष्टि, नहीं 1e6 या अधिक. कम डेटासेट बनाया जाएगा एक बार जब अपलोड किया गया डेटा प्राप्त हुआ है, और फिर के लिए इस्तेमाल किया प्रदर्शन जब यह ग्राहकों के अनुरोध

मैं खो देंगे आंशिक चयन के values आईडी के आधार पर या एक्स/Y मान, लेकिन मूल्यों नहीं कर रहे हैं के आधार पर चयन के अलावा अन्य कुछ भी id या series_id तो, यह वर्तमान में एक सीमा नहीं. तो यहाँ मेरा सवाल है:

  • इस अर्थ है सब पर? मुझे उम्मीद है निर्माण और विलोपन की एक बड़ी बूँद डेटासेट किया जा करने के लिए हमेशा की तुलना में काफी तेजी से निर्माण और विलोपन के 1,000,000 एकल रिकॉर्ड. यह सच है?
  • बाइनरी बूँद या सीएसवी/JSON/.. बूँद? सबसे सरल दृष्टिकोण के लिए बूँद भंडारण के पाठ्यक्रम बनाने के लिए एक सीएसवी या JSON हिस्सा है और इसे बचाने के लिए (संभवतः gzipped) में डेटाबेस. एक कस्टम बाइनरी डेटा स्वरूप के लिए किया जाएगा यहां तक कि छोटे, लेकिन यह होता है करने के लिए परिवर्तित किया जा सकता JSON करने के लिए भेजा से पहले ग्राहकों के लिए.

मैं एक लग रहा है अतिरिक्त परेशानी के साथ आ रहा बाइनरी डेटा प्रारूपों के लायक नहीं हो सकता यह है और यह करने के लिए बेहतर gzip सीएसवी/JSON बूँद से आविष्कार करने के लिए एक बाइनरी स्वरूप है । यह सच है?

कैसे के बारे में अन्य कमियां के चुंबकत्व है कि मैं भी पता नहीं हो सकता है? आकार सीमाओं नहीं लग रहे करने के लिए एक मुद्दा हो, varbinary(MAX) के लिए पर्याप्त है । मैं नहीं की जरूरत है एक सूचकांक मूल्यों पर अंदर बूँद, बस पर मेटाडाटा (जो श्रृंखला में तालिका).

विचार?

blob database-performance sql-server
2021-11-15 20:49:09
1

सबसे अच्छा जवाब

1

मुख्य लाभ में से एक के लिए भंडारण में फ़ाइलों Db है ACID (Atomicity, संगतता, अलगाव, स्थायित्व) प्रौद्योगिकी में डीबीएस. यह हमें सक्षम बनाता है के लिए सुरक्षित रूप से सम्मिलित सभी डेटा में अलग अलग तालिकाओं के साथ जब हम काम पर डेटा. जब आप संग्रहीत आपकी फ़ाइलों DB में के रूप में एक बूँद आप एक फायदा है जब फ़ाइलों की प्रतिलिपि करने के लिए अन्य भंडारण, क्योंकि बूँद है की तुलना में तेजी से ऑपरेशन की फाइल सिस्टम है, और आप कर सकते हैं आसानी से बैकअप अपने फ़ाइलें. लेकिन, यदि आपकी फ़ाइल आकार, प्रत्येक रिकॉर्ड के लिए कर रहे हैं की तुलना में अधिक 10-50-100 MB अनुशंसित नहीं है कि स्टोर करने के लिए फ़ाइलों में बूँद. इस मामले में अवधि के रिकॉर्ड डालने के लिए टेबल शायद 10-15-30 सेकंड. यह बहुत अच्छी तरह से नहीं, क्योंकि लेन-देन पिछले इतने लंबे समय या तो, और सभी तालिकाओं के दौरान लेन-देन में है कि समझ में अवरुद्ध कर रहे हैं के रूप में आप जानते हैं, और लंबे समय के अवरुद्ध इन तालिकाओं भी कारण के लिए उपयोगकर्ताओं में असमर्थ हो जाएगा करने के लिए काम करते हैं. एक दिलचस्प तरीके के भंडारण के फ़ाइलों के रूप में बूँद है FILESTREAM बूँद प्रौद्योगिकी समर्थित है जो केवल SQL सर्वर द्वारा. आप प्राप्त कर सकते हैं के बारे में अधिक जानकारी के लिए इस प्रौद्योगिकी से इस

2021-11-18 21:34:15

धन्यवाद के लिए सूचक है. मैं बेंचमार्क आवेषण के कई ब्लॉकों के 50MB के डेटा में एक उदाहरण मेज पर हमारे उत्पादन सर्वर और प्रत्येक ले लिया 1-2 सेकंड के लिए स्वीकार्य है जो. लेकिन FILESTREAM बूँद है एक बहुत अच्छा विचार है.
Jens

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................