सुपर-फास्ट रीड और एक सरल डेटा संरचना के लिए कौन सा DBMS अच्छा है?


16

मैं एक उत्पाद विकसित कर रहा हूं, जो इसके संचालन के भाग के रूप में बड़ी संख्या में फाइलों / निर्देशिकाओं को ट्रैक करेगा। एक डेटाबेस में, तब बूट पर, प्रत्येक फ़ाइल के लिए घड़ियाँ बनाने के लिए विचार को संग्रहीत करना होता है। दूरस्थ डेटाबेस के लिए एक समूह सिंक के लिए परिवर्तन करने वाली फ़ाइलें कतार में (डेटाबेस में) होंगी। उन्हें प्राथमिकता के क्रम में सिंक किया जाएगा, 1-10 के बीच की संख्या।

डेटाबेस के बारे में जानकारी:

  • <100,000 स्टेट ऑफ़ स्टैट जानकारी
  • संपूर्ण डेटाबेस बूट पर पढ़ा जाता है, केवल फ़ाइल पथ आवश्यक है
  • कतारबद्ध फ़ाइलों में एक प्राथमिकता क्षेत्र होगा (और कुछ भी नहीं खोजा जा सकता है)
  • सम्मिलन धीमा हो सकता है

मुझे एक युगल डेटाबेस मिला है जो मुझे लगता है कि काम करेगा, लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा होगा:

  • रेडिस - कुंजी के रूप में फ़ाइल-पथ, स्टोर डेटा, मूल्य के रूप में; कतार एक सूची होगी
  • MongoDB - रेडिस की तुलना में अधिक क्वेरी विकल्प, लेकिन अभी भी तेज है

मैं सोच रहा हूं कि NoSQL डेटाबेस यहां सबसे अच्छा समाधान होगा, क्योंकि बहुत अधिक रिलेशनल लॉजिक नहीं चल रहा है, और कुल डेटा आकार बहुत बड़ा नहीं है (कुछ <100 mb, <30 mb के करीब)। मैंने SQLite को देखा क्योंकि यह काफी आसान लगता है कि एक इंस्टॉल करने योग्य एप्लिकेशन में एम्बेड किया जा सकता है।

चूंकि यह एंड-यूजर्स के लिए डिस्ट्रिब्यूटेड एप्लिकेशन है और हाई-लोड सर्वर नहीं है, इसलिए डेटाबेस को एक साथ कई यूजर्स को सपोर्ट नहीं करना पड़ता है। यहां मुख्य प्राथमिकता एक डेटाबेस ढूंढना है जिसका मॉडल सबसे अधिक समझ में आता है।

तो सवाल, इस स्थिति के लिए कौन सा डेटाबेस सबसे अधिक लागू होगा?

इसके अलावा, वहाँ किसी भी अन्य डेटाबेस है कि इस तरह एक आवेदन के लिए और अधिक समझ में आता है?

जवाबों:


9

पहली बात जो ध्यान में आती है वह एक विशेष RDBMS है जो मुझसे परिचित है। मैं पहचानता हूं, हालांकि, यह इस एप्लिकेशन के लिए सबसे अच्छा नहीं हो सकता है।

इसलिए, मेरी सलाह है कि आप एक ऐसे डेटाबेस के साथ जाएं जो आपसे परिचित हो। यदि आप Redis या MongoDB से परिचित हैं, तो उनमें से किसी एक के साथ जाएं। यदि आप SQLite से अधिक परिचित हैं, तो उसे चुना है।

इस आकार के एक डेटाबेस पर, यह सब बहुत जल्दी होने जा रहा है। यहां तक ​​कि डेटाबेस जो अधिक डिस्क-हेवी हैं, किसी प्रकार के कैशिंग का उपयोग करेंगे ताकि डिस्क की गति बहुत अधिक चिंता का विषय न हो।


हाँ, उस आकार के एक डेटाबेस को संभवतः पूरी तरह से मेमोरी से बाहर रखा जाएगा।
निक चामास

1
मैं MySQL (लेकिन यह साल रहा है), CouchDB, और Redis (अभी शुरू हुआ) से परिचित हूं, और मेरे पास SQLite में एक समान संरचना है जिसे मैं संदर्भित कर सकता हूं। मुझे लगता है कि इस db के आकार के साथ यह वास्तव में बहुत ज्यादा मायने नहीं रखता है।
बीटगैमिट

12

यदि आप संबंधपरक तर्क से चिंतित नहीं हैं, तो वास्तव में तेज़ पढ़ने की गति चाहते हैं, और आप RDBMS के साथ काम करने के इच्छुक हैं, मैं MySQL कहने के लिए पूर्वाग्रह से उद्यम करूँगा। क्यों ???

MyISAM भंडारण इंजन में एक विकल्प है जो बेहतर प्रदर्शन के लिए तालिका की भौतिक संरचना को बढ़ाने की अनुमति दे सकता है। वह विकल्प क्या है? वैकल्पिक तालिका विकल्प ROW_FORMAT।

उदाहरण के लिए, पुस्तक MySQL डाटाबेस डिजाइन और ट्यूनिंग ROW_FORMAT = 72,73 पृष्ठों पर FIXED का उपयोग करने की सिफारिश करता है। यह सभी VARCHAR क्षेत्रों को आंतरिक रूप से CHAR में बदल देगा। यह MyISAM तालिका को बड़ा बना देगा, लेकिन इसके खिलाफ चयन निष्पादित बहुत तेज हो जाएगा। मैं व्यक्तिगत रूप से इस पर ध्यान दे सकता हूं। मेरे पास एक बार एक मेज थी जो 1.9GB की थी। मैंने ALTER TABLE tblname ROW_FORMAT = FIXED के साथ प्रारूप बदला। तालिका 3.7GB समाप्त हुई। इसके खिलाफ चयनों की गति 20-25% तेज थी, बिना कुछ और सुधार या परिवर्तन के।

यदि आपके पास पहले से ही एक MyISAM तालिका है जो डेटा से आबाद है? आप MyISAM तालिका में मौजूद डेटा के आधार पर अनुशंसित स्तंभ परिभाषाओं के लिए मीट्रिक प्राप्त कर सकते हैं। क्या प्रश्न उन मैट्रिक्स को प्रस्तुत करता है?

SELECT * FROM tblname PROCEDURE ANALYSE();

प्रक्रिया विश्लेषण () यह डेटा प्रदर्शित नहीं करेगा। यह हर कॉलम का मूल्य पढ़ेगा और कॉलम परिभाषाओं की सिफारिश करेगा। उदाहरण के लिए, यदि आपके पास एक प्रकार का कॉलम है, जिसका मान 1-4 है, तो यह उन 4 मानों में से एक का उपयोग करके सबसे अधिक सुगम होगा। तब आप TINYINT या CHAR (1) का उपयोग करना चुन सकते हैं क्योंकि वे समान मात्रा में अंतरिक्ष (1 बाइट) लेते हैं।

यहाँ पर विचार करने के लिए कुछ और है: जब से आप एक NoSQL DB का उपयोग करने के बारे में सोच रहे थे, क्या आपने कभी NoSQL तरीके से MyISAM का उपयोग करने के बारे में सोचा है? यह काफी संभव है। उसी पुस्तक का पृष्ठ १ book५ जिसमें मैंने उल्लेख किया है कि संबंधपरक सामान के बिना एक तालिका को पढ़ने के लिए हैण्डलर संरचनाओं का उपयोग किया जाता है । वास्तव में, पृष्ठ 175 यह उदाहरण देता है:

CREATE TABLE customer_mileage_details
(
    customer_id INT NOT NULL,
    ff_number CHAR(10) NOT NULL,
    transaction_date DATE NOT NULL,
    mileage SMALLINT NOT NULL,
    INSERT(customer_id),
    INSERT (ff_number,transaction_date)
) ENGINE = MYISAM;

इस तालिका में लाखों पंक्तियाँ हैं। मान लें कि आपको एक डेटा विश्लेषण बनाने की आवश्यकता है जिसमें निम्नलिखित आवश्यकताएं हैं:

  • इसे जितनी जल्दी हो सके जानकारी के ब्लॉक प्राप्त करने की आवश्यकता है।
  • उपयोगकर्ता इनपुट या अन्य कारकों के आधार पर, यह संभवतः तालिका में "चारों ओर कूद" होगा।
  • यह संगामिति या अन्य डेटा अखंडता मुद्दों के साथ संबंध नहीं है।
  • क्रॉस-एप्लिकेशन टेबल लॉकिंग की आवश्यकता नहीं है।

ये आदेश तालिका से त्वरित और गंदे पढ़ने की अनुमति देते हैं:

HANDLER customer_mileage_details OPEN;
HANDLER customer_mileage_details READ ff_number FIRST WHERE ff_number=('aaetm-4441');
HANDLER customer_mileage_details READ NEXT LIMT 10;
HANDLER customer_mileage_details CLOSE;

मुझे उम्मीद है कि यह विचार के लिए भोजन दे। कृपया इस पर गौर करें।

चेतावनी

मेरे बारे में यह विशेष रूप से पोस्ट लिखने के बारे में बहुत ही विडंबना है कि मैंने हंडलर के बारे में एक पूर्व पोस्ट को पेरकोना सर्वर बायनेरी में इस्तेमाल किया जा रहा है और सोच रहा था कि इसका उपयोग करना पुराना था । उस पुराने पोस्ट के बाद से, मैंने कभी नहीं सोचा था कि मैं कभी भी हैण्डलर संरचनाओं के समर्थन में कुछ लिखूंगा। मैं अब सही हो गया।


1
NoSQL डेटाबेस के रूप में MySQL का उपयोग करने के बारे में दिलचस्प बिंदु, लेकिन यह मुझे Redis या MongoDB जैसी किसी चीज़ का उपयोग करके क्या खरीदेगा?
15

1
जल्दी-जल्दी और गंदे जवाब? क्या आपको कभी रिलेशनल मॉडल पर वापस जाना चाहिए, यहां तक ​​कि रिपोर्टिंग प्रयोजनों के लिए भी, संक्रमण को वापस करने के लिए सभी घंटियाँ और सीटी जगह में हैं। इसके अलावा, आप अभी भी MyISAM के NoSQL शैली के उपयोग के साथ संबंध में परिचालन कार्यों का उपयोग कर सकते हैं। BTW InnoDB भी हैण्डलर को डेटा तक पहुंचने की अनुमति देता है।
रोलैंडमाइसीडीडीबीए

Hi @RolandoMySQLDBA, मैं HANDLERसंरचनाओं और क्षमताओं के बारे में अधिक जानकारी की तलाश कर रहा हूं , mysql का मैन पेज केवल एक ही पेज है जिसे मैं ढूंढने में सक्षम हूं, और वहां बहुत कुछ नहीं है ... मैंने इसे एक के रूप में पूछा है यहाँ नया प्रश्न: dba.stackexchange.com/q/253653/23271 और उम्मीद कर रहा था कि आप अतिरिक्त संसाधनों के बारे में जान सकते हैं?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.