মঙ্গোডিবি স্কিমা ডিজাইন - অনেকগুলি ছোট নথি বা আরও কম বড় দলিল?


89

পটভূমি
আমি আমাদের আরডিবিএমএস ডাটাবেস থেকে মঙ্গোডিবিতে রূপান্তরটির প্রোটোটাইপ করছি। অস্বীকার করার সময় মনে হয় আমার কাছে দুটি পছন্দ আছে, এটির ফলে অনেকগুলি (মিলিয়ন) ছোট ডকুমেন্ট বা একটি যা কম (শত শত) বড় দলিলের দিকে নিয়ে যায়।

যদি আমি এটিকে একটি সাধারণ অ্যানালগ থেকে ছড়িয়ে দিতে পারি তবে এটির (জাভাতে) কম গ্রাহক দলিল সহ একটি সংগ্রহের মধ্যে পার্থক্য হবে:

ক্লাস গ্রাহক {
    ব্যক্তিগত স্ট্রিং নাম;
    ব্যক্তিগত ঠিকানা ঠিকানা;
    // প্রতিটি ক্রেডিটকার্ডে শত শত প্রদানের দৃষ্টান্ত রয়েছে
    প্রাইভেট সেট <ক্রেডিটকার্ড> ক্রেডিটকার্ডস;
}

বা এরকম অনেকগুলি অর্থ প্রদানের নথি সহ একটি সংগ্রহ:

ক্লাস পেমেন্ট {
    ব্যক্তিগত গ্রাহক গ্রাহক;
    ব্যক্তিগত ক্রেডিটকার্ড ক্রেডিটকার্ড;
    ব্যক্তিগত তারিখ বেতন তারিখ;
    ব্যক্তিগত ভাসমান পেঅ্যামাউন্ট;
}

প্রশ্ন
মংগাডিবি কি অনেকগুলি, অনেক ছোট নথি বা আরও কম বড় ডকুমেন্ট পছন্দ করতে ডিজাইন করা হয়েছে? উত্তরটি কি বেশিরভাগ ক্ষেত্রে চালানোর বিষয়ে আমি জিজ্ঞাসা করি? (যেমন গ্রাহক এক্স এর কয়টি ক্রেডিট কার্ড রয়েছে? বনাম সমস্ত গ্রাহক গত মাসে প্রদত্ত গড় পরিমাণ কী ছিল?)

আমি প্রায় কাছাকাছি দেখেছি কিন্তু আমি কোনও মঙ্গোডিবি স্কিমার সেরা অভ্যাসগুলিতে হোঁচট খাইনি যা আমার প্রশ্নের উত্তর দিতে সহায়তা করবে।

উত্তর:


82

আপনি যা করছেন তার জন্য অবশ্যই আপনার অনুকূলিতকরণ প্রয়োজন।

আপনার বর্ণনার উপর ভিত্তি করে আমার সেরা অনুমান এখানে।

আপনি সম্ভবত প্রতিটি গ্রাহকের জন্য সমস্ত ক্রেডিট কার্ড জানতে চান, সুতরাং গ্রাহক অবজেক্টের মধ্যে একটি অ্যারে রাখুন। আপনি প্রতিটি পেমেন্টের জন্য গ্রাহক রেফারেন্সও পেতে চাইবেন। এটি পেমেন্ট ডকুমেন্টকে তুলনামূলকভাবে ছোট রাখবে।

পেমেন্ট অবজেক্টটির স্বয়ংক্রিয়ভাবে নিজস্ব আইডি এবং সূচি থাকবে। আপনি সম্ভবত গ্রাহক রেফারেন্সে একটি সূচকও যুক্ত করতে চাইবেন।

এটি আপনাকে প্রতিবার পুরো গ্রাহক অবজেক্টটি সংরক্ষণ না করে গ্রাহক দ্বারা প্রদানের জন্য দ্রুত অনুসন্ধান করার অনুমতি দেবে।

যদি আপনি "গত মাসে সমস্ত গ্রাহককে প্রদত্ত গড় পরিমাণ কী ছিল" এর মতো প্রশ্নের উত্তর দিতে চান তবে আপনি কোনও মানচিত্র চান / যেকোন আকারের ডেটাসেটের জন্য হ্রাস করতে চলেছেন। আপনি এই প্রতিক্রিয়াটি "রিয়েল-টাইম" পাচ্ছেন না। আপনি দেখতে পাবেন যে গ্রাহকের কাছে "রেফারেন্স" সংরক্ষণ করা এই মানচিত্র-হ্রাসের জন্য সম্ভবত যথেষ্ট ভাল।

সুতরাং আপনার প্রশ্নের সরাসরি জবাব দেওয়ার জন্য: মংগোডিবি কি অনেকগুলি, অনেক ছোট নথি বা আরও কম বড় ডকুমেন্ট পছন্দ করতে ডিজাইন করা হয়েছে?

মঙ্গোডিবি খুব দ্রুত সূচীকৃত এন্ট্রিগুলি সন্ধানের জন্য ডিজাইন করা হয়েছে। মঙ্গোডিবি একটি বড় খড়ের গর্তে কয়েকটি সূঁচ খুঁজে পেতে খুব ভাল । খড়ের ছাদে বেশিরভাগ সূঁচ খুঁজে পাওয়াতে মঙ্গোডিবি খুব ভাল নয় । তাই আপনার সর্বাধিক সাধারণ ব্যবহারের ক্ষেত্রে আপনার ডেটা তৈরি করুন এবং বিরল ব্যবহারের ক্ষেত্রে মানচিত্র লিখুন / চাকরী হ্রাস করুন।


31

মঙ্গোডিবির নিজস্ব ডকুমেন্টেশন অনুসারে মনে হচ্ছে এটি অনেক ছোট নথির জন্য তৈরি করা হয়েছে।

মঙ্গোডিবি-র জন্য পারফরম্যান্স সেরা অভ্যাসগুলি থেকে :

মঙ্গোডিবিতে নথির সর্বাধিক আকার 16 এমবি। অনুশীলনে বেশিরভাগ নথি কয়েকটি কিলোবাইট বা তার চেয়ে কম হয় are টেবিলের চেয়ে টেবিলের চেয়ে সারিগুলির মতো সারিগুলির মতো নথিগুলি বিবেচনা করুন। একক নথিতে রেকর্ডের তালিকা বজায় রাখার পরিবর্তে প্রতিটি রেকর্ডকে একটি নথি তৈরি করুন document

মংগোডিবি স্কিমা ডিজাইনের জন্য থাম্বের 6 টি বিধি থেকে : পর্ব 1 :

মডেলিং এক থেকে কয়েক

"এক থেকে কয়েক" উদাহরণ একটি ব্যক্তির ঠিকানা হতে পারে। এটি এম্বেড করার জন্য ভাল ব্যবহারের ক্ষেত্রে - আপনি ঠিকানাগুলি আপনার ব্যক্তির বস্তুর ভিতরে একটি অ্যারেতে রেখে দিতেন।

একটি থেকে অনেক

"এক থেকে বহু" উদাহরণ একটি প্রতিস্থাপন যন্ত্র ক্রম সিস্টেমের মধ্যে একটি পণ্য অংশ হতে পারে। প্রতিটি প্রোডাক্টে কয়েক শতাধিক রিপ্লেসমেন্ট অংশ থাকতে পারে তবে কয়েক হাজার বা তার বেশি কখনও হবে না। রেফারেন্সিংয়ের জন্য এটি একটি ভাল ব্যবহারের ক্ষেত্রে - আপনি অংশের অবজেক্টআইডিগুলিকে পণ্য নথিতে একটি অ্যারে রেখে দিতেন।

ওয়ান-টু-স্কিলিয়নে

"এক-থেকে-স্কিলিলিয়নে" উদাহরণ একটি ইভেন্ট লগিং সিস্টেম হতে পারে যা বিভিন্ন মেশিনের জন্য লগ বার্তা সংগ্রহ করে। যে কোনও হোস্ট 16 এমবি ডকুমেন্ট আকারটি উপচে পড়ার জন্য যথেষ্ট বার্তা উত্পন্ন করতে পারে, এমনকি যদি অ্যারেতে থাকা সমস্ত আপনার অবজেক্টইড হয়। এটি "প্যারেন্ট-রেফারেন্সিং" এর ক্লাসিক ব্যবহারের কেস - আপনার কাছে হোস্টের জন্য একটি নথি থাকতে হবে এবং তারপরে লগ বার্তাগুলির জন্য নথিতে হোস্টের অবজেক্টআইডি সংরক্ষণ করুন।


12

সময়ের সাথে যথেষ্ট পরিমাণে বেড়ে ওঠা ডকুমেন্টগুলি টাইম বোমা টিক দিতে পারে। নেটওয়ার্ক ব্যান্ডউইথ এবং র‌্যাম ব্যবহার সম্ভবত পরিমাপযোগ্য বাধা হয়ে উঠবে, আপনাকে আরম্ভ করতে বাধ্য করবে।

প্রথমে দুটি সংগ্রহ বিবেচনা করা যাক: গ্রাহক এবং অর্থ প্রদান। সুতরাং, শস্য মোটামুটি ছোট: প্রতি পেমেন্টের জন্য একটি নথি।

পরবর্তী আপনাকে অবশ্যই ক্রেডিট কার্ডগুলির মতো অ্যাকাউন্টের তথ্য মডেল করবেন decide গ্রাহক নথিগুলিতে অ্যাকাউন্টের তথ্যের অ্যারে রয়েছে বা আপনার কোনও নতুন অ্যাকাউন্ট সংগ্রহের প্রয়োজন কিনা তা বিবেচনা করা যাক।

যদি অ্যাকাউন্টের নথিগুলি গ্রাহক দলিলগুলি থেকে পৃথক হয় তবে এক গ্রাহকের জন্য সমস্ত অ্যাকাউন্ট মেমরিতে লোড করার জন্য একাধিক নথি আনতে হবে। এটি অতিরিক্ত মেমরি, আই / ও, ব্যান্ডউইথ এবং সিপিইউ ব্যবহারে অনুবাদ করতে পারে। এর অর্থ কী তাৎক্ষণিকভাবে অ্যাকাউন্ট সংগ্রহটি একটি খারাপ ধারণা?

আপনার সিদ্ধান্ত প্রদানের দস্তাবেজগুলিকে প্রভাবিত করে। যদি অ্যাকাউন্টের তথ্য কোনও গ্রাহক নথিতে এম্বেড থাকে তবে আপনি কীভাবে এটি উল্লেখ করবেন? পৃথক অ্যাকাউন্টের দস্তাবেজের নিজস্ব _ আইডি বৈশিষ্ট্য রয়েছে। এম্বেড থাকা অ্যাকাউন্টের তথ্য সহ, আপনার অ্যাপ্লিকেশনটি হয় অ্যাকাউন্টগুলির জন্য নতুন আইডি তৈরি করবে বা কীটির জন্য অ্যাকাউন্টের বৈশিষ্ট্যগুলি (যেমন, অ্যাকাউন্ট নম্বর) ব্যবহার করবে।

কোনও পেমেন্ট ডকুমেন্টে আসলে নির্দিষ্ট সময়সীমার (যেমন, দিন?) তৈরি করা সমস্ত পেমেন্ট থাকতে পারে। এই জাতীয় জটিলতা পেমেন্ট ডকুমেন্টগুলি পড়ার এবং লেখার সমস্ত কোডকে প্রভাবিত করবে। অকাল অপটিমাইজেশন প্রকল্পগুলির জন্য মারাত্মক হতে পারে।

অ্যাকাউন্টের দস্তাবেজের মতো, অর্থ প্রদানের দস্তাবেজে কেবলমাত্র একটি অর্থ প্রদানের সময় পর্যন্ত পেমেন্টগুলি সহজেই রেফারেন্স করা হয়। একটি নতুন ধরণের দস্তাবেজ, উদাহরণস্বরূপ ক্রেডিট, অর্থ প্রদানের বিষয়ে উল্লেখ করতে পারে। তবে আপনি কি কোনও ক্রেডিট সংগ্রহ তৈরি করবেন বা অর্থ প্রদানের তথ্যের অভ্যন্তরে ক্রেডিট তথ্য এম্বেড করবেন? আপনার যদি পরে কোনও ক্রেডিট উল্লেখ করার দরকার হয় তবে কী হবে?

সংক্ষেপে বলতে গেলে, আমি প্রচুর ছোট দস্তাবেজ এবং অনেকগুলি সংগ্রহ করে সফল হয়েছি। আমি _আইডি এবং কেবল _ আইডি সহ রেফারেন্সগুলি প্রয়োগ করি। সুতরাং, আমি ক্রমবর্ধমান নথিগুলি আমার অ্যাপ্লিকেশনটি ধ্বংস করে নিয়ে চিন্তা করি না। স্কিমাটি বোঝা এবং সূচকগুলি সহজ কারণ প্রতিটি সত্তার নিজস্ব সংগ্রহ রয়েছে। গুরুত্বপূর্ণ সত্ত্বা অন্যান্য নথির ভিতরে লুকিয়ে নেই।

আমি আপনার অনুসন্ধান সম্পর্কে শুনতে পছন্দ করি। শুভকামনা!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.