কীভাবে মিলিয়ন ব্যবহারকারীকে পরিচালনা করবেন?


17

আমি সত্যিই বড় কিছু চালু করতে চলেছি। আমাকে আমার সার্ভার এবং ডাটাবেস প্রস্তুত করতে হবে।

আমি পৃথক ব্যবহারকারীর টেবিলগুলিতে 100,000 ব্যবহারকারীর প্রতিটি সেটকে গ্রুপ করতে চাই তবে উপযুক্ত ব্যবহারকারী টেবিলে লগ ইন করার চেষ্টা করা কোনও ব্যবহারকারীর কীভাবে সংযুক্ত করতে হয় তা আমি জানি না।

উদাহরণস্বরূপ, আমি কীভাবে জানতে পারি যে ব্যবহারকারীর jay@mail.comব্যবহারকারীর টেবিল # 36 এর সাথে সম্পর্কিত?

এক ব্যবহারকারীর টেবিলে 10 মিলিয়ন বা 100,000 এর 100 জন ব্যবহারকারী কি একই হবে?

কীভাবে ফেসবুক? আমি বিশ্বাস করতে পারি না যে তাদের কাছে 950 মিলিয়ন এন্ট্রি সহ একটি গ্লোবাল ব্যবহারকারী সারণী থাকবে।


I can't believe they would have one global user table with 950 million entries.আমি পারি, এটি এত বড় নয়। আমি বড় টেবিল নিয়ে কাজ করেছি। এটা বেশ সাধারণ। অন্য বিকল্পটি আমি বিবেচনা করব যদি আপনার কাছে অন্যান্য প্রচুর ডেটা হয় তবে কোনও নুএসকিউএল ডাটাবেস।
নিমচিম্পস্কি

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

উত্তর:


30

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

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

আপনি কখন এবং এই স্কেলটিতে পৌঁছান, তখন আপনার কাছে এই ধরণের সমস্যাটি ছুঁড়ে ফেলার জন্য যথেষ্ট পরিমাণ অর্থ এবং সংস্থান থাকবে।


4
Be fast to launch and find the problems as they comeএই অংশটি দুর্দান্ত। সেটা সত্য. যদি আমরা সমস্যাগুলি তারা এখানে আসার সাথে সাথে খুঁজে পাই তবে পরবর্তী সময়ে কোনও গুরুতর সমস্যা হবে না। +1
এএলএইচ

16

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

এক টেবিলের 10 এম টিপলস সম্পর্কিত, আপনার যদি ভাল ইনডেক্সিং থাকে তবে তা ঠিক থাকবে। আমাদের এখানে এক টেবিলের বেশ কয়েকটি 100 মি টুপলস সংরক্ষণ করতে হবে (বিক্রি হওয়া আইটেম) যা বড় ওরাকল 11 জি তে সূক্ষ্মভাবে কাজ করে

ফেসবুকের ডিজি ডিজাইন: ফেসবুক ডাটাবেস ডিজাইনের একটি ম্যাপ সহ ২০১০ সাল থেকে এখানে একটি পোস্ট করা হচ্ছে

আপনি যেমন পার্টিশন প্রকারের সম্পর্কে মাইএসকিএল ডকুমেন্টেশন পড়তে চাইতে পারেন: মাইএসকিউএল ডকুমেন্টেশন: পার্টিনিয়নিং

মাইএসকিউএল এই ধরণের সমর্থন করে:

শ্রেণিটি পার্টিশন। এই ধরণের পার্টিশনটি প্রদত্ত পরিসরের মধ্যে থাকা কলাম মানগুলির ভিত্তিতে পার্টিশনগুলিকে সারিগুলি বরাদ্দ করে। বিভাগ 18.2.1, "পার্টিশন পরিবর্তন করুন" দেখুন।

বিভাজন তালিকাভুক্ত । RANGE দ্বারা পার্টিশন করার অনুরূপ, পৃথক পৃথক মানগুলির একটি সেট মিলিয়ে কলামের ভিত্তিতে পার্টিশনটি নির্বাচন করা হয়। বিভাগ 18.2.2, "পার্টিশনের তালিকা তৈরি করুন" দেখুন।

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

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


7

প্রথমত, ব্যবহারকারীদের পৃথক সারণিতে পৃথক করবেন না। এটি জিনিসগুলিকে জটিল এবং অর্থহীন করে তুলবে। মাইএসকিউএল এবং অন্যান্য ডাটাবেসগুলি কোনও সমস্যা ছাড়াই একই টেবিলে কয়েক মিলিয়ন রেকর্ডের ডাটাবেসের সাথে কাজ করতে পারে (সঠিক প্রাথমিক কীগুলি সেট আপ করা আছে)। প্রতিটি ব্যবহারকারীর (মূল ব্যবহারকারীর টেবিলের) জন্য স্বতন্ত্র এবং প্রাথমিক অনন্য কী ক্ষেত্র ডাটাবেসটি ব্যবহার করুন, সুতরাং প্রতিটি রেকর্ডটি অনন্য (ইউআইডি)। তারপরে অন্যান্য সারণীতে আপনি সেই অনন্য আইডি ব্যবহার করে উল্লেখ করছেন। তারপরে নিশ্চিত হয়ে নিন যে প্রতিটি টেবিলে আপনি এটি প্রাথমিক কী হিসাবে সেট করেছেন, এটি ডাটাবেস সার্ভারের তথ্যের প্রক্রিয়াকরণকে ত্বরান্বিত করবে। এটি কীভাবে ব্যবহারকারীর তথ্য সংরক্ষণ করে তা ড্রুপাল সিএমএস থেকে শিখতে পারেন। লক্ষাধিক ব্যবহারকারী এবং খুব বড় সংস্থাগুলি (বড় মিডিয়া সংস্থাগুলি, সরকার এমনকি বিশ্বের বৃহত্তম ব্যাংকগুলি দ্বারা ব্যবহৃত) দ্বারা 10 বছরেরও বেশি সময়ে পরীক্ষিত। Www.drupal এ। org আপনি একই টেবিলে 1,6 মিলিয়ন পৃষ্ঠাগুলি (নোড) সঞ্চিত পাবেন এবং এতে প্রতি মাসে মিলিয়নেরও বেশি অনন্য দর্শক রয়েছে এবং ওয়েবসাইটটি কোনও ত্রুটি ছাড়াই কাজ করে। সবকিছু যথাযথ অপ্টিমাইজেশন এবং কনফিগারেশন সম্পর্কে।

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

User.install ফাইলে userটেবিল স্কিমা উদাহরণ দেখুন ।


3

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

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

একটি গুরুত্বপূর্ণ বিষয় আপনার লক্ষ্য করা উচিত যে আপনি নসকিএল ডেটাবেস ইত্যাদিতে যোগ দিতে পারবেন না। সুতরাং, আপনার ব্যবহারের জন্য পরিকল্পনা করুন এবং সিদ্ধান্ত নিন। যদি যোগ দেয় এবং মাল্টি-রেকর্ডের লেনদেনগুলি আপনার জন্য প্রয়োজনীয়তা হয় তবে nosql ডাটাবেসগুলি আপনার জন্য নয়।


-3

বর্ণানুক্রমিক সীমার ভিত্তিতে বিভাজন কেন হবে না? আপনার যদি কয়েক মিলিয়ন ব্যবহারকারী থাকে তবে প্রতিটি চিঠির জন্য বা জোড় অক্ষরের জন্য আলাদা টেবিল তৈরি করুন ('এ' দিয়ে ব্যবহারকারী নাম ব্যবহারকারীর জন্য টেবিল 'এ')। এটি প্রথমে অনেকটা ওভারহেড হবে তবে যেহেতু আপনি বড় ডাটাবেসটি আশা করছেন এবং নির্দিষ্ট ব্যবহারকারীর জন্য কোন টেবিলটি ব্যবহার করা উচিত তা আলাদা করতে সক্ষম হতে চান - আমার ধারণা আমি বর্ণানুক্রমিক ক্রমটি সুস্পষ্ট এবং সহজ বিকল্প।


9
এটি একটি সুপার খারাপ ধারণা। উদাহরণস্বরূপ, ব্যবহারকারীরা পদবি পরিবর্তন করলে আপনার সফ্টওয়্যারটি স্বয়ংক্রিয়ভাবে সারিগুলি সরিয়ে নিতে হবে .... যদি আপনি ধারাবাহিকতার বিষয়ে যত্ন নেওয়া বন্ধ না করেন। এই কৌশলটি এই ধরণের आकस्मिकতাকে আমন্ত্রণ জানায়।
এলোমেলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.