পতাকা বনাম টেবিল বিভক্ত করুন


10

আমি আইটেমগুলির একটি টেবিল ডিজাইন করছি যা (সম্ভাব্য) কয়েক মিলিয়ন রেকর্ড ধারণ করবে। প্রশাসক দ্বারা "অনুমোদিত" না হওয়া পর্যন্ত কিছু আইটেম ব্যবহারের জন্য উপলব্ধ হবে না। "ব্যবহার" দ্বারা আমি বোঝাতে চাইছি যে এই জাতীয় আইটেমগুলি "অনুমোদিত" না হওয়া পর্যন্ত অন্য কোনও সারণীতে রেফারেন্স করা হবে না। আইটেমের 50% পর্যন্ত যে কোনও সময় "অনুমোদিত নয়" be রেকর্ডগুলি "অনুমোদিত" হয়ে উঠতে পারে তবে বিপরীতে নয়।

আমি দুটি নকশা বিকল্প বিবেচনা:

  • একটু পতাকা
  • "অনুমোদিত নয়" আইটেমের একটি পৃথক টেবিল - আইটেমটি অনুমোদিত হলে এটি "নিয়মিত" সারণিতে স্থানান্তরিত হয় (আইটেমটির আইডি পুনর্নবীকরণ কোনও সমস্যা নয়)

আমি মনে করি দ্বিতীয় বিকল্পটি আরও ভাল। বিট পতাকা প্রতি সারিতে কেবল একটি বাইট নেয়, সুতরাং এটি কোনও সমস্যা নয়। তবে যদি আমাদের কাছে এক মিলিয়ন অনুমোদিত এবং একই টেবিলে এক মিলিয়ন অস্বীকৃত রেকর্ড থাকে - অনুমোদিত রেকর্ডগুলির সাথে ক্রিয়াকলাপের জন্য স্ক্যানের সময় বৃদ্ধি পায়।

প্রশ্নটি: এর পরিবর্তে আমি কি প্রথমে (বিট পতাকা) বিকল্পটি বিবেচনা করব? বর্ণিত পরিস্থিতিতে এর কোনও উপকার আছে?


1
এটি মনে রাখতে সাহায্য করতে পারে আপনি অনুমোদিত রেকর্ডগুলিতে অ্যাক্সেস গতি বাড়ানোর জন্য ফিল্টারড সূচকগুলি ব্যবহার করতে পারেন। brentozar.com/archive/2013/11/…
mendosi

দুর্ভাগ্যক্রমে ফিল্টার ইনডেক্সগুলি প্যারামিটারাইজড কোয়েরিতে ব্যবহৃত হয় না।
ডিমা

@ ডিমা এটি সম্পূর্ণ সত্য নয়। যদি একটি ফিল্টারড সূচকটি বলে WHERE status='A'এবং যদি একটি ক্যোয়ারী থাকে WHERE status = 'A' AND (... other columns and parameters here...), তবে সূচকটি এখনও ব্যবহৃত হতে পারে।
ypercubeᵀᴹ

উত্তর:


6

বিভাজনযুক্ত দর্শন সহ আপনার এটি উভয় উপায়ে থাকতে পারে ।

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

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

খরচ সমস্ত ডেটা চলাচল; প্রতিটি স্থিতি আপডেটের জন্য দুটি পৃষ্ঠা এবং সম্পর্কিত সূচিপত্র লেখা হয়। আইও প্রচুর মোকাবেলা করতে। অনেক বেশি চলাচলের ফলে বিভাজনও ঘটবে।


5

আইটেমগুলির একটি সারণীতে (সম্ভাব্য) কয়েক মিলিয়ন রেকর্ড থাকবে।

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

আইটেমের 50% পর্যন্ত যে কোনও সময় "অনুমোদিত নয়" be

হুম। এটি ঠিক শোনাচ্ছে না। "অনুমোদিত" প্রবেশের হার নতুন এন্ট্রি পাওয়ার অর্ধেক হার হবে? প্রতি 2 টি নতুন এন্ট্রির জন্য, কেবল 1 জন "অনুমোদিত" হবে? আপনার 2 মিলিয়ন সারি, এবং "অনুমোদিত" এবং "অস্বীকৃত "গুলির জন্য প্রত্যেকে 1 মিলিয়ন উদাহরণ রয়েছে, কয়েক বছর পরে আরও 10 মিলিয়ন এন্ট্রি সহ, আপনি" অনুমোদিত "এবং" অস্বীকৃত "জন্য প্রত্যেকের জন্য 6 মিলিয়ন আশা করবেন? অথবা এটি কি 1 মিলিয়ন "অগ্রহণযোগ্য" কিছুটা স্থির থাকবে, যেমন 10 মিলিয়ন নতুন এন্ট্রি সহ 11 মিলিয়ন "অনুমোদিত" এবং এখনও 1 মিলিয়ন "অগ্রহণিত" থাকবে?

রেকর্ডগুলি "অনুমোদিত" হয়ে উঠতে পারে তবে বিপরীতে নয়।

এটি আজ সত্য , তবে সময়ের সাথে সাথে জিনিসগুলি পরিবর্তিত হয় এবং তাই সবসময় এমন সম্ভাবনা থাকে যে ব্যবসাটি "অগ্রহণযোগ্য" বা "আর্কাইভ করা" ইত্যাদির মতো কিছু স্ট্যাটাসের অনুমতি দেওয়ার সিদ্ধান্ত নিতে পারে।

সুতরাং, আসুন পছন্দগুলি দেখুন:

পতাকা (বা সম্ভবত এমনকি TINYINT"স্থিতি")

  • প্রতিটি স্ট্যাটাসের প্রশ্নের জন্য কিছুটা ধীর
  • সময়ের সাথে আরও নমনীয় / তৃতীয় রাষ্ট্রের মতো পরিবর্তনকে অন্তর্ভুক্ত করা সহজ (যেমন "আর্কাইভ করা") কেবলমাত্র একটি নতুন লুকআপ স্থিতির মান সহ। কোনও নতুন টেবিল (অগত্যা), কিছু নতুন কোড, কেবলমাত্র কিছু কোড আপডেট হয়েছে।
  • কম কাজ (যেমন কোড, পরীক্ষা ইত্যাদি) এবং একক TINYINTকলাম আপডেট করার ক্ষেত্রে ত্রুটির জন্য কম ঘর
  • কম জটিল = সময়ের সাথে কম রক্ষণাবেক্ষণের ব্যয়, নতুন কর্মীদের জন্য স্বল্প প্রশিক্ষণের সময় নির্ধারণ করা
  • (সম্ভবত) লেনদেনের লগের ক্ষুদ্রতর প্রভাব যেমন একটি টেবিল আপডেট করা হয়
  • দুটি টেবিলের মধ্যে "রেকর্ডস্ট্যাটাস" এবং এফকে জন্য কেবল একটি সন্ধানের টেবিলের প্রয়োজন।

দুটি পৃথক সারণী (একটি "অনুমোদিত", একটি "অনুমোদিত নয়" এর জন্য)

  • প্রতিটি স্ট্যাটাসের প্রশ্নের জন্য কিছুটা দ্রুত
  • সময়ের সাথে তত কম নমনীয় / তৃতীয় রাষ্ট্রের (যেমন "আর্কাইভ করা") এর মতো পরিবর্তন অন্তর্ভুক্ত করা আরও কঠিন; নতুন রাষ্ট্রের সম্ভবত আরও একটি সারণী এবং অবশ্যই নতুন এবং আপডেট হওয়া কোডের প্রয়োজন হবে would
  • "অগ্রহণযোগ্য" টেবিল থেকে "অনুমোদিত" সারণিতে রেকর্ড সরানোর ক্ষেত্রে ততোধিক কাজের জন্য আরও কাজ (যেমন কোড, টেস্টিং ইত্যাদি) এবং আরও বেশি ঘর
  • সময়ের সাথে আরও জটিল = আরও বেশি রক্ষণাবেক্ষণের ব্যয়, নতুন কর্মীদের জন্য এটির জন্য আরও দীর্ঘ প্রশিক্ষণের সময়
  • (সম্ভবত) লেনদেনের বৃহত্তর প্রভাব হিসাবে একটি সারণী মুছে ফেলা হয় এবং একটি সন্নিবেশ করা হয়
  • "সম্পর্কে চিন্তা করার কোন প্রয়োজন আইটেমের আইডি নবায়ন ": অননুমোদিত টেবিল আইডি কলাম একটি যে হয়েছে IDENTITYকলাম, এবং অনুমোদিত টেবিল আইডি কলাম যে হয়েছে না একটি IDENTITY(যেমন সেখানে প্রয়োজন হয় না)। সুতরাং আইডি মানগুলি টেবিলের মধ্যে রেকর্ড চলার সাথে সামঞ্জস্য থাকে।

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


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

3
বিভক্ত টেবিলগুলির আর একটি সুবিধা: আপনার কাছে এফকে থাকতে পারে যা কেবলমাত্র "অনুমোদিত" সারণীটি উল্লেখ করে।
ypercubeᵀᴹ

একটি একক সত্তার জন্য বিভক্ত টেবিলগুলির সাথে অন্যান্য সমস্যা হ'ল সীমাবদ্ধতা integrity অন্যান্য টেবিলের রেফারেন্সগুলি রেকর্ডটি ঘুরে দেখার সাথে দুর্দান্ত খেলবে না। বিভক্ত টেবিলের জন্য মিরর রেফারেন্স সারণী -> খুব ঝামেলা
ব্যবহারকারী 1567453
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.