আমি সবেমাত্র অ-সম্পর্কযুক্ত ডিবি দিয়ে শুরু করেছি এবং আমি এখনও মাথাটি এটির চারপাশে জড়িয়ে ধরে সেরা মডেলটি কী হবে তা নির্ধারণের চেষ্টা করছি। এবং আমি কেবল কাউচডিবি-র পক্ষে কথা বলতে পারি।
তবুও, আমার কিছু প্রাথমিক সিদ্ধান্ত রয়েছে:
আপনি কি এমন বিকল্প নকশাগুলি নিয়ে এসেছেন যা অ-সম্পর্কহীন বিশ্বে আরও ভাল কাজ করে?
নকশার ফোকাস শিফট: নথির মডেলটির নকশা (ডিবি টেবিলগুলির সাথে সম্পর্কিত) প্রায় অপ্রাসঙ্গিক হয়ে ওঠে, যখন সমস্ত কিছু দৃষ্টিভঙ্গি ডিজাইনের উপর নির্ভর করে (প্রশ্নের সাথে মিল রেখে)।
ডকুমেন্ট ডিবি সাজানোর ধরণের জটিলতাগুলি: এসকিউএল-তে অবিচ্ছেদ্য ডেটা এবং নমনীয় প্রশ্ন রয়েছে, ডকুমেন্ট ডিবিগুলি অন্য উপায় around
কাউচডিবি মডেল হ'ল "জেএসওএন নথিগুলি" (মূলত নেস্টেড হ্যাশ টেবিলগুলি)। প্রতিটি নথির একটি অনন্য আইডি রয়েছে এবং আইডি দিয়ে তুচ্ছভাবে পুনরুদ্ধার করা যায়। অন্য যে কোনও প্রশ্নের জন্য, আপনি "ভিউগুলি" লিখুন যা নামগুলির সেট / ফাংশন হ্রাস করার নামযুক্ত are দর্শনগুলি কী / মান জোড়ের তালিকার হিসাবে ফলাফল নির্ধারণ করে return
কৌশলটি হ'ল আপনি কোনও এসকিউএল ডাটাবেসকে জিজ্ঞাসা করেছেন এমন অর্থে আপনি ডাটাবেসটিকে জিজ্ঞাসা করবেন না: ভিউ ফাংশনগুলি চালনার ফলাফলগুলি একটি সূচীতে সঞ্চিত থাকে এবং কেবল সূচকটি অনুসন্ধান করা যায়। (যেমন "সবকিছু পান", "কী পান" বা "কী রেঞ্জ পান")
এসকিউএল বিশ্বের সর্বাপেক্ষা সাদৃশ্যটি হ'ল যদি আপনি কেবল সঞ্চিত পদ্ধতি ব্যবহার করে ডিবি-কে জিজ্ঞাসা করতে পারেন - আপনার যে সমর্থনটি আপনি সমর্থন করতে চান সেগুলি অবশ্যই পূর্বনির্ধারিত হতে হবে।
নথিগুলির নকশাটি অত্যন্ত নমনীয়। আমি কেবল দুটি বাধা পেয়েছি:
- একই ডকুমারে সম্পর্কিত ডেটা একসাথে রাখুন, যেহেতু যোগদানের সাথে সম্পর্কিত কিছু নেই is
- দস্তাবেজগুলি এত বড় করবেন না যে সেগুলি খুব ঘন ঘন আপডেট হয় (যেমন বছরের জন্য সমস্ত কোম্পানির বিক্রয় একই দস্তাবেজে রাখে), যেহেতু প্রতিটি নথির আপডেট পুনরায় সূচকে তিরস্কার করে।
তবে সবকিছুই ভিউগুলি ডিজাইনের উপর নির্ভর করে।
বিকল্প নকশাগুলি আমি দেখেছি যে কোনও এসকিউএল ডাটাবেসের তুলনায় কাউচডিবি দিয়ে প্রস্থের কাজের অর্ডারগুলি স্টোরেজ স্তরের চেয়ে সিস্টেম স্তরে রয়েছে। আপনার যদি কিছু ডেটা থাকে এবং ওয়েব পৃষ্ঠায় সেগুলি পরিবেশন করতে চান তবে মোট সিস্টেমের জটিলতা কমপক্ষে 50% হ্রাস পেয়েছে:
- কোনও ডিজাইনের ডিজি টেবিল নেই (ছোট সমস্যা)
- কোনও ওডিবিসি / জেডিবিসি মধ্যবর্তী স্তর নয়, সমস্ত প্রশ্ন এবং HTTP- র মাধ্যমে লেনদেন (মাঝারি সমস্যা)
- JSON থেকে সাধারণ ডিবি-টু-অবজেক্ট ম্যাপিং, যা এসকিউএল-র তুলনায় প্রায় তুচ্ছ (গুরুত্বপূর্ণ!) এর
- আপনি সম্ভাব্যভাবে পুরো অ্যাপ্লিকেশন সার্ভারটি এড়িয়ে যেতে পারেন, যেহেতু আপনি আপনার ডকুমেন্টগুলি ব্রাউজার দ্বারা সরাসরি অ্যাজেএক্স ব্যবহার করে পুনরুদ্ধার করার জন্য ডিজাইন করতে পারেন এবং এইচটিএমএল হিসাবে প্রদর্শিত হওয়ার আগে জাভাস্ক্রিপ্টের কিছুটা পালিশ যোগ করতে পারেন। (বিশাল!!)
সাধারণ ওয়েব অ্যাপস এর জন্য ডকুমেন্ট / জেএসওএন ভিত্তিক ডিবিগুলি একটি বিশাল জয়, এবং কম নমনীয় ক্যোয়ারির অপূর্ণতা এবং ডেটা বৈধকরণের জন্য কিছু অতিরিক্ত কোড প্রদানের জন্য একটি অল্প মূল্য মনে হয়।
অসম্ভব বলে মনে হচ্ছে এমন কোনও কিছুর বিরুদ্ধে আপনি কি নিজের মাথায় আঘাত করেছেন?
এখনো না. ডাটাবেস অনুসন্ধানের মাধ্যম হিসাবে মানচিত্র / হ্রাস অপরিচিত, এবং এসকিউএল লেখার চেয়ে অনেক বেশি চিন্তাভাবনা প্রয়োজন। বেশ কয়েকটি আদিম সংখ্যা রয়েছে, সুতরাং আপনার প্রয়োজনীয় ফলাফলগুলি পাওয়া আপনি মূলত কীগুলি নির্দিষ্ট করে সে সম্পর্কে সৃজনশীল হওয়ার প্রশ্ন।
প্রশ্নগুলির একটি সীমাবদ্ধতা রয়েছে একই সময়ে দুটি বা ততোধিক ডকুমেন্টের দিকে নজর দিতে পারে না - কোনও মিল বা অন্যান্য ধরণের মাল্টি-ডকুমেন্টের সম্পর্কের সাথে যোগ দেয় না, তবে এখনও অবধি কিছুই দুর্লভ নয়।
উদাহরণসীমা সীমাবদ্ধতা হিসাবে, গণনা এবং অঙ্কগুলি সহজ তবে কাউচডিবি ভিউ / কোয়েরি দ্বারা গড় গণনা করা যায় না। ফিক্স: যোগফল এবং পৃথক গণনা করুন এবং ক্লায়েন্টের গড় গণনা করুন।
আপনি কোনও ডিজাইনের ধরণ দিয়ে ফাঁকটি সরিয়েছেন, যেমন এক থেকে অন্যটিতে অনুবাদ করতে?
আমি নিশ্চিত না যে এটি সম্ভব! এটি একটি সম্পূর্ণ পুনরায় নকশার মতো, যেমন কোনও কার্য-ভিত্তিক শৈলীতে ক্রিয়ামূলক শৈলীর প্রোগ্রাম অনুবাদ করার মতো। সাধারণভাবে, প্রতিটি নথিতে এসকিউএল টেবিল এবং আরও ডেটা রয়েছে তার চেয়ে অনেক কম নথি প্রকার রয়েছে।
এটির চিন্তাভাবনার একটি উপায় হ'ল সন্নিবেশ এবং সাধারণ অনুসন্ধানগুলির জন্য আপনার এসকিউএলটির দিকে নজর দেওয়া: উদাহরণস্বরূপ, কোনও গ্রাহক অর্ডার দিলে কোন টেবিল এবং কলামগুলি আপডেট হয়? এবং মাসিক বিক্রয় রিপোর্টের জন্য কোনগুলি? তথ্যটি সম্ভবত একই নথিতে থাকা উচিত।
এটি হ'ল: অর্ডারটির জন্য একটি দস্তাবেজ, যেখানে প্রশ্নের সরলকরণের জন্য প্রয়োজনীয় নকল ক্ষেত্রগুলি সহ গ্রাহক আইডি এবং পণ্য আইডি রয়েছে। ডকুমেন্টের মধ্যে যে কোনও কিছু সহজেই জিজ্ঞাসা করা যেতে পারে, অর্ডার এবং গ্রাহক বলার মধ্যে যে কোনও কিছু ক্রস-রেফারেন্সিংয়ের প্রয়োজন তা ক্লায়েন্টকেই করতে হবে। সুতরাং আপনি যদি অঞ্চল দ্বারা বিক্রয় সম্পর্কিত কোনও প্রতিবেদন চান তবে আপনার সম্ভবত একটি অঞ্চল কোডটি অর্ডার করা উচিত।
আপনি কি এখনই সুস্পষ্ট ডেটা মডেলগুলি করেন (যেমন ইউএমএলে)?
দুঃখিত, নথি ডিবিগুলির আগে কখনও খুব বেশি ইউএমএল করেনি :)
তবে আপনাকে কোন ধরণের মডেল বলতে হবে যা কোন নথিতে কোন ক্ষেত্রের অন্তর্গত এবং কী ধরণের মান রয়েছে। আপনার নিজের রেফারেন্সের জন্য পরে এবং ডিবি ব্যবহার করে অ্যারবড কনভেনশনগুলি জানেন কিনা তা নিশ্চিত করে। যেহেতু আপনি কোনও পাঠ্য ক্ষেত্রে একটি তারিখ সঞ্চয় করে রাখলে আপনি আর ত্রুটি পাবেন না, উদাহরণস্বরূপ, এবং যে কেউ তাদের মতো যে কোনও ক্ষেত্র যুক্ত করতে বা মুছে ফেলতে পারে, স্ল্যাকটি তুলতে আপনার বৈধতা কোড এবং কনভেনশন উভয়েরই দরকার। বিশেষত যদি আপনি বাহ্যিক সংস্থান নিয়ে কাজ করেন।
আপনি কি আরডিবিএমএস সরবরাহ করে এমন কোনও অতিরিক্ত অতিরিক্ত পরিষেবা মিস করেন?
নাঃ। তবে আমার পটভূমি হ'ল ওয়েব অ্যাপ্লিকেশন বিকাশকারী, আমরা কেবলমাত্র আমাদের প্রয়োজনীয় ডেটাবেসগুলিতেই ডিল করি :)
আমি যে সংস্থার জন্য কাজ করতাম সেগুলি এমন একটি পণ্য তৈরি করেছিল (একটি ওয়েব অ্যাপ) যা একাধিক বিক্রেতাদের এসকিউএল ডেটাবেসগুলি জুড়ে চালনার জন্য ডিজাইন করা হয়েছিল এবং "অতিরিক্ত পরিষেবাদিগুলি" ডিবি থেকে ডিবি থেকে এতই আলাদা যে তাদের প্রতিটি ডিবিতে পৃথকভাবে প্রয়োগ করতে হয়েছিল। সুতরাং আরডিবিএমএস থেকে কার্যকারিতা সরিয়ে নেওয়া আমাদের পক্ষে কম কাজ ছিল না। এটি এমনকি পুরো পাঠ্য অনুসন্ধানে প্রসারিত।
তাই আমি যা যা দিচ্ছি তা হ'ল এমন কিছু যা আমি আসলেই প্রথম স্থানে ছিলাম না। স্পষ্টতই, আপনার অভিজ্ঞতা পৃথক হতে পারে।
একটি সতর্কতামূলক: আমি এখন যা কাজ করছি তা হ'ল আর্থিক ডেটা, স্টক কোট এবং এর মতো একটি ওয়েব অ্যাপ। এটি ডকুমেন্ট ডিবির পক্ষে খুব ভাল মিল, আমার দৃষ্টিকোণ থেকে আমি কোনও ঝামেলা ছাড়াই একটি ডিবি (জেদী এবং প্রশ্ন) এর সমস্ত সুবিধা পাই।
তবে এই তথ্যগুলি একে অপরের থেকে মোটামুটি স্বতন্ত্র, কোনও জটিল সম্পর্কিত সম্পর্কিত প্রশ্ন নেই। টিকারের মাধ্যমে সর্বশেষ উদ্ধৃতিগুলি পান, টিকার এবং তারিখের সীমা অনুসারে উদ্ধৃতিগুলি পান, সংস্থার মেটা-তথ্য পান, এটি অনেক কিছুই। অন্য একটি উদাহরণ যা আমি দেখেছি এটি একটি ব্লগ অ্যাপ্লিকেশন ছিল এবং ব্লগগুলি ব্যাপকভাবে জটিল ডেটাবেস স্কিমার দ্বারা চিহ্নিত করা হয় না।
আমি যা বলতে চাইছি তা হ'ল ডকুমেন্ট ডিবিগুলির সমস্ত সফল অ্যাপ্লিকেশনগুলি এমন ডেটার সাথে ছিল যার প্রথমদিকে খুব বেশি আন্তঃসম্পর্ক ছিল না: নথি (গুগল অনুসন্ধানে), ব্লগ পোস্ট, নিউজ নিবন্ধ, আর্থিক তথ্য ।
আমি প্রত্যাশা করি যে ডকুমেন্টের মডেলের চেয়ে এসকিউএল এর চেয়ে বেশি মানচিত্রের ডেটাসেট রয়েছে, তাই আমি কল্পনা করি যে এসকিউএল টিকে থাকবে।
তবে আমাদের মধ্যে যারা তথ্য সংরক্ষণ এবং পুনরুদ্ধার করার সহজ উপায় চান - এবং আমি সন্দেহ করি যে আমাদের মধ্যে অনেকগুলি রয়েছে - নথির ডাটাবেস (কাউচডিবি হিসাবে) একটি গডসেন্ড।