"এসকিউএল সার্ভারটি আপনার পক্ষে ভাল করার জন্য আপনি যা পেতে পারেন তা কখনই কোডে করবেন না" - এটি কোনও খারাপ ডিজাইনের কোনও রেসিপি?


204

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

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

আপনার ডেটাবেস ইঞ্জিনকে এইভাবে উপকৃত করা সহজাতভাবে খারাপ ডিজাইনের অনুশীলন (এবং কেন) তা প্রশ্ন। ডেটাবেসের ভিতরে সমস্ত যুক্তি উপস্থিত থাকলে লাইনগুলি আরও ঝাপসা হয়ে যায় এবং আপনি কেবল একটি ওআরএম এর মাধ্যমে আঘাত করছেন।


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

154
"কখনই" বা "সর্বদা" দিয়ে একটি বাক্যাংশ শুরু করা প্রায়শই একটি খারাপ ডিজাইনের একটি রেসিপি।
বনাম

34
যদিও এসকিউএল-তে খুব বেশি চেষ্টা করার চেষ্টা করা সম্ভব হয়েছে, তবুও আমি সত্যই বলতে পারি যে 30 বছরের বিকাশ এবং পরামর্শের মধ্যে আমি এর সত্যিকারের গুরুতর কেস কখনও দেখিনি (কয়েকটি ছোটখাটো) ones অন্যদিকে, আমি আক্ষরিক অর্থেই দেখেছি বিকাশকারীদের শতাধিক গুরুতর কেস "কোড" এ করার চেষ্টা করছে যা তাদের এসকিউএল-তে করা উচিত ছিল। এবং আমি এখনও তাদের দেখতে না। প্রায়শই ...
আরবারি ইউং 21

2
@ এমআরএডমুন্ডো এটি মেটাতে নিয়ে যান।
ta.speot.is

4
এই প্রশ্নটি একটিতে দুটি - আমার মনে হয় এটি বিভক্ত হওয়া উচিত। 1) এসকিউএল কত করা উচিত? 2) ডিবিএমএসে কত করা উচিত? সঞ্চিত পদ্ধতিগুলি মাঝখানে পড়ে। আমি স্টোরেজ পদ্ধতিতে কোডড পুরো অ্যাপ্লিকেশন দেখেছি।
পুনরায় পোস্টার

উত্তর:


320

সাধারণ মানুষের কথায়:

এগুলি এসকিউএল তৈরি করার জন্য তৈরি এবং এটি বিশ্বাস করুন বা না করুন, আমি কোড দিয়ে দেখেছি:

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

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


88
+10000000000 এটি উল্লেখ করার জন্য যে এটি বিপজ্জনকভাবে ধরে নিয়েছে যে সমস্ত কিছুই কেবলমাত্র অ্যাপ্লিকেশনের মাধ্যমে ঘটবে।
এইচএলজিইএম

11
@ এসকিওরर्थ এটি ডেটাবেস ডিজাইনের খারাপ দিকে নিয়ে যায়। লাইন নিচে আপনি একটি ডাটাবেস যা দিয়ে শেষ করতে শুধুমাত্র সমস্ত পরবর্তী প্রক্রিয়াকরণের এটা আছে কারণে যে অ্যাপ্লিকেশন দ্বারা অর্থপূর্ণ অ্যাক্সেস করা যেতে।
সাইরেক্স

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

10
লেনদেন ভুলবেন না!
Sklivvz

24
@ এসকিউনर्थ: টিএল; ডাঃ: আপনার ডেটা ধারাবাহিক রাখার নিয়মগুলি ডাটাবেসে প্রয়োগ করা উচিত। উদাহরণস্বরূপ, লিখিত 99% অ্যাপ্লিকেশনগুলির জন্য, আপনার অ্যাপ্লিকেশনটি মারা যাওয়ার পরে ডেটা (এবং সেইজন্য ডাটাবেসগুলি) looooooooooong বাস করে । আমি এই অনেক, দেখা করেছি অনেক বছর নিচে বার (আরে, আমরা উইন্ডোজ / আইফোন / অ্যান্ড্রয়েড / কারণ {সন্নিবেশ পুরাতন এখানে প্ল্যাটফর্ম} মারা যাচ্ছে, আমরা যাই হোক না কেন-নতুন-জিনিস হল, উপর একটি সংস্করণ স্থাপন করা প্রয়োজন এখানে হোস্ট বা ওরাকল ডাটাবেস এবং সেখানে একটি নতুন ইউআই তৈরি করুন )। আজ, বা শীঘ্রই যে কোনও সময় এই প্রবণতা থামার কোনও কারণ নেই।
বাইনারি ওয়ারিয়র

122

"এসকিউএল সার্ভার আপনার পক্ষে ভালভাবে কী করতে পারে কোডের মধ্যে কখনই না করুন" - এ আমি এটি পুনরায় লিখতে চাই ।

স্ট্রিং ম্যানিপুলেশন, রেজেক্স ওয়ার্কের মতো জিনিস এবং এসকিউএল সার্ভারে (এসকিউএল সিএলআর ব্যতীত) আমি করতাম না।

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


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

3
কোর্স গর্জনের জন্য ঘোড়া?
স্টুপার ইউজার

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

3
যদি আপনার এসকিউএলটির রেগেক্স অপারেশন এবং স্ট্রিং ম্যানিপুলেশনের জন্য সমর্থন থাকে তবে এসকিউএল এ সেগুলি করা ভাল পছন্দ হতে পারে।
কেভিন ক্লাইনে

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

47

আপনি এসকিউএল সার্ভারটি আপনার পক্ষে ভাল করার জন্য যা পান তা কখনই কোডে করবেন না (জোর আমার)

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

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

এই উদাহরণগুলি বিবেচনা করুন:

  • আপনি একটি জন্ম তারিখ সঞ্চয় করেন এবং আপনাকে একদল ব্যবহারকারীর জন্য বয়স গণনা করতে হবে। আপনার এসকিউএল সার্ভারটি বিয়োগ করতে পারে বা আপনি আপনার কোডটিতে এটি করতে পারেন। রাউন্ড-ট্রিপের সংখ্যা একই থাকে এবং আপনাকে যে পরিমাণ ডেটা পাঠানো হয়েছিল তার পরিমাণ বেড়ে যায়। অতএব, একটি কোড-ভিত্তিক সমাধান জেতে
  • আপনি একটি জন্ম তারিখ সংরক্ষণ করেন এবং আপনার বয়স 20 থেকে 30 বছরের মধ্যে বয়সের ব্যবহারকারীদের খুঁজে বের করতে হবে You আপনি সমস্ত ব্যবহারকারীকে ক্লায়েন্টের উপর আবার লোড করতে পারেন, বয়স সন্ধানের জন্য বিয়োগ বিয়োগ করতে পারেন এবং তারপরে ফিল্টারিং করতে পারেন তবে যুক্তিটি এসকিউএল সার্ভারে প্রেরণ করতে পারেন অতিরিক্ত রাউন্ড ট্রিপগুলির প্রয়োজন ছাড়াই ডেটার পরিমাণ হ্রাস করবে; অতএব, এসকিউএল-ভিত্তিক সমাধান জয়ী।

1
আমি যখন কোথাও কাজ করেছি ব্যবসায়ের যুক্তি এসকিউএল দিয়ে নিরাকার হয়ে উঠল, তখন একাধিক রাউন্ড ট্রিপ নিয়ে আমাদের কোনও সমস্যা হয়নি; আমরা কেবলমাত্র এক রাউন্ড ট্রিপে একাধিক ফলাফল সেট ব্যবহার করেছি, যাতে নিয়মটি সেখানে ভেঙে যায়, যদিও নিয়মের স্পিরিট সোনার
গড়কে

2
+1 এটি একটি দুর্দান্ত উত্তর কারণ এটি উভয় দিকনির্দেশকে সমর্থন করার জন্য দৃ concrete় উদাহরণ দেয়।
ব্র্যান্ডন

1
আপনার দ্বিতীয় উদাহরণ। আপনি কী বলবেন, যদি পরিস্থিতিটি নীচের মতো হয়- ব্যবহারকারী এবং বিডে ক্যাশে থাকে এবং রেকর্ড আকারটি 1000-2000 এর মধ্যে থাকে বলে। ডেটা ক্যাশেড হওয়ার কারণে কোনও ডিবি কল প্রয়োজন হয় না এবং তাই 'এর মধ্যে' এর মধ্যে এসকিএল অপারেশন এড়ানো যায় না স্মৃতিতে এটি করা আরও দ্রুত নয়। প্রক্রিয়াকরণটি 1000+ ব্যবহারকারীর মেমরির তালিকার মাধ্যমে পুনরাবৃত্তি করবে এবং মিলটি কোথায় ঘটে তা সন্ধান করবে। এটি ডিবি
তে

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

21

সংক্ষেপে বলতে গেলে , এটি হবে সঠিক বলতে: "কখনো সঞ্চালন ডাটাবেসের নির্দিষ্ট অপারেশন আপনার কোড বেস মধ্যে" হিসাবে তারা ভাল আপনার ডাটাবেসের মধ্যে সুরাহা করা হয়।

সেট বেস অপারেশনগুলির উদাহরণ দেখুন । আপনি জানেন যে, আরডিবিএমএস একটি সাধারণ ডেটা স্টোরেজ এবং ম্যানিপুলেশন অপারেশনগুলি পরিচালনা করতে তৈরি build

এছাড়াও, ডাটাবেসের প্রকল্প পছন্দ গুরুত্বপূর্ণ ভূমিকা পালন করে । একটি আরডিবিএমএস (এমএস এসকিউএল, ওরাকল, ইত্যাদি।) থাকা রাভেনডিবি এর মতো নোএসকিউএল ডাটাবেসের চেয়ে আলাদা।


কখনই আপনার কোড বেসে সেট অপারেশন স্থাপনের অর্থ লিনিক্যুতে সম্পন্ন (সিলেক্ট, যোগফল, যেখানে, একক) সমস্ত কিছু আপনার অ্যাপ্লিকেশনটিতে নয় এসকিউএল-তে করা উচিত , এটি আপনার ডাটাবেসে প্রচুর ব্যবসায়িক যুক্তি যুক্ত করে।
জিমি হোফা 16

4
আপনি যে জিনিসগুলি বর্ণনা করেন তা কোনও ক্লায়েন্ট কোড নয়। এটি একটি ব্যবসায়ের স্তর, যেখানে আপনার নিজের কারসাজির যুক্তি থাকতে পারে। তবে 1M + রেকর্ডে এই যুক্তিটি সম্পাদন করা আপনাকে ফিরে আসতে চলেছে।
EL ইউসুবভ

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

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

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

13

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

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

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


1
অর্থ হার্ডওয়্যার স্কেলিবিলিটি সমস্যাগুলি সমাধান করতে পারে, তবে কোনও পরিমাণ অর্থ সফ্টওয়্যার জটিলতা সমাধান করতে পারে না।
তুলাইনস কর্ডোভা

3
@ user1598390 আসলে: হার্ডওয়্যার সস্তা, প্রোগ্রামারগুলি ব্যয়বহুল । অর্থ সফ্টওয়্যার জটিলতা সমাধান করতে পারে। প্রোগ্রামারদের জন্য অর্থ ব্যয়। তবে মনে রাখবেন যে আমরা পরিষ্কার কোড বনাম স্পিগটিটির কথা বলছি না। আমরা অ্যাপের দিকে ডিবি পাশের বিপরীতে অ্যাপ্লিকেশনটিতে কাজ সম্পাদনের বিষয়ে কথা বলছি। সফ্টওয়্যার জটিলতা কেবলমাত্র প্রান্তিকভাবে সম্পর্কিত কারণ উভয় বিকল্পই ভাল ডিজাইনের নীতি অনুসরণ করতে পারে follow আরও ভাল প্রশ্ন হ'ল: " কোন ডিজাইনের দাম বেশি? "
টাইলার 18

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

1
আপনার উত্তরে স্কেলিংয়ের উল্লেখ করার জন্য একমাত্র ব্যক্তি হিসাবে +1।
ম্যাট 20

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

12

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

সুতরাং যে জিনিসগুলি একটি ডাটাবেসে করা আবশ্যক:

  • নিরীক্ষণ (কেবলমাত্র নিরীক্ষণের মাধ্যমে ডাটাবেসের সমস্ত পরিবর্তনই ট্র্যাক হবে না এবং এটি মূল্যহীন)।

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

  • যোগদান এবং যেখানে ক্লজ ফিল্টারিং (নেটওয়ার্ক জুড়ে প্রেরিত রেকর্ডের সংখ্যা হ্রাস করতে)


6

"কম্পিউটার প্রোগ্রামিংয়ে অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল (এটি বেশিরভাগ ক্ষেত্রেই হোক)" - ডোনাল্ড নুথ uth

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

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

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


অপেক্ষা করুন, অপেক্ষা করুন, কী? আপনি কীভাবে সঠিকতার প্রমাণগুলি থেকে পরীক্ষাগুলিতে পৌঁছেছিলেন, যা প্রমাণ করতে পারে যে বাগগুলি রয়েছে কিন্তু কোডটি সঠিক তা কখনই প্রমাণ করতে পারে না?
ম্যাসন হুইলারের

2
একটি সঞ্চিত প্রক্রিয়া পদ্ধতিগত কোড নয়। একটি এসপি হ'ল একটি প্রাক-গণিত এসকিউএল কোয়েরি যা সঞ্চিত থাকে এবং ডিবি-র ভিতরে চলে। এটি অ্যাপ্লিকেশন কোড নয়।
gbjbaanb

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

5

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

উদাহরণস্বরূপ, আপনার যদি কিছু ডেটা ধরতে হয় এবং তারপরে ডেটা থেকে কোনও কিছু গণনা করতে হয় এবং সেই ডেটাবেসে ডেটা সংরক্ষণ করে। দুটি পছন্দ আছে:

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

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

অবশ্যই, আপনি 2 সেকেন্ড বন্ধ যাইহোক, আপনি বরং 10 সেকেন্ডের জন্য আপনার ডাটাবেস সার্ভারে একটি কমপক্ষে একটি সিপিইউ কোর (100%) নষ্ট করেছিলেন, বা আপনি কি সেই সময়টি আপনার ওয়েব সার্ভারে নষ্ট করেছেন?

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

সুতরাং, কোনও অপারেশন থেকে কেবল 2 সেকেন্ডের শেভের কথা ভাবেন না, তবে স্কেলিবিলিটি সম্পর্কেও ভাবেন। যখন আপনি তুলনামূলকভাবে ছোট পারফরম্যান্স প্রভাব সহ অনেক সস্তা ওয়েব সার্ভার রিসোর্স ব্যবহার করতে পারেন তখন কেন ডেটাবেস সার্ভার রিসোর্সের মতো ব্যয়বহুল সংস্থান নষ্ট করবেন


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

4

আমি এটি দেখতে চাই কারণ এসকিউএল কেবলমাত্র ডেটা দিয়েই ডিল করা উচিত। ব্যবসায়ের নিয়ম যা কোয়েরিতে দেখতে কেমন হতে পারে তা স্থির করে কোডেও ঘটতে পারে। ইনফরমিটনটির রেজেক্স বা বৈধকরণ কোডে করা উচিত। এসকিউএলকে কেবলমাত্র আপনার টেবিলটিতে যোগ দিতে, আপনার ডেটা জিজ্ঞাসা করতে, পরিষ্কার ডেটা sertোকানো ইত্যাদি ছেড়ে দেওয়া উচিত etc.

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

যদিও আমার আমার 0.02 ডলার।


আপনি ইতিমধ্যে ডাটাবেসে থাকা ডেটাতে একটি রেজেক্স বা বৈধতা কেন চালাবেন? সীমাবদ্ধতাগুলির খারাপ ডেটা সেখানে পৌঁছানো থেকে বিরত রাখা উচিত এবং রেইগেক্সের ব্যবহার সম্ভবত আপনার আরও দরকারী কলামগুলির প্রয়োজন ..
ব্রেন্ডন লং

আমি বলছিলাম না যে আমি ডেটাবেস থেকে আগত ডেটাতে রেজেেক্স বা বৈধতা ব্যবহার করব। আমি অনুমান করি যে আমার স্পষ্ট করে দেওয়া উচিত ছিল যা ডেটাবেজে যাওয়ার ডেটা ছিল। আমার বক্তব্যটি ছিল ডালের কাছে যাওয়ার আগে ডেটা পরিষ্কার করা এবং বৈধ হওয়া উচিত।
স্ট্যানলি গ্লাস জুনিয়র

3

সাধারণত আমি সম্মত হই যে কোডটি ব্যবসায়ের যুক্তি নিয়ন্ত্রণ করতে হবে এবং ডিবি লজিক মুক্ত হ্যাশ হওয়া উচিত। তবে এখানে কিছু পাল্টা পয়েন্ট রয়েছে:

প্রাথমিক, বিদেশী কী এবং প্রয়োজনীয় (নাল নয়) সীমাবদ্ধতা কোড দ্বারা প্রয়োগ করা যেতে পারে। সীমাবদ্ধতা ব্যবসায়িক যুক্তি। কী কোডটি করতে পারে সেগুলি সদৃশ করার পরে সেগুলি কি ডাটাবেসের বাইরে রেখে দেওয়া উচিত?

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

আপনার ওআরএম প্রতিটি বস্তুর জন্য পৃথক সন্নিবেশ / আপডেট সম্পাদন করে? যদি হ্যাঁ, তবে ব্যাচ বড় ডেটা সেটগুলি প্রক্রিয়াকরণ করার সময় আপনার কঠোর পারফরম্যান্স সমস্যা হবে। সেট অপারেশনগুলি যাওয়ার উপায়। কোনও ওআরএমের সম্ভাব্য সংযুক্ত সমস্ত সেটকে সঠিকভাবে মডেলিং করতে সমস্যা হবে যার উপর আপনি অপারেশন করতে পারেন।

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


ডাউনটা কেন?
মাইকে 30

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

1
@HLGEM। উত্তর কারণে বর্ণনা যুক্তিবিজ্ঞান রাখার মধ্যে ডাটাবেসের বা ডিবি সার্ভারে বসে। এখনও এটি ব্যাখ্যা করে না।
মাইকে 30

তারা আমার প্রতিরূপগুলিতে পৌঁছতে পারে নি, সে কারণেই আমি হ্রাস করি নি।
এইচএলজিইএম

3

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

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


0

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

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


0

এখানে কয়েকটি জিনিস মনে রাখবেন:

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

0

"অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল" - ডোনাল্ড নুথ

কাজের জন্য সবচেয়ে উপযুক্ত সরঞ্জামটি ব্যবহার করুন। ডেটা অখণ্ডতার জন্য, এটি প্রায়শই ডাটাবেস। উন্নত ব্যবসায়ের নিয়মের জন্য, এটি জেবস ড্রলসের মতো একটি নিয়ম-ভিত্তিক সিস্টেম। ডেটা ভিজ্যুয়ালাইজেশনের জন্য, এটি প্রতিবেদনের কাঠামো হবে। প্রভৃতি

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

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