পটভূমি :
আমি একটি ওয়েব অ্যাপ্লিকেশন তৈরি করেছি যা আমি যুক্তিসঙ্গতভাবে ভাল স্কেল করতে সক্ষম হতে চাই। আমি জানি আমি গুগল বা টুইটার নই, তবে আমার অ্যাপ্লিকেশনটিতে প্রতিটি ব্যবহারকারীর জন্য যথেষ্ট পরিমাণে ডেটা ব্যবহার করা হয় এবং এর ফলে যথেষ্ট উচ্চ ডেটা প্রয়োজনীয়তা থাকে। আমি পরে সবকিছু পুনর্নির্মাণ না করে যুক্তিসঙ্গতভাবে স্কেল করতে প্রস্তুত হতে চাই।
আমি নিজেকে একটি সফ্টওয়্যার বিকাশকারী হিসাবে বিবেচনা করি, ডাটাবেস বিশেষজ্ঞ নয়। এজন্য আমি এখানে পোস্ট করছি। আশা করি অনেক বেশি ডাটাবেস দক্ষতার সাথে কেউ আমাকে পরামর্শ দিতে পারেন।
তুলনামূলকভাবে বিপুল সংখ্যক ব্যবহারকারীর সাথে, তবে ফেসবুক সংখ্যার মতো কিছুই নয়, আমি এমন একটি ডিবি রাখার প্রত্যাশা করি যা দেখতে এটির মতো দেখায়:
একটি "বড় টেবিল":
- 250 মিলিয়ন রেকর্ড
- 20 কলাম
- প্রায় 100 জিবি ডেটা
- একটি সূচক বিগিন্ট (20) বিদেশী কী রয়েছে
- একটি ইনডেক্সযুক্ত বারচর (500) স্ট্রিং_আইডি কলাম রয়েছে
- এর কোন (11) "মান" কলাম রয়েছে
অন্যান্য 4 টেবিল:
- এক মিলিয়ন রেকর্ড
- প্রতিটি প্রায় 2 - 4 জিবি ডেটা
- এই টেবিলগুলির প্রত্যেকের 4 - 8 কলাম রয়েছে
- একটি কলামটি তারিখের তারিখ_ক্রিয়েট করা হয়
- একটি কলামটি হ'ল ভারচার (500) স্ট্রিং_আইডি কলাম
- এই টেবিলগুলির প্রতিটি থেকে একটি বা দুটি কলাম একটি যোগদানের জন্য নির্বাচিত হবে
এগুলির মধ্যে একটি সারণী গড় সংরক্ষণের জন্য ব্যবহৃত হয় - এর স্কিমাটি হ'ল বিগিন্ট (20) আইডি, বর্ণচর (20) স্ট্রিং_আইডি, তারিখের তারিখ_সৃজন, ভাসমান গড়_মূল্য
আমি কী করতে চাই - দুটি তুলনামূলকভাবে ব্যয়বহুল প্রশ্ন:
নতুন গড় মান গণনা করুন:
- একটি বিদেশী কী ব্যবহার করে, বড় টেবিল থেকে কয়েক মিলিয়ন আলাদা আলাদা রেকর্ড নির্বাচন করুন।
- স্ট্রিং_আইডি দ্বারা গোষ্ঠী করে একটি নতুন গড় গণনা করুন।
- গড় সারণিতে ফলাফল সন্নিবেশ করান।
- বর্তমানে নির্মিত হিসাবে, এই ক্যোয়ারিতে দুটি যোগ দেয়।
পরিবেশন করা ব্যবহারকারীদের জন্য অ-সাধারণীকরণযোগ্য, কেবল পঠনযোগ্য রেকর্ডগুলি তৈরি করুন:
- বড় টেবিল থেকে 1,000-40,000 রেকর্ড থেকে যে কোনও জায়গা বেছে নিতে বিদেশী কী ব্যবহার করুন।
- স্ট্রিং আইডি কলাম সহ নতুন রেকর্ডে অন্য চারটি সারণীর প্রত্যেকটির সাথে যোগ দিন।
- একটি ডি-নর্মালাইজ টেবিলের মধ্যে ফলাফলগুলি সন্নিবেশ করান।
- এই রেকর্ডগুলি ব্যবহারকারীদের তথ্য প্রদর্শনের জন্য সম্মুখ-প্রান্তে ব্যবহারের জন্য।
- বর্তমানে নির্মিত হিসাবে, এই ক্যোয়ারিতে চারটি যোগ যোগ হয়।
আমি এই ব্যয়বহুল প্রশ্নের প্রতিটি ব্যাচের ব্যাক-এন্ড ডাটাবেসে চালানোর পরিকল্পনা করেছি যা এর ফলাফলগুলি রিয়েল-টাইম ফ্রন্ট-এন্ড ডিবি সার্ভারে ঠেলে দেবে যা ব্যবহারকারীদের অনুরোধগুলি পরিচালনা করে। এই প্রশ্নগুলি নিয়মিত বিরতিতে চালানো হবে। আমি কতবার সিদ্ধান্ত নিই না। গড় ক্যোয়ারী সম্ভবত প্রতিদিন একবার করা যেতে পারে। ডি-নরমালাইজ ক্যোয়ারীটি আরও ঘন ঘন হওয়া প্রয়োজন - সম্ভবত প্রতি কয়েক মিনিটে।
এই সমস্ত প্রশ্নের প্রত্যেকটি বর্তমানে "বিগ টেবিল" -এ 100 কে রেকর্ডযুক্ত একটি ডেটাসেট সহ খুব নিম্ন-প্রান্তের মেশিনে মাইএসকিউএলে কয়েক সেকেন্ডে চলে। আমি আমার স্কেল করার ক্ষমতা এবং স্কেলিংয়ের ব্যয় উভয় সম্পর্কেই উদ্বিগ্ন।
প্রশ্নসমূহ :
- এই পদ্ধতির শব্দটি কি মনে হচ্ছে না? এটি একটি বৃহত-চিত্রের দৃষ্টিকোণ থেকে স্পষ্টতই কিছু ভুল আছে?
- কোনও আরডিবিএমএস কি সঠিক সরঞ্জাম, বা হাডোপ পরিবারের কোনও কিছুর মতো অন্যান্য "বিগ ডেটা" সমাধানগুলি আমার দিকে তাকানো উচিত? আমার প্রবণতাটি আরডিবিএমএস ব্যবহার করা কারণ ডেটাটি কাঠামোযুক্ত এবং সম্পর্কিত মডেলটির সাথে দুর্দান্তভাবে ফিট করে। যদিও একটি নির্দিষ্ট সময়ে, এটি আমার বোঝার বিষয় যে আমি আর আরডিবিএমএস আর ব্যবহার করতে পারব না। এটা কি সত্যি? এই সুইচ কখন প্রয়োজন হবে?
- এটা কি কাজ করবে? এই প্রশ্নগুলি কি যুক্তিসঙ্গত সময়ে চালানো যেতে পারে? আমি ক্যোয়ারী # 1 এর জন্য সম্ভবত কয়েক ঘন্টা অপেক্ষা করতে পারি, তবে ক্যোয়ারী # 2 কয়েক মিনিটের মধ্যে শেষ করা উচিত।
- একটি হার্ডওয়্যার দৃষ্টিকোণ থেকে আমার কী বিবেচনা করা উচিত? আমার র্যাম এবং সিপিইউ বাধা কী হতে পারে? আমি ধরে নিই র্যামের সূচীগুলি রাখা গুরুত্বপূর্ণ। আমার অন্য কিছু বিবেচনা করা উচিত?
- এক পর্যায়ে আমাকে সম্ভবত আমার ডেটা বিভাজন করতে হবে এবং একাধিক সার্ভার ব্যবহার করতে হবে। আমার ব্যবহারের ক্ষেত্রে কি মনে হচ্ছে এটি ইতিমধ্যে সেই বিভাগে রয়েছে, বা আমি কিছুক্ষণের জন্য একটি একক মেশিনকে উল্লম্বভাবে স্কেল করতে সক্ষম হব? এটি কি 10x ডেটা দিয়ে কাজ করবে? 100x?