মাইএসকিউএল উচ্চ কার্যকারিতা প্রচুর নির্বাচন / INSERTs / আপডেট / ডিলিটগুলির জন্য s


9

আমি একটি মডিউল তৈরি করছি যেখানে প্রতিটি ব্যবহারকারী প্রায়শই 10 থেকে 300 সেকেন্ডের জন্য একটি সারণীতে রেকর্ড পান।

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

ধন্যবাদ!


2
আপনি কি মেমক্যাসে ডেটা সংরক্ষণ করার চেষ্টা করেছেন এবং তারপরে প্রতি কয়েক সেকেন্ডে এটি একটি লেনদেনে ফ্লাশ করেছেন?

3
"এই নির্দিষ্ট টেবিলের জন্য 200 বার / সেকেন্ডের মতো ডেটা পরিবর্তন হয়" আমি মনে করি যে লাইনটি এই ডেটাটি মেমরির মধ্যে রাখা উচিত, যে আজীবন এটি চালিয়ে যেতে হয় তা ক্ষুদ্রতর তাই সম্ভবত ডিস্কে যাওয়া উচিত নয়?

সূচী আসে আর যায়? আপনাকে প্রায়শই সূচী তৈরি এবং বাদ দেওয়ার দরকারের কোনও কারণ আমি ভাবতে পারি না।
ব্যারি ব্রাউন

উত্তর:


3

: একটা জিনিষ বিবেচনা করা হবে যে কিভাবে মাইএসকিউএল তার প্রধান স্টোরেজ ইঞ্জিনের জন্য বাফার ব্যবহার করে InnoDB এবং MyISAM

মেমোরিতে ক্যাশে থাকা কী এই স্টোরেজ ইঞ্জিনগুলির মধ্যে ব্যাপক পার্থক্য করে।

InnoDB ডেটা এবং সূচী উভয় পৃষ্ঠাকেই ক্যাশে করে। এগুলি ইনোডিবি বাফার পুলে লোড করা হয়, যা ইনোডাব_বফার_পুল_সাইজ আকারযুক্ত

মাইআইএসএএম কেবল সূচিপত্রের পৃষ্ঠাগুলি ক্যাশে করে এবং সেগুলি কী-ক্যাশে (কী বাফার) লোড করা হয়, যা কী_বফার_ আকার দ্বারা আকারযুক্ত

আপনি ব্যবহার করা আবশ্যক information_schema.tables ডেটা পেতে এবং সূচক মাপ করার জন্য ডিস্কে দখল InnoDB বাফার পুল এবং MyISAM কী ক্যাশে সঠিকভাবে আকার

আপনার কতটা ডেটা রয়েছে এবং কতটা সময় আপনি অনুমতি দেবেন তার উপর নির্ভর করে আপনি নীচে ক্যাশেগুলি গরম করতে পারেন:

প্রত্যেক টেবিলের জন্য ট্যাবলেট

  • প্রতিটি সূচক এনডিএক্স-এ গিয়েছেন
  • প্রতিটি সূচকের জন্য এনডিএক্স
    • এনডিএক্সে প্রতিটি কলাম নির্বাচন করুন , কমপক্ষে একটি কলাম টেবিলটি থেকে টেবিলটিতে সূচিযুক্ত নয়

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

  • এটিতে এসকিউএল প্রক্রিয়াকরণের আগে দাসের উপর রিলে লগগুলি পড়ুন
  • রিলে লগ থেকে একটি এসকিউএল বিবৃতি গ্রহণ করুন এবং সূচী বাছাইয়ের দিকনির্দেশনা হিসাবে যেখানে, গ্রুপের মাধ্যমে, এবং অর্ডার দ্বারা অনুচ্ছেদে ব্যবহার করে সেলেক্টে রূপান্তর করুন
  • রূপান্তরিত এসকিউএল থেকে আগত SELECT বিবৃতি কার্যকর করুন

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

উপসংহার

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

একবার চেষ্টা করে দেখো !!!

বিচারকার্য স্থগিত রাখার আদেশ

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


5

যদি এটি একটি খারাপ সমাধান অনেক বিষয়ের উপর নির্ভর করে। এই ডেটা অবিরাম থাকা দরকার? অন্যথায় হতে পারে এমন একটি সমাধান যা এই ডেটা মেমরির মধ্যে রাখে আরও ভাল কাজ করবে।

"প্রচুর ব্যবহারকারী" সত্যিই কাউকে সাহায্য করছে না। মাইএসকিউএল বেশিরভাগ ক্ষেত্রে ঠিক হয়ে যাবে যদি "প্রচুর" অর্থ কয়েক শ '। (যদিও আপনার ডাটাবেসটি আর কী পরিচালনা করতে হবে তার উপর নির্ভর করে Several বেশ কয়েক হাজারেরও সম্ভবত কাজ করা উচিত))

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

তবে প্রকৃত সংখ্যা এবং আপনার ডাটাবেস সার্ভারটি যে হার্ডওয়্যার ব্যবহার করে সে সম্পর্কে কিছু তথ্য না থাকলে এটিকে খুব নির্ভুলতার সাথে উত্তর দেওয়া যায় না।

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

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


4
কোনও সমাধানের পরামর্শ দেওয়ার জন্য +1 যা ডেটা মেমরিতে রাখে।

3

এখানে একটি পাগল ধারণা। এটি অনুমানের সাথে জড়িত এবং সর্বদা প্রস্তাবিত অনুশীলনগুলির সাথে জড়িত (যেমন কোনও কী আপডেট করা) - আমি এটির পরামর্শ দেওয়ার জন্য প্রচুর নেতিবাচকতা পাব তবে এটি এখানে চলে যায় ...

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

মূল মান 1123234441 সক্রিয় সারিগুলির জন্য এবং কী মান: 9123234441 নিষ্ক্রিয় সারিগুলির জন্য (এই উদাহরণের প্রথম সংখ্যাটি নিম্নরূপে ব্যবহৃত হয়: 1 = সক্রিয়, 9 = নিষ্ক্রিয়)।

এখন যখন ব্যবহারকারী একটি সারি মুছে ফেলবে, আপনি শারীরিকভাবে সারিটি মুছবেন না, আপনি কী (ওচ!) আপডেট করবেন, এটি সক্রিয়ভাবে সক্রিয়ভাবে নিষ্ক্রিয় সারি বিভাজনে সরিয়ে নিয়ে যাবে।

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

আমি আগেই বলেছি, আপনার যদি কেবল 1 টেবিল থাকে তবে এটি কাজ করে। আমি এটি পরীক্ষা করিনি, সুতরাং এটি কেবল একটি তাত্ত্বিক পদ্ধতির তবে আমি পার্টিশন হ্রাসের গতিটি অনুভব করেছি এবং এটি আশ্চর্যরকম দ্রুত is

আপনার নির্বাচনগুলি বাড়ানোর জন্য, যথাযথ সূচিকাগুলি ব্যবহার করুন এবং সন্নিবেশগুলি সারি আকার এবং সূচকের সংখ্যা হ্রাস করুন (এই বিবৃতিটি খুব জেনেরিক ...)

একটি রেফারেন্সের জন্য দেখুন: http://dev.mysql.com/doc/refman/5.1/en/partitioning-tyype.html আশা করি এটি সাহায্য করবে।


2
আমি নিশ্চিত নই, যদি এই নির্দিষ্ট সমস্যার জন্য এটি উপলব্ধি করে (তবে আমার অনুমান এখনও রয়েছে, যে মাইএসকিএল পুরো জিনিসটি ক্যাশে করবে এবং সম্ভবত সেই রেকর্ডগুলি কোনও ডিস্ক দেখতে পাবে না)। তবে আকর্ষণীয় অপ্টিমাইজেশান কৌশলটি নির্দেশ করার জন্য +1 যা আমি এখনই জানতাম না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.