আমার বর্তমান প্রকল্পটি মূলত মিল ডকুমেন্ট ম্যানেজমেন্ট সিস্টেমের একটি রান।
বলেছিল, কিছু ঝক্কি আছে (অবাক, আশ্চর্য)। যদিও কিছু কিছু বলিরেখা প্রকল্পের জন্য মোটামুটি নির্দিষ্ট, তবে আমি বিশ্বাস করি যে কিছু সাধারণ পর্যবেক্ষণ এবং প্রশ্নগুলি এসেছে যাগুলির একটি সাধারণ উত্তর নেই (যা আমি খুঁজে পেতে পারি) এবং এটি একটি বৃহত্তর সমস্যা ডোমেনের জন্য প্রযোজ্য । এখানে অনেক কিছুই রয়েছে এবং আমি নিশ্চিত নই যে এটি স্ট্যাকএক্সচেঞ্জ প্রশ্নোত্তর ফর্ম্যাটের জন্য ভাল ফিট তবে আমি মনে করি এটি ক) একটি উত্তরযোগ্য প্রশ্ন এবং খ) যথেষ্ট-অ-নির্দিষ্ট যে এটি সম্প্রদায়ের পক্ষে উপকৃত হতে পারে। আমার কিছু বিবেচনা আমার জন্য নির্দিষ্ট তবে আমি মনে করি যে প্রশ্নটি যে কোনওর জন্য এসকিউএল বনাম নোএসকিউএল বনাম উভয়ই সিদ্ধান্ত নেওয়ার ক্ষেত্রে সম্মুখীন হতে পারে।
পটভূমি:
আমরা যে ওয়েব অ্যাপটি বানাচ্ছি তার মধ্যে এমন ডেটা রয়েছে যা স্পষ্টভাবে সম্পর্কিত প্রকৃতির পাশাপাশি ডকুমেন্ট-ওরিয়েন্টড ডেটা। আমরা আমাদের কেক রাখতে চাই এবং এটিও খেতে চাই।
টিএল; ডিআর: আমার মনে হয় নীচে # 5 গন্ধ পরীক্ষায় উত্তীর্ণ হয়েছে। আপনি কি? একক প্রয়োগে এসকিউএল এবং এনওএসকিউএল এর যেমন সংহতকরণের অভিজ্ঞতা কি কারও আছে? আমি নীচে সমস্যার এই শ্রেণীর সমস্ত সম্ভাব্য পদ্ধতির তালিকা করার চেষ্টা করেছি। আমি কি একটি প্রতিশ্রুতিবদ্ধ বিকল্প মিস করেছি?
জটিলতার:
- নথির বিভিন্ন শ্রেণি রয়েছে। প্রয়োজনীয়তাগুলি ইতিমধ্যে কয়েক ডজন বিভিন্ন নথির জন্য কল করে। এই সংখ্যাটি কেবল কখনও বাড়বে। সর্বোত্তম সম্ভাব্য কেস হ'ল এটিতে আমরা একটি সাধারণ ডোমেন নির্দিষ্ট ভাষা, কোড উত্পন্নকরণ এবং একটি নমনীয় স্কিমা লাভ করতে পারি যাতে ডোমেইন বিশেষজ্ঞরা ডিবিএ বা প্রোগ্রামারদের হস্তক্ষেপ ছাড়াই নতুন ডকুমেন্ট ক্লাস সংযোজন পরিচালনা করতে পারেন। (দ্রষ্টব্য: ইতিমধ্যে সচেতন আমরা গ্রেনস্পানের দশম বিধি অনুসরণ করছি )
- পূর্ববর্তী সফল লেখকদের সততা প্রকল্পের একটি কেন্দ্রীয় প্রয়োজন requirement ডেটা ব্যবসায়ের সমালোচনা করবে। লেখাগুলিতে সম্পূর্ণ এসআইডি শব্দার্থবিজ্ঞানের ত্যাগ হতে পারে তবে শর্ত থাকে যে সফলভাবে লিখিত জিনিসগুলি লিখিত থাকে।
- দলিলগুলি নিজেরাই জটিল। আমাদের নির্দিষ্ট ক্ষেত্রে প্রোটোটাইপ ডকুমেন্টের জন্য দস্তাবেজ উদাহরণস্বরূপ প্রতি 150+ পৃথক টুকরো ডেটা সঞ্চয় করতে হবে। প্যাথলজিকাল কেসটি আরও বেশি আকারের ক্রম হতে পারে তবে দুটি নয়।
- একক শ্রেণীর নথি হ'ল সময়ের পরে আপডেটের সাথে চলমান লক্ষ্য বিষয়।
- আমরা যখন জাজানো থেকে কোনও সম্পর্কিত ডেটাবেসে প্রবেশ করি তখন আমরা ফ্রি স্টাফ পছন্দ করি। জাঙ্গো-ননরেল কাঁটাচামচ ব্যবহার করার জন্য আমরা দু'টি জ্যাঙ্গো সংস্করণ ফিরে না রেখেই ফ্রিবিজগুলি রাখতে চাই। ওআরএম ডাম্পিং পুরোপুরি 1.3 এ ডাউনগ্রেড করা ভাল।
মূলত, এটি রিলেশনাল ডেটাগুলির এক ধরণের মেশম্যাশ (আপনার সাধারণ ওয়েব অ্যাপ স্টাফ যেমন ব্যবহারকারী, গোষ্ঠী ইত্যাদির পাশাপাশি ডকুমেন্ট মেটাডেটা যা আমাদের রিয়েলটাইমের জটিল প্রশ্নগুলির সাথে টুকরো টুকরো করে কাটাতে সক্ষম হতে হবে) এবং নথির ডেটা (যেমন যে শত শত ক্ষেত্রের সাথে আমাদের যোগদান বা জিজ্ঞাসাবাদে আমাদের আগ্রহ নেই - তথ্যের জন্য আমাদের একমাত্র ব্যবহারের ক্ষেত্রে এটি যে একক দস্তাবেজ প্রবেশ করানো হয়েছিল তা দেখানোর জন্য হবে)।
আমি আমার পছন্দসই পদ্ধতিতে স্যানিটি চেক করতে চাই (যদি আপনি আমার পোস্টিংয়ের ইতিহাস পরীক্ষা করেন তবে আমি ডিবিএ নই এই বিষয়টি সম্পর্কে আমি স্পষ্টভাবেই স্পষ্ট হয়েছি) পাশাপাশি অন্যদের সমাধানের জন্য আমি যে সমস্ত বিকল্পগুলি পেয়েছি সেগুলি গণনা করতে চাই আপেক্ষিক এবং অ-সম্পর্কিত উভয় ডেটা জড়িত ব্যাপকভাবে একই সমস্যা।
প্রস্তাবিত সমাধান:
1. ডকুমেন্ট ক্লাসে এক টেবিল
প্রতিটি নথি শ্রেণি সমস্ত মেটাডেটা এবং ডেটার জন্য কলাম সহ নিজস্ব টেবিল পায় gets
সুবিধাদি:
- স্ট্যান্ডার্ড এসকিউএল ডেটা মডেলটি চলছে।
- রিলেশনাল ডেটা সর্বোত্তম পদ্ধতিতে পরিচালনা করা হয়। আমাদের প্রয়োজন হলে পরে অস্বীকৃতি জানাব।
- জ্যাঙ্গোর অন্তর্নির্মিত অ্যাডমিন ইন্টারফেস এই টেবিলগুলিকে অন্তর্নিম্নকরণের সাথে স্বাচ্ছন্দ্যযুক্ত এবং ওআরএম বাক্সের বাইরে থাকা 100% ডেটা সহ সুখে বসবাস করতে পারে।
অসুবিধা:
- দুঃস্বপ্ন রক্ষণাবেক্ষণ। কয়েক হাজার কলাম সহ কয়েক ডজন (শত?) সারণী।
- কোন টেবিলে লিখতে হবে তা ঠিক করার জন্য দায়ী অ্যাপ্লিকেশন-স্তরের যুক্তি। সন্ধানের দুর্গন্ধের জন্য টেবিলের নামটি একটি প্যারামিটার তৈরি করা।
- মূলত সমস্ত ব্যবসায়ের যুক্তি পরিবর্তনের জন্য স্কিমা পরিবর্তন প্রয়োজন।
- প্যাথলজিকাল ক্ষেত্রে একাধিক টেবিল জুড়ে একক ফর্মগুলির জন্য স্ট্রাইপিং ডেটার দরকার হতে পারে (দেখুন: পোস্টগ্রিএসকিউএল টেবিলের সর্বাধিক সংখ্যক কলাম কী? )
- আমাদের সম্ভবত একটি সত্য, সত্য-toশ্বরের ডিবিএর সন্ধান করা দরকার যিনি নিঃসন্দেহে জীবন এবং আমাদের ঘৃণা করে।
2. EAV মডেলিং
এখানে কেবল একটি ক্ষেত্রের টেবিল রয়েছে। সত্তা-গুণ-মান মডেলিং ইতিমধ্যে ভাল বোঝা গেছে। আমি এটি সম্পূর্ণতার জন্য অন্তর্ভুক্ত করেছি। আমি মনে করি না যে 2013 সালে কোনও নতুন প্রকল্প শুরু হচ্ছে উদ্দেশ্য অনুযায়ী একটি EAV পদ্ধতির সাথে যাবে।
সুবিধাদি:
- মডেল করা সহজ।
অসুবিধা:
- জিজ্ঞাসা করা আরও কঠিন।
- একটি অ্যাপ্লিকেশন-স্তরের অবজেক্টকে কী গঠন করে তার জন্য ডিবি স্তরটির আর সরাসরি-ফরোয়ার্ড উপস্থাপনা নেই।
- আমরা ডিবি-স্তরের সীমাবদ্ধ চেকিং হারাব।
- এক টেবিলের সারিগুলির সংখ্যা 100 সেকেন্ডের-বার কয়েক গুণ দ্রুত গতিতে বাড়বে। সম্ভাব্য ভবিষ্যতের ব্যথা পয়েন্ট, কর্মক্ষমতা-ভিত্তিক।
- সীমিত সূচক সম্ভব।
- ডিবি স্কিমা যতক্ষণ না ওআরএম সম্পর্কিত, তত্ক্ষণাতীত। ব্যাটারি অন্তর্ভুক্ত ওয়েব অ্যাপ স্টাফ সংরক্ষণ করা হয় তবে কাস্টম ডেটা মডেলগুলিতে কাস্টম অনুসন্ধানগুলির প্রয়োজন হয়।
৩. পোস্টগ্রিএসকিউএল হস্টোর বা জেসন ক্ষেত্রগুলি ব্যবহার করুন
এই ক্ষেত্রের যে কোনওটি একটি সম্পর্কিত ডিবির প্রসঙ্গে স্কিমহীন ডেটা সঞ্চয় করার কৌশল করবে। একমাত্র কারণ আমি এই সমাধান ঝাঁপ না অবিলম্বে এটা অপেক্ষাকৃত নতুন হয় (সংস্করণ 8.4 তাই চালু যে নতুন), আমি এটি শূন্য পূর্ববর্তী এক্সপোজার আছে এবং আমি সন্দেহজনক নই। মোংগো নথির মধ্যে রেফারেন্স পরিচালনা করতে পারলেও - আমি আমার সমস্ত সুন্দর, সহজেই স্বাভাবিক করা ডেটা মঙ্গোতে ফেলে দিতে অস্বস্তি বোধ করব ঠিক একই কারণে এটি আমাকে ভুল হিসাবে আঘাত করে।
সুবিধাদি:
- আমরা জ্যাঙ্গো ওআরএম এবং অন্তর্নির্মিত লেখক এবং সেশন পরিচালনার সুবিধা পেয়েছি।
- সবকিছু অন্যান্য ব্যাকএন্ডে থাকে যা আমরা আগে অন্যান্য প্রকল্পগুলিতে সাফল্যের সাথে ব্যবহার করেছি।
অসুবিধা:
- এটির সাথে ব্যক্তিগতভাবে অভিজ্ঞতা নেই।
- এটি খুব বেশি ব্যবহৃত বৈশিষ্ট্যের মতো দেখাচ্ছে না। দেখে মনে হচ্ছে যে তারা এনওএসকিউএল সমাধানগুলি খুঁজছেন তাদের কাছে বেশ খানিকটা সুপারিশ করা হয়েছে তবে তারা যে নির্বাচিত হচ্ছেন তার অনেক প্রমাণ আমি দেখতে পাচ্ছি না। এটি আমাকে ভাবতে বাধ্য করে যে আমি অবশ্যই কিছু মিস করছি।
- সঞ্চিত সমস্ত মান স্ট্রিং। ডিবি-স্তরের সীমাবদ্ধতা পরীক্ষা করা হারাবেন।
- হস্টোরের ডেটা ব্যবহারকারীর কাছে প্রদর্শিত হবে না যতক্ষণ না তারা নির্দিষ্টভাবে কোনও দস্তাবেজ দেখে, তবে আরও মানক কলামগুলিতে সজ্জিত মেটাডেটা হবে। আমরা সেই মেটাডেটাটিকে মারধর করব এবং আমি উদ্বেগ করছি যে আমরা যে বড় বড় স্টোরগুলি তৈরি করব তা পারফরম্যান্সের অপূর্ণতাগুলি নিয়ে আসতে পারে।
৪. পুরো বোর ডকুমেন্ট-ভিত্তিক যান
সমস্ত জিনিস নথি তৈরি করুন (মঙ্গোডিবি অর্থে)। এক ধরণের একক সংগ্রহ তৈরি করুন Document
এবং এটিকে একটি দিন কল করুন। মঙ্গোতেও সমস্ত পেরিফেরাল ডেটা (ব্যবহারকারী অ্যাকাউন্ট, গোষ্ঠী ইত্যাদির ডেটা সহ) আনুন। এই সমাধানটি অবশ্যই ইএভি মডেলিংয়ের চেয়ে ভাল তবে একই কারণে এটি আমার কাছে ভুল বোধ করে # 3 ভুল অনুভব করেছে - তারা উভয়ই আপনার হাতুড়িটিকে স্ক্রু ড্রাইভার হিসাবে ব্যবহার করার মতো বোধ করে।
সুবিধাদি:
- সামনে তথ্য উপস্থাপন করার দরকার নেই। টাইপের নথি সহ একটি সংগ্রহ করুন
Document
এবং এটিকে একটি দিন কল করুন। - ভাল স্কেলিং বৈশিষ্ট্য হিসাবে পরিচিত, লক্ষ লক্ষ বা এমনকি বিলিয়ন ডকুমেন্টকে ঘিরে রাখার জন্য সংগ্রহটি বাড়ানো উচিত।
- JSON ফর্ম্যাট (BSON) বিকাশকারীদের জন্য স্বজ্ঞাত।
- আমি যেমন এটি বুঝতে পেরেছি (যা কেবলমাত্র এই মুহুর্তে অস্পষ্টভাবেই), লেখার-উদ্বেগের স্তরের বিষয়ে বিতর্কিত হয়ে এমনকি একটি একক উদাহরণ হার্ড ড্রাইভের ক্র্যাশ পর্যন্ত সমস্ত কিছুর ক্ষেত্রে সবকিছুই শক্তিশালী ডেটা সুরক্ষা সরবরাহ করতে পারে।
অসুবিধা:
- জেঙ্গো ট্রাঙ্কের জন্য ওআরএম উইন্ডোটির বাইরে। ফ্রিবিজ যা এর সাথে উইন্ডোতে যায়: লেখার কাঠামো, সেশন ফ্রেমওয়ার্ক, অ্যাডমিন ইন্টারফেস, অবশ্যই আরও অনেকগুলি বিষয়।
- হয় মঙ্গোর রেফারেন্সিং ক্ষমতাগুলি (যার জন্য একাধিক প্রশ্নের প্রয়োজন) অবশ্যই ব্যবহার করা উচিত বা ডেটা ডেনরমালাইজ করতে হবে। আমরা কেবল জ্যাঙ্গো থেকে পেয়েছি এমন ফ্রিবিই হারাতে পারি না, আমরা পোস্টগ্রেএসকিউএল-তে সম্মতি জানানো জিনদের মতো ফ্রিবিও হারিয়েছি lose
- তথ্য সুরক্ষা। যখন কেউ মঙ্গোডিবি সম্পর্কে পড়ে, মনে হয় সর্বদা কমপক্ষে একজন ব্যক্তি কীভাবে এটি আপনার ডেটা আপ করবেন এবং কীভাবে হারাবেন তা উল্লেখ করছেন is তারা কখনই কোনও নির্দিষ্ট ঘটনা উদ্ধৃত করে না এবং এটি সমস্তই হোগওয়াশ হতে পারে বা কেবল পুরানো ডিফল্ট আগুনের সাথে সম্পর্কিত এবং লেখার-উদ্বেগকে ভুলে যায় তবে এটি এখনও আমাকে চিন্তিত করে। আমরা অবশ্যই যেকোন ক্ষেত্রে একটি মোটামুটি অদ্ভুত ব্যাকআপ কৌশল ব্যবহার করব (যদি ডেটা নিঃশব্দে কলুষিত করা হয় তবে অবশ্যই তা অবাস্তব হতে পারে ..)।
৫. পোস্টগ্রিসএসকিউএল এবং মঙ্গোডিবি
রিলেশনাল ডেটা রিলেশনাল ডাটাবেসে যায় এবং ডকুমেন্টের ডেটা ডকুমেন্ট-ভিত্তিক ডাটাবেসে যায় goes documents
রিলেশনাল ডাটাবেস টেবিলের ডাটা আমরা সূচক বা ছে এবং পাশা করতে হতে পারে সেইসাথে একটি MongoDB অবজেক্ট-যা আমরা ব্যবহার করেন, যখন আমরা দস্তাবেজগুলিতে ক্ষেত্র প্রকৃত মানের জন্য কোয়েরি করা প্রয়োজন সব ধারণ করে। আমরা নিজেরাই নথির মানগুলির জন্য ওআরএম বা অন্তর্নির্মিত অ্যাডমিনটি ব্যবহার করতে সক্ষম হব না তবে এটি এত বড় ক্ষতি নয় যেহেতু পুরো অ্যাপ্লিকেশনটি মূলত নথির জন্য অ্যাডমিন ইন্টারফেস এবং আমাদের সম্ভবত এটি করতে হত ওআরএমের সেই নির্দিষ্ট অংশটিকে আমাদের গ্রহণযোগ্যতার মতো কাজ করতে অগ্রহণযোগ্য ডিগ্রিতে কাস্টমাইজ করুন।
সুবিধাদি:
- প্রতিটি ব্যাকএন্ড এটি করা ভাল যা তা করে।
- মডেলগুলির মধ্যে উল্লেখগুলি একাধিক প্রশ্নের প্রয়োজন ছাড়াই সংরক্ষণ করা হয়।
- ব্যবহারকারী, সেশন ইত্যাদির মতো জ্যাঙ্গো আমাদের যে ব্যাটারি দিয়েছিল তা আমরা রাখতে পারি।
documents
ডকুমেন্টের কতগুলি শ্রেণি তৈরি করা হয় তা কেবল কেবল একটি টেবিলের প্রয়োজন ।- প্রায়শই জিজ্ঞাসিত নথির ডেটা অনেক বেশি প্রায়শই জিজ্ঞাসিত মেটাডেটা থেকে দৃ strongly়ভাবে পৃথক করা হয়।
অসুবিধা:
- নথির ডেটা পুনরুদ্ধার করতে প্রথমে এসকিউএল ডিবি এবং তারপরে মঙ্গোডিবি-র বিপরীতে 2 টি ক্রমিক প্রশ্ন প্রয়োজন হবে (যদিও এটি একই রকম ডেঙ্গু মংগোতে সংরক্ষণ করা হত এবং অস্বীকৃত নয়) এর চেয়ে খারাপ নয়)
- লেখা আর পারমাণবিক হবে না। একক মঙ্গো নথির বিরুদ্ধে লিখিতভাবে পারমাণবিক হওয়ার নিশ্চয়তা রয়েছে এবং পিজি অবশ্যই পারমাণবিকতার গ্যারান্টি দিতে পারে তবে উভয় জুড়েই লেখার পারমাণবিকতা নিশ্চিতকরণের জন্য আবেদন যুক্তি প্রয়োজন, কার্যকারিতা এবং জটিলতার জরিমানা নিয়ে সন্দেহ নেই with
- দুটি ব্যাকেন্ডস = দুটি ক্যোয়ারী ভাষা = ভিন্ন ভিন্ন অ্যাডমিন প্রয়োজনীয়তার সাথে দুটি পৃথক প্রোগ্রাম = মেমরির জন্য অপেক্ষায় থাকা দুটি ডাটাবেস।
JSON
ডেটাটাইপযুক্ত কলামে যাব । পোস্টগ্র্রেসে নতুন বৈশিষ্ট্যগুলি ব্যবহারে ভয় পাবেন না - পোস্টগ্র্যাস টিম স্থিতিশীল নয় এমন বৈশিষ্ট্য প্রকাশ করে না। এবং 9.2 আসলে এটি নতুন নয়)। প্লাস আপনি 9.3 এ নতুন JSON বৈশিষ্ট্যগুলি একবার ব্যবহার করার পরে এটি ব্যবহার করতে পারবেন। আপনি যদি সর্বদা আপনার অ্যাপ্লিকেশন কোডে ডকুমেন্টগুলি পুরোপুরি প্রসেস করেন তবে (বরং এসকিউএল ব্যবহার করে), আপনি নিয়মিতtext
কলামে জেএসওএনও সঞ্চয় করতে পারেন ।