স্কেল্যাবিলিটি বিবেচনা করার সময় কেন খারাপ যোগ দেয়?


94

খারাপ বা 'ধীর' সাথে যোগ দেয় কেন। আমি জানি আমি আরও একবার এটি শুনেছি। আমি এই উদ্ধৃতিটি খুঁজে পেয়েছি

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

সূত্র

আমি সবসময় ভেবেছিলাম বিশেষত কোনও পিকে দেখার সময় তারা দ্রুত ছিল। তারা 'ধীর' কেন?

sql  join 

উত্তর:


100

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

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

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

সুসংবাদ আধুনিক রিলেশনাল ডাটাবেস হয় ভাল যোগদান করেন। ভাল ব্যবহার করা ভাল ডাটাবেসের সাথে আপনার ধীরে ধীরে যোগদানের কথা ভাবা উচিত নয়। কাঁচা যোগদান এবং তাদের আরও দ্রুত তৈরি করার অনেকগুলি স্কেলাবিলিটি-বান্ধব উপায় রয়েছে :

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

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

আপনার যদি ধীরে ধীরে যোগদান হয় তবে আপনি সম্ভবত আপনার ডাটাবেসটি সঠিকভাবে ব্যবহার করছেন না।

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

* এটি সারণী সংগ্রহ থেকে পৃথক সত্তা হিসাবে বিদ্যমান। আসল আরডিবিএমের অতিরিক্ত কারণ হ'ল নিরাপদ সমবর্তী প্রবেশাধিকার।


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

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

আপনার তৃতীয় আইটেমটিতে, আপনি "ম্যাটেরিয়ালাইজড / ইনডেক্সড ভিউ" উল্লেখ করেছেন। আপনি কি নিয়মিত এসকিউএল ভিউ, বা অন্য কিছু সম্পর্কে কথা বলছেন?
স্লোলাইফ

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

ধন্যবাদ জোয়েল আমি এটি খতিয়ে দেখতে হবে।
স্লোলাইফ

29

যোগদানগুলি ডি-নরমালাইজেশনের মাধ্যমে এড়িয়ে যাওয়ার চেয়ে ধীর হতে পারে তবে সঠিকভাবে ব্যবহার করা হলে (যথাযথ সূচকে কলামগুলিতে যোগ দেওয়া) সেগুলি সহজাতভাবে ধীর হয় না

ডি-নরমালাইজেশন হ'ল এমন অনেক অপটিমাইজেশন কৌশল যা আপনি বিবেচনা করতে পারেন যদি আপনার ভালভাবে ডিজাইন করা ডেটাবেস স্কিমা কর্মক্ষমতা সমস্যা দেখায়।


4
... মাইএসকিউএল ব্যতীত, যা আপনার সূচকগুলি দেখতে কেমন তা বিবেচনা না করেই প্রচুর সংখ্যক যোগদানের সাথে পারফরম্যান্স সমস্যা রয়েছে have বা কমপক্ষে এটি অতীতেও ছিল।
পাওয়ারলর্ড

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

13

নিবন্ধে যোগ দেয়ার অনুপস্থিতির তুলনায় তারা ধীর গতিতে বলেছে। এটি ডেনোরালাইজেশন দ্বারা অর্জন করা যেতে পারে। সুতরাং গতি এবং স্বাভাবিককরণের মধ্যে একটি বাণিজ্য বন্ধ রয়েছে। অকাল অপটিমাইজেশন সম্পর্কে ভুলবেন না :)


এমনকি এটি কোনও কঠোর নিয়ম নয়, আপনি যদি কোনও টেবিলে যোগ দেন তবে মাইএসকিএল সেই সংযুক্তিটি সম্পাদন করতে একটি সূচক ব্যবহার করতে পারে - যে সূচকটি বহু সারিগুলিকে ছাঁটাই করতে পারে, এবং অন্য কোনও সূচী যেখানে টেবিলে ক্লজ থাকে for আপনি যদি যোগদান না করেন তবে মাইএসকিএল সাধারণত কেবলমাত্র একটি সূচক ব্যবহার করবে (যা সবচেয়ে কার্যকর এক নাও হতে পারে), যেখানে আপনার ক্লজটি কীভাবে গঠন করা হয় তা বিবেচনা করে না।
লিয়ারয়

12

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

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

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

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

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

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

এবং আমরা যখন টেবিল স্ক্যানগুলির বিষয়ে কথা বলছি তারা স্পষ্টতই টেবিলের আকারের সাথে আনুপাতিকভাবে ক্যোয়ারী গতিকে প্রভাবিত করবে। 100 টি সারির একটি পূর্ণ টেবিল স্ক্যান এমনকি লক্ষণীয় নয়। একই কোয়েরিকে ১০০ মিলিয়ন সারি দিয়ে একটি টেবিলে চালান এবং আপনাকে ফেরতের জন্য আগামী সপ্তাহে ফিরে আসতে হবে।

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

তাহলে আমরা কোথায় ভারসাম্য রাখব? কোন একক সেরা উত্তর নেই। সর্বোত্তম উত্তরগুলির মধ্যে কাঠামোগত রক্ষণাবেক্ষণ, ডেটা রক্ষণাবেক্ষণ এবং কোড তৈরি / রক্ষণাবেক্ষণের স্বাচ্ছন্দ্যের মধ্যে কিছুটা আপস হতে পারে ise সাধারণভাবে, ডেটারের সদৃশ যত কম হবে তত ভাল।

তাহলে কেন মাঝে মাঝে যোগ দেয় ধীর? কখনও কখনও এটি খারাপ সম্পর্কযুক্ত নকশা। কখনও কখনও এটি অকার্যকর সূচক হয়। কখনও কখনও এটি একটি ডেটা ভলিউম সমস্যা। কখনও কখনও এটি একটি মারাত্মকভাবে লিখিত ক্যোয়ারী।

এইরকম দীর্ঘ-বায়ুযুক্ত উত্তরের জন্য দুঃখিত, তবে আমি কেবলমাত্র 4-বুলেট প্রতিক্রিয়াটি ছড়ানোর পরিবর্তে আমার মন্তব্যগুলির চারপাশে একটি উত্তম প্রসঙ্গ সরবরাহ করতে বাধ্য বোধ করেছি।


10

টেরাবাইট আকারের ডেটাবেসযুক্ত লোকেরা এখনও যোগ দেয়, যদি তারা তাদের কর্মক্ষমতা অনুযায়ী কাজ করতে পারে তবে আপনিও পারেন।

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

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

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

আপনার যদি কেবল ক্যোয়ারির ক্ষমতা প্রয়োজন, তবে হ্যাঁ আপনি একটি ডেটাওয়ারহাউজ ডিজাইন করতে পারেন যা অস্বীকৃতিযুক্ত হতে পারে এবং কোনও ETL সরঞ্জামের মাধ্যমে (গতির জন্য অনুকূলিত) ব্যবহারকারী ডেটা এন্ট্রি নয় pop


8

যদি ধীরে ধীরে যোগ দেয়

  • তথ্যটি যথাযথভাবে সূচকযুক্ত
  • ফলাফল খারাপভাবে ফিল্টার করা হয়েছে
  • খারাপ জিজ্ঞাসা যুক্ত মন্তব্য
  • ডেটা খুব বড় এবং জটিল সেট করে

সুতরাং, সত্য, আপনার ডেটা যত বড় সেট করবে আপনার ততই প্রসেসিংয়ের প্রয়োজন সেট করে তবে উপরের প্রথম তিনটি বিকল্পে পরীক্ষা করা এবং কাজ করা প্রায়শই দুর্দান্ত ফলাফল দেয় yield

আপনার উত্স একটি বিকল্প হিসাবে ডেনারমালাইজেশন দেয়। যতক্ষণ আপনি ভাল বিকল্পগুলি ক্লান্ত করে ফেলেছেন এটি ঠিক আছে।


7

যদি প্রতিটি পক্ষের রেকর্ডের বড় অংশগুলি স্ক্যান করা দরকার হয় তবে যোগ দিতে ধীর হতে পারে।

এটার মত:

SELECT  SUM(transaction)
FROM    customers
JOIN    accounts
ON      account_customer = customer_id

এমনকি যদি একটি সূচককে সংজ্ঞায়িত করা হয় account_customer, তবুও পরবর্তী সমস্ত রেকর্ড স্ক্যান করা দরকার।

কোয়েরি তালিকার জন্য এটি শালীন অপ্টিমাইজারগুলি সম্ভবত সূচক অ্যাক্সেসের পথটি বিবেচনা করবে না, পরিবর্তে একটি HASH JOINবা একটি MERGE JOINকরে।

এই জাতীয় একটি প্রশ্নের জন্য নোট করুন:

SELECT  SUM(transaction)
FROM    customers
JOIN    accounts
ON      account_customer = customer_id
WHERE   customer_last_name = 'Stellphlug'

customer_last_nameযোগদানটি সম্ভবত দ্রুত হবে: প্রথমে, সমস্ত স্টেলফ্লাগের (যা অবশ্যই খুব বেশি নয়) ফিল্টার করতে একটি সূচক ব্যবহার করা হবে, তারপরে account_customerতার লেনদেনগুলি সন্ধানের জন্য প্রতিটি স্টেলফ্লাগের জন্য একটি সূচক স্ক্যান চালু করা হবে।

এগুলি বিলিয়ন বিলিয়ন রেকর্ড হতে পারে accountsএবং এই সত্ত্বেও customers, খুব কমই আসলে স্ক্যান করা দরকার।


তবে এটি এড়ানো শক্ত। আপনার অ্যাপ্লিকেশনটি ডিজাইন করুন যাতে এই ধরণের প্রশ্নগুলি প্রায়শই সম্পাদিত হয় না।
অ্যান্ড্রে

4
যদি accounts(account_customer)বেশিরভাগ আরডিবিএমএসে কোনও সূচক সংজ্ঞায়িত করা হয় তবে customersডাটাবেসের কোন সারিটি স্ক্যান করা দরকার তা নির্ধারণের জন্য সেই সূচিটি ব্যবহার করবে ।
jemfinch

হ্যাঁ, তবে এটি কোনওভাবেই কার্যকর অপারেশন নয়। আপনি কোনও কোনও ক্ষেত্রে মোট পরিমাণ সঞ্চয় করতে পারেন এবং প্রতিটি লেনদেনে আপডেট করতে পারেন।
অ্যান্ড্রে

@ জেমফিনচ: না, তারা করবে না। এটি কেবল গ্রাহকদের ফিল্টার আউট করার জন্য পুরো সূচি স্ক্যান করতে হবে, তারপরে নেস্টেড লুপে গ্রাহকের সূচকে স্ক্যান করতে হবে। এ HASH JOINঅনেক দ্রুততর হবে তাই এটি সমস্ত প্রধান ডাটাবেস ব্যতীত ব্যবহৃত MySQLহবে যা কেবল customersনেস্টেড লুপের (যেহেতু এটি আকারে ছোট)
শীর্ষস্থানীয় করবে

4

Joins are fast.যথাযথভাবে সাধারণীকরণ করা ডাটাবেস স্কিমা সহ যোগদানকারীদের স্ট্যান্ডার্ড অনুশীলন হিসাবে বিবেচনা করা উচিত। আপনাকে অর্থবহ উপায়ে ডেটাগুলির পৃথক গোষ্ঠীতে যোগদানের অনুমতি দেয়। যোগদানের ভয় নেই।

সতর্কতা হ'ল আপনাকে অবশ্যই স্বাভাবিকীকরণ, যোগদান এবং সূচকের যথাযথ ব্যবহার বুঝতে হবে।

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

এটি সত্য যে যোগদানের কর্মক্ষমতা ডেটা সেটের আকার বাড়ার সাথে সাথে অ-রৈখিকভাবে হ্রাস করে। অতএব, এটি একক টেবিল অনুসন্ধানগুলির মতো দুর্দান্তভাবে স্কেল করে না, তবে এটি এখনও স্কেল করে।

এটিও সত্য যে কোনও পাখি কোনও ডানা ছাড়াই দ্রুত উড়ে যায়, তবে কেবল সোজা হয়ে যায়।


3

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

বেশিরভাগ ডাটাবেসগুলি খুব দ্রুত একটি কোয়েরিতে প্রক্রিয়া করতে পারে যা একটি প্রাথমিক টেবিল থেকে 5 টি রেকর্ড নির্বাচন করে এবং প্রতিটি রেকর্ডের জন্য সম্পর্কিত টেবিল থেকে 5 টি রেকর্ডে যোগ দেয় (সঠিক সূচকগুলি স্থানে রয়েছে তা ধরে নিয়ে)। এই টেবিলগুলিতে প্রতিটি কয়েক মিলিয়ন বা এমনকি কয়েক বিলিয়ন রেকর্ড থাকতে পারে।

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

যোগদানকারীদের এড়িয়ে চলবেন না, কেবলমাত্র জেনে রাখুন যখন ডেটাসেটগুলি "খুব বড়" হয়ে যায় তখন আপনাকে অপ্টিমাইজ / ডেনোরমালাইজেশন করতে হতে পারে।


3

আপনি যে নিবন্ধটি উদ্ধৃত করেছেন তা থেকেও:

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

এবং

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

এবং

এটি সমস্ত কাজ করে ডাটাবেস রাখার চেয়ে বেশি ত্রুটিযুক্ত, তবে আপনি সর্বোচ্চ স্ক্রীন ডেটাবেসগুলি কীভাবে পরিচালনা করতে পারবেন তা স্কেল অতীতে করতে সক্ষম।

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


2

যোগদানকারীদের স্কেলিবিলিটির একটি বিরোধী শক্তি হিসাবে বিবেচনা করা হয় কারণ তারা সাধারণত বাধা এবং এগুলি সহজেই বিতরণ বা সমান্তরাল হতে পারে না।


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

সূচিগুলি আরএসবিএমএসে মাইএসকিএল থেকে ওরাকল পর্যন্ত বিভাজন করা যায়। আফাইক যে স্কেলগুলি (বিতরণ করা হয় এবং সমান্তরাল হতে পারে)।
অবাস্তব

2

যথাযথভাবে নকশাকৃত সারণীগুলিতে যথাযথ সূচকগুলি এবং সঠিকভাবে লিখিত প্রশ্নগুলি সর্বদা ধীর হয় না। আপনি কোথায় শুনেছেন:

খারাপ বা 'ধীর' সাথে যোগ দেয় কেন

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


1

সাময়িক তথ্য যে পরিমাণ উত্পন্ন হয় তাতে যোগ দেওয়ার উপর ভিত্তি করে বিশাল পরিমাণ থাকতে পারে।

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

আমাকে সঞ্চিত সন্ধানের পদ্ধতিটি অনুকূলকরণের কাজ দেওয়া হয়েছিল।

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

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

এসকিউএল সার্ভারের সিপিইউ ব্যবহারটিও ডাউন ওয়েনে গিয়েছিল।


@ বল্টবাইট: আপনি কী যোগদানের আগে সারিগুলির সংখ্যা হ্রাস করার জন্য সর্বদা চেষ্টা করা উচিত এমন বার্তাটি কি?
আনতুবু

এটা অবশ্যই আমার ক্ষেত্রে বিস্ময়কর কাজ করেছে। তবে, আমি কোনও সিস্টেম অপরিহার্য করব না যতক্ষণ না এটি প্রয়োজনীয় হয়ে ওঠে।
বোল্টবাইট

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

1

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

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


1

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

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

বেশিরভাগ অ্যাপ্লিকেশন - আবার, আইএমও - আরডিবিএমএস দ্বারা সরবরাহিত বৈধতা এবং হ্রাস নকল থেকে উপকৃত হয়।


0

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.