এসকিউএল সার্ভারে ভারচার সাইজিং সম্পর্কিত বর্তমান সেরা অনুশীলনগুলি কী কী?


12

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

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

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

প্রসঙ্গ
আমাদের গ্রাহকদের কিছু ডেটা কিছুটা ওঠানামা করে, তাই আমরা কলামগুলি সাধারণত তাদের চেয়ে কিছুটা প্রশস্ত করে তুলি those কলামগুলির জন্য 15-20% বড় বলে। আমি ভাবছিলাম যে অন্য কোনও বিশেষ বিবেচনা আছে কিনা; উদাহরণস্বরূপ, আমি যার সাথে কাজ করি সে আমাকে 2 - n - 1 টি মাপ ব্যবহার করতে বলেছিল (আমি এমন কোনও প্রমাণ পাইনি যা যদিও এটি একটি জিনিস ....)

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

প্রশ্নটি কতটা, এবং প্রযুক্তিগত দিকনির্দেশনাগুলি কী?


মঙ্গোডিবি একটি নথির জন্য 2 disk n ডিস্ক বরাদ্দ ব্যবহার করে। এসকিউএল সার্ভার এই কৌশলটি ব্যবহার করে না।
মাইকেল গ্রিন

উত্তর:


19

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

বিভিন্ন কারনে সংরক্ষণ করা হবে এমন সর্বোচ্চ আসল আকারের চেয়ে বড় কলামের দৈর্ঘ্য নির্দিষ্ট করার দরকারও নেই বা চান না: কোয়েরি মেমরি বরাদ্দ, সম্ভাব্য সারি সর্বাধিক আকার পূরণ করা এবং কলাম যুক্ত করার জন্য কোনও স্থান না রেখে ভবিষ্যত, ইত্যাদি

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

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

পরিবর্তে, একটি লক্ষ্য হতে পারে যদি সম্ভব হয় তবে প্রতিটি ডাটা সারির প্রকৃত আকার limit 8000 বাইটের মধ্যে সীমাবদ্ধ করা।

আপনি এখানে কী পাচ্ছেন তা আমি নিশ্চিত নই। এসকিউএল সার্ভার শারীরিকভাবে আপনাকে কেবল 8000 বাইটের মধ্যে সীমাবদ্ধ করবে। Lob ধরনের ব্যবহার - VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX), XML, এবং অবচিত TEXT, NTEXTএবং IMAGEধরনের - যে প্রাথমিক পৃষ্ঠার আকার সীমাবদ্ধতা অতিক্রমণ জন্য অনুমতি, কিন্তু যে শুধুমাত্র একটি পয়েন্টার (16 বা তার বেশি বাইট, ধরনের উপর নির্ভর করে স্থাপন করে, এবং তার উপর নির্ভর করে কারণে MAXপ্রকারগুলি ব্যবহার করার সময় অফ-সারি স্টোর করা মানের আকার )। ডেটা পৃষ্ঠার আসল শারীরিক সীমা পরিবর্তন হয়নি।

আপনার লক্ষ্যটি হ'ল অ্যাপ / ব্যবসায়টি যা ভাঙা বা কাটা ছাড়াই সঞ্চয় করতে প্রয়োজন তা সঞ্চয় করতে কমপক্ষে শারীরিক স্থান ব্যবহার করা উচিত যে অসম্পূর্ণ মানটির অর্থ হারাতে পারে বা প্রবাহকে সমস্যা তৈরি করে। আপনার যদি 12,000 চরিত্রের জিনিসটি সঞ্চয় করতে হয় তবে ব্যবহার করুন VARCHAR(MAX)কারণ এটিই প্রয়োজন। আপনি যদি কোনও ফোন নম্বর বা ডাক / পিন কোড সংরক্ষণ করেন তবে এটি ব্যবহার করা বুদ্ধিমানের এবং ব্যবহার করার জন্য VARCHAR(100)দায়িত্বজ্ঞানহীন হবে VARCHAR(MAX)

আমাদের গ্রাহকের কিছু ডেটা কিছুটা ওঠানামা করে, তাই আমরা কলামগুলি সাধারণত তাদের চেয়ে কিছুটা প্রশস্ত করতে পারি say এই কলামগুলির জন্য 15-20% বড় বলুন say আমি ভাবছিলাম যে অন্য কোনও বিশেষ বিবেচনা আছে কিনা;

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

তবে, এক মুহুর্তের জন্য শয়তানের উকিল খেলতে: কীভাবে "যা প্রয়োজন তার চেয়ে 15-15% বড়" মান প্রকৃত প্রয়োজনীয় মূল্য হতে পারে না ? ধরা যাক যে একটি নতুন কলাম যুক্ত করার বিষয়ে আলোচনা হয়েছে, এবং কেউ 50 টি চরিত্রের পরামর্শ দিচ্ছে, তখন অন্য কেউ বলেছেন, "ভাল, 20% আরও 60 হয় তাই 60 করা যাক কারওর 60 টি থাকতে পারে" " যদি এটি সত্য হয় যে কোনও গ্রাহকের 60০ টি থাকতে পারে, তবে is০ হ'ল এবং সর্বদা ছিল, প্রকৃত প্রয়োজনীয় মূল্য এবং 50 টি পুরো সময়ই ভুল ছিল।

অবশ্যই, ডেটা উত্স সম্পর্কে কিছু ইঙ্গিত থাকলে এটি সাহায্য করবে কারণ:

  1. যদি আপনি "ইউআরএল" 1024 করেন এবং কারও জন্য 1060 প্রয়োজন, তবে এটির 1060 হওয়া দরকার (একইভাবে, আপনি যদি ইউআরএল তৈরি করেন VARCHARএবং অভিযোগ পান যে এটি ইউনিকোড অক্ষরগুলিকে গণ্ডগোল করছে যা এখন ডোমেন নামে অনুমোদিত, তবে এটি হওয়া দরকার NVARCHAR), কিন্তু
  2. যদি কেউ 500 অক্ষর-সীমা মন্তব্য ক্ষেত্রে 1000 টি অক্ষর যুক্ত করতে চায়, তবে এটি কেবল 500 হওয়া দরকার comments মন্তব্যগুলিতে লোকেরা কম শব্দভাবাপন্ন হতে পারে (আমার পক্ষে একটি বিশাল চ্যালেঞ্জ ;-), তবে ProductSKUসর্বোপরি যথেষ্ট উপযুক্ত হয়ে উঠতে পারে গ্রাহকের এসকিউগুলিতে।

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

আপনি এখানে অনেক অনুমান করছেন। অবশ্যই কিছু ক্ষেত্র বড় হতে পারে । কিন্তু আবার, তারা নাও পারে। বা, কিছু ছোট হতে পারে। কিছু অ-ইউনিকোড থেকে ইউনিকোডে পরিণত হতে পারে (তারা যখন বুঝতে পারে যে পৃথিবী আরও ছোট হচ্ছে এবং কেউ শেষের নামগুলিতে কেবল বেসিক এএসসিআইআই / মার্কিন ইংরেজি অক্ষর থাকতে পারে তা ধরে নিতে পারে না)। অথবা, তারা কোনও ক্ষেত্র প্রেরণ বন্ধ করতে পারে। অথবা তারা ভবিষ্যতে এক বা একাধিক ক্ষেত্র যুক্ত করতে পারে। এটি এবং অন্যান্য জিনিসের কোনও সমন্বয়। তাহলে কেন শুধুমাত্র VARCHARকলামগুলিতে ফোকাস করবেন ? যদি তারা বর্তমানে কোনও INTমান প্রেরণ করছে এবং এক বা দুই বছরে তারা সর্বাধিক মানে পৌঁছে এবং একটি প্রেরণ শুরু করে BIGINT? যদি তাদের 0 - 5 মানের সাথে একটি "স্থিতি" ক্ষেত্র থাকে তবে আপনি কি কেবল ধরে নিচ্ছেন?INTকোনটি "প্যাডড" এটি বর্ধনের অনুমতি দেয় তবে সম্ভবত হওয়া উচিত TINYINT?

আপনি নিরাপদে ভবিষ্যদ্বাণী করতে পারেন যে আপনার গ্রাহকদের ডেটা কীভাবে পরিবর্তিত হবে তা পূর্বাভাস দেওয়ার চেষ্টা করা সঠিক হওয়ার চেয়ে প্রায়শই ভুল হয়ে যায়। এবং সঠিক হওয়া ভাগ্য / কাকতালীয় বিষয় (যদি ভাগ্য না হয়, তবে কেবল লটারি খেলুন;)।

সুতরাং গাইডলাইনটি হ'ল:

  1. একটি অযোগ্য পরিবর্তনযোগ্য প্রশ্নের উত্তর দেওয়ার চেষ্টা করার সময় এবং শক্তি অপচয় করবেন না।
  2. পরিবর্তে, আপনার গ্রাহকের আসল তথ্য সম্পর্কিত যথাসম্ভব তথ্য পাওয়ার উপর মনোনিবেশ করুন এবং সেই সাথে (অর্থাত্ ডেটা-চালিত সিদ্ধান্ত গ্রহণ ;-)) নিয়ে যান।

আপনার কাছে ইতিমধ্যে উদাহরণস্বরূপ ডেটা রয়েছে, দুর্দান্ত। তবে, দয়া করে ভুলে যাবেন না যে আপনার কাছে আপনার গ্রাহকের যোগাযোগের তথ্যও রয়েছে: ফোন এবং / অথবা ইমেল। তাদের সাথে যোগাযােগ করুন! তাদের তাদের ডেটা স্পেসের জন্য জিজ্ঞাসা করুন (ঠিক আপনার সিস্টেমের মতোই, বর্তমানে তাদের সিস্টেমে থাকা ডেটাটির সর্বাধিক দৈর্ঘ্য 35 টি হতে পারে, তবে তাদের সিস্টেমটি এটি হিসাবে সংজ্ঞায়িত করেছে VARCHAR(50)এবং তাদের সিস্টেমটি সেই দৈর্ঘ্য পর্যন্ত গ্রহণ করবে, এই ক্ষেত্রে আপনার ব্যবহার করা উচিত 50)। এবং, তাদের কাছে জিজ্ঞাসা করুন যে তাদের নিকট-মেয়াদে পরিবর্তনের কোনও পরিকল্পনা আছে এবং সেই ডেটাটাইপগুলি (টাইপ এবং / বা আকার)।


1
আমি অ্যারিস্টটল 2600 @ সলোমন এর সাথে একমত - তবে, আপনি আরও কিছু বিবেচনার জন্য এ এবং এর মধ্যে পার্থক্য সম্পর্কিত প্রশ্ন সম্পর্কে আমার উত্তরটি একবার দেখতে চাইতে পারেনvarchar(255)varchar(256)
ম্যাক্স ভার্নন

ধন্যবাদ, আমি এই ধারণাটির মধ্যে ছিলাম যে এটি এমন কিছু হবে, এবং "আপনার যা প্রয়োজন কেবল তা ব্যবহার করুন" হ'ল চারপাশে কেবল ভাল সংস্থান পরিচালনার অনুশীলন। কিন্তু, আমাদের গ্রাহকের কিছু ডেটা কিছুটা ওঠানামা করে, তাই আমরা কলামগুলি তাদের কলামগুলির চেয়ে কিছুটা প্রশস্ত করে তুলি those এই কলামগুলির জন্য 15-20% বড় বলে। আমি ভাবছিলাম যে অন্য কোনও বিশেষ বিবেচনা আছে কিনা; উদাহরণস্বরূপ, আমি যার সাথে কাজ করি সে আমাকে 2 - n - 1 টি মাপ ব্যবহার করতে বলেছিল (আমি এমন কোনও প্রমাণ পাইনি যা যদিও এটি একটি জিনিস ....)। তবে মনে হচ্ছে জিনিসকে যতটা সম্ভব ছোট রাখা ছাড়া আর কিছুই নেই।
aristotle2600

1
এটা এমনকি তাত্ত্বিক কিছু বৃহত্তর তুলনায় এটি করা সম্ভব: কিন্তু আমি এখনও জিজ্ঞাসা করতে হবে - @ aristotle2600 নিশ্চিত কিভাবে "1 2 ^ n হল" প্রয়োগ না প্রয়োজন হবে? না যে 15-20% বড় মাপে হবে হতে আকার এটি প্রয়োজন ভাঙে না হতে? ;-)। আমি নিশ্চিত যে এটি ডেটা উত্সে আপনি আরও স্পষ্ট হলে এটি সাহায্য করবে, কারণ ক) আপনি যদি "ইউআরএল" 1024 করেন এবং কারও 1060 প্রয়োজন হয় তবে এটি 1060 হওয়া দরকার, তবে খ) যদি কেউ 1000 যুক্ত করতে চায় 500 টি চর-সীমা মন্তব্য ক্ষেত্রের অক্ষর, তারপরে এটি কেবল 500 হওয়া দরকার People লোকেরা কমেন্টে কম প্রবেশ করতে পারে, তবে পণ্য এসকিউ আরও ভাল হতে পারে।
সলোমন রুটজকি

@ aristotle2600 আমি এখানে আপনার মন্তব্যগুলির কিছু এখানে প্রশ্নের সাথে যুক্ত করেছি কারণ তারা ভাল প্রসঙ্গ সরবরাহ করে। আমি আমার উত্তরের শেষে
জিনিসও যুক্ত

আপনার উত্তরের জন্য অনেক ধন্যবাদ! হ্যাঁ, নাম এবং ঠিকানাগুলি প্রবাহিত হয়। যতদূর ক্রমবর্ধমান 20% প্যারাডক্স, আমি আপনার অর্থ কী তা দেখতে পাচ্ছি, তবে আমি প্রাথমিক টেবিল তৈরির কথা বলছি। একজন গ্রাহক আমাদের বলবেন যে তারা আমাদের একটি নতুন টেবিল প্রেরণ শুরু করতে যাচ্ছেন, এবং নমুনা ডেটা (বা কেবল প্রথম উত্পাদন ডেটাসেট) প্রেরণ করবেন, যা আমরা দেখি এবং ডেটা ধরে রাখার জন্য আমাদের প্রান্তে একটি টেবিল তৈরি করি। ভবিষ্যতের আমদানি পরিচালনা করতে এবং সেই সাথে নমুনায় কী রয়েছে তা পরিচালনা করতে আমরা আমাদের শেষের টেবিলটি তৈরি করতে চাই। তবে, নির্দিষ্ট সারি দীর্ঘ পেতে বাধ্য, তাই আমরা তাদের প্যাড করব। প্রশ্নটি কতটা, এবং প্রযুক্তিগত দিকনির্দেশনাগুলি কী?
aristotle2600
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.