পার্লের ডিবিআইএক্স :: ক্লাসটি কখন ব্যবহার করা উচিত?


17

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

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

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

সুতরাং, আমি কীভাবে সিদ্ধান্ত নিতে পারি যে ডিবিআইএক্স :: শ্রেণি ব্যবহার কোনও প্রকল্পের জন্য উপযুক্ত?


3
আপনি কি আর একটি বই লিখছেন? :)
সিম্বাব্যেক

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

উত্তর:


24

প্রশ্নের উত্তর দেওয়ার আগে আমি মনে করি কিছু ব্যাকগ্রাউন্ড ক্রমযুক্ত।

সমস্যার কোর

কয়েক বছর বিকাশকারী এবং বিকাশকারীদের নিয়োগের পরে, আমি দুটি জিনিস শিখেছি:

  1. বিকাশকারীদের সংখ্যাগরিষ্ঠ ডেটাবেস ডিজাইনে খুব কম অভিজ্ঞতা আছে।

  2. যারা ডেটাবেস বুঝতে পারছেন না এবং যারা ওআরএম ঘৃণা করেন তাদের মধ্যে আমি একটি আলগা সম্পর্ক খুঁজে পেয়েছি ।

(দ্রষ্টব্য: এবং হ্যাঁ, আমি জানি এমন অনেকে আছেন যারা খুব ভালভাবে ডাটাবেসগুলি বুঝতে পারেন যারা ওআরএমকে ঘৃণা করেন)

যখন বুঝতে পারি না কেন বিদেশী কী কেন তুমি Taiwan থেকে প্রস্তুতকারকের নাম এম্বেড করবেন না, গুরুত্বপূর্ণ itemটেবিল বা কেন customer.address1, customer.address2আর customer.address3ক্ষেত্রের একটি ভাল ধারণা লেখার ডাটাবেসের বাগ তা তাদের জন্য সহজ করতে একটি ORM যোগ হয় না, কিছু সাহায্য করতে যাচ্ছে না।

পরিবর্তে, একটি সঠিকভাবে ডিজাইন করা ডাটাবেস এবং একটি ওলটিপি ব্যবহারের ক্ষেত্রে, ওআরএমগুলি সোনালি। বেশিরভাগ উদ্বেগজনক কাজ চলে যায় এবং ডিবিআইএক্স :: শ্রেণি :: স্কিমা :: লোডার এর মতো সরঞ্জামগুলি সহ আমি কয়েক মিনিটের মধ্যে পার্ল কোড থেকে একটি ভাল ডাটাবেস স্কিমায় যেতে পারি। আমি পেরেটো বিধিটি উদ্ধৃত করে বলব যে আমার 80% সমস্যা 20% কাজ দিয়ে সমাধান করা হয়েছে তবে বাস্তবে আমি এর চেয়ে আরও বেশি সুবিধা পেয়েছি।

সমাধানের অপব্যবহার করছি

কিছু লোক ORM গুলি ঘৃণা করার আরেকটি কারণ হ'ল তারা বিমূর্ততাটি ফাঁস হতে দেবে। আসুন এমভিসি ওয়েব অ্যাপ্লিকেশনগুলির সাধারণ ক্ষেত্রে বিবেচনা করি। এখানে আমরা সাধারণত দেখতে পাই এমন কিছু (সিউডো কোড):

GET '/countries/offices/$company' => sub {
    my ( $app, $company_slug ) = @_;
    my $company = $app->model('Company')->find({ slug => $company_slug }) 
      or $app->redirect('/');
    my $countries = $app->model('Countries')->search(
     {
         'company.company_id' => $company->company_id,
     },
     {
         join     => [ offices => 'company' ],
         order_by => 'me.name',
     },
   );
   $app->stash({
     company   => $company,
     countries => $country,
   });
}

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

GET '/countries/offices/$company' => sub {
   my ( $app, $company_slug ) = @_;
   my $result = $app->model('Company')->countries($company_slug)
     or $app->redirect('/');
   $app->stash({ result => $result });
}

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

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

রিপোর্টিং এবং অন্যান্য সীমাবদ্ধতা

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

আমি ডিবিআইএক্স :: ক্লাস :: রিপোর্ট লেখা শুরু করার কারণ এটি । এখন পর্যন্ত এটি ভালভাবে কাজ করে এবং লোকেরা এখানে থাকা বেশিরভাগ সমস্যার সমাধান করে (এতক্ষণ তারা কেবল পঠনযোগ্য ইন্টারফেসের সাথে ঠিক আছে)। বাস্তবে এটি ক্রাচের মতো মনে হচ্ছে, যতক্ষণ না আপনি আপনার বিমূর্ততাটি ফাঁস করছেন না (আগের বিভাগে বর্ণিত হিসাবে) এটি DBIx::Classকাজকে আরও সহজ করে তোলে ।

সুতরাং আমি কখন ডিবিআইএক্স :: ক্লাস বেছে নেব?

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

DBIx::Classসঠিকভাবে ব্যবহারের মূল চাবিকাঠি বেশিরভাগ ওআরএম-এর মতোই:

  1. বিমূর্ততা ফাঁস করবেন না।

  2. আপনার নিন্দিত পরীক্ষা লিখুন।

  3. প্রয়োজন অনুসারে কীভাবে এসকিউএল এ নেমে যায় তা জানুন।

  4. কীভাবে একটি ডাটাবেসকে সাধারণ করতে হয় তা শিখুন।

DBIx::Classএকবার আপনি এটি শিখলে, আপনার জন্য বেশিরভাগ ভারী উত্তোলনের যত্ন নেবে এবং দ্রুত অ্যাপ্লিকেশনগুলি লেখার জন্য এটি বাতাস তৈরি করে।


1
আপনি কখন এটি ব্যবহার করবেন না তার জন্য আপনি অন্য তালিকা যুক্ত করতে পারেন। :)
ব্রায়ান ডি foy

1
এটি আপনার কাছে সুস্পষ্ট, তবে অনেক পাঠকের কাছে সম্ভবত এটি স্পষ্ট নয় (আমি বলছি, বহু বছর ধরে কাটিয়েছি #dbix-classএবং #catalyst) - "বিমূর্ততা ফাঁস করবেন না" বিটের মূল কীটি আপনি ডিবিআইসি-তে কাজ করছেন এমন প্রতিটি জিনিসই হ'ল কোনও কিছুর সাবক্লাস যা কুকি-কর্তনকারী আচরণ সরবরাহ করে। আপনার সাবক্লাসে পদ্ধতি যুক্ত করার জন্য আপনি দৃ encouraged়ভাবে উত্সাহিত হয়েছেন এবং আপনি যদি প্রশ্নোত্তর কাজ না করেন, কেবল আপনার রচিত পদ্ধতিগুলি আপনার পাবলিক ইন্টারফেসের অংশ হওয়া উচিত part
hobbs

@ হোবস: প্রকৃতপক্ষে, আমি এখানেই লোকদের সবচেয়ে বেশি ভুল হতে দেখি এবং তারা ডিবিআইসি-র সাথে আটকে যায়। আমরা প্রায়শই ধরে নিয়েছি যে লোকে তারা ছোট কী করছে তা জেনে থাকে তবে বড় আকারে তারা খুঁজে পায় না।
ব্রায়ান ডি বন্ধু

9

কখন কোন জিনিস ব্যবহার করবেন তা জানার জন্য জিনিসটির উদ্দেশ্য কী তা বোঝা গুরুত্বপূর্ণ। পণ্যের লক্ষ্য কী।

ডিবিআইএক্স :: ক্লাস একটি ওআরএম - অবজেক্ট-রিলেশনাল ম্যাপার। একটি ওআরএম সম্পর্কিত / সেট-ভিত্তিক সম্পর্কিত সম্পর্কিত ডাটাবেস ডেটা স্ট্রাকচার গ্রহণ করে এবং এটি কোনও বস্তু গাছের কাছে ম্যাপ করে। শ্রেণীর বিবরণ হিসাবে টেবিলের কাঠামোটি ব্যবহার করে rowতিহ্যবাহী ম্যাপিং সারি প্রতি প্রতি একটি অবজেক্ট। ডাটাবেসে পিতা-সন্তানের সম্পর্কগুলি বস্তুর মধ্যে ধারক সম্পর্ক হিসাবে বিবেচিত হয়।

এটাই এর হাড়। তবে, এটি আপনাকে কোনও ওআরএম ব্যবহার করা উচিত কিনা তা সিদ্ধান্ত নিতে আপনাকে সহায়তা করে না। নিম্নলিখিতগুলি সত্য হলে ORM গুলি প্রাথমিকভাবে কার্যকর হয়:

  • আপনি একটি সম্পর্কিত ডেটাবেস ব্যবহার করুন।
  • আপনার ডেটা মূলত ওলটিপি (অনলাইন লেনদেন প্রক্রিয়াজাতকরণ) এর জন্য ব্যবহৃত হয়।
  • আপনি আপনার আবেদনের মধ্যে প্রতিবেদন লিখবেন না।

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

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

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


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

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

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

  • একত্রিত জিজ্ঞাসা হ'ল ORM গুলি এর জন্য নকশাকৃত নয় use ডিবিআইএক্স :: ক্লাস সামগ্রিক প্রশ্ন তৈরি করতে পারে, আপনি কোনও বস্তু গ্রাফ তৈরি করছেন না, তাই কেবল ডিবিআই সরাসরি ব্যবহার করুন।
  • পারফরম্যান্স অপটিমাইজেশন ব্যবহার করা হয় কারণ আপনি যেভাবে এটি অ্যাক্সেস করেন তা বিবেচনা না করেই অন্তর্নিহিত ডাটাবেসের জন্য অনুসন্ধান করা ডেটাটি অনেক বড় large বেশিরভাগ রিলেশনাল ডাটাবেসগুলি এসএসডি থেকে প্রায় 1-3 মিমি সারি চালিত টেবিলগুলির জন্য আদর্শ যেখানে বেশিরভাগ ডেটা + সূচকগুলি র‍্যামের সাথে ফিট করে। আপনার পরিস্থিতি যদি এর চেয়ে বড় হয় তবে প্রতিটি সম্পর্কিত ডেটাবেসে সমস্যা থাকবে।

হ্যাঁ, একটি দুর্দান্ত ডিবিএ ওরাকল বা এসকিউএল * সার্ভারে 100 মিমি + সারি ফাংশন সহ টেবিল তৈরি করতে পারে। আপনি যদি এটি পড়ছেন, আপনার স্টাফের উপর দুর্দান্ত ডিবিএ নেই।

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


আমার মনে হয় আমি দেখি প্রায় সমস্ত কিছুই প্রতিবেদন লেখেন, এ কারণেই সম্ভবত মানুষকে ম্যানুয়াল প্রশ্নগুলিতে নামতে হবে (এবং এটাই ব্যথা)।
brian d foy

1
রিপোর্টগুলির জন্য আপনাকে কেন ম্যানুয়াল ক্যোয়ারিতে নেমে যেতে হবে তা আমি বুঝতে পারি। আমি ডিবিআইসি ব্যবহার করে বেশ জটিল জটিল প্রতিবেদন তৈরি করেছি। অবশ্যই এটি প্রায়শই 'প্রিফেচ' এবং 'জয়েন' এর ভারী ব্যবহারের সাথে একটি বিশাল কাস্টমাইজড রেজাল্ট তৈরি করা জড়িত।
ডেভ ক্রস

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

> আপনি যে সাতটি ক্ষেত্রের প্রয়োজন কেবল তা টানছেন তা নিশ্চিত করার জন্য হ্যাঁ, ফলাফলসেট অনুসন্ধানগুলির জন্য "কলাম" অ্যাটর ব্যবহার করা হয়। কাঁচা এসকিউএল করার জন্য আমি শুনেছি বা দেখেছি এমন একমাত্র বৈধ আর্গুমেন্টগুলি হ'ল: ১. অত্যন্ত জটিল জটিল সাব-কোয়েরিগুলি, যা সাধারণত খারাপভাবে ডিজাইন করা টেবিল / ডিবি 2 হয় ডিডিএল বা অন্যান্য 'ডু' ক্রিয়াকলাপ, যা ডিবিআইসি নয় সত্যিই জন্য নির্মিত হয় না। ৩. সূচক ইঙ্গিতগুলিতে হ্যাক করার চেষ্টা করা হচ্ছে। আবার, এটি আরডিবিএমএসের আরও দুর্বলতা, তবে কখনও কখনও এটি করা প্রয়োজন। এবং কেবল ডিবিআইসিতে এই ধরণের কার্যকারিতা যুক্ত করা সম্ভব।
ব্রেন্ডন বাইার্ড

8

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

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

  • পূর্বনির্ধারিত প্রশ্নের অর্থ হ'ল আমি অ্যাপলিকেশন কোড থেকে সহজ পদ্ধতিগুলি (যাকে আর্গগুলি সহ বা নাও বলা যায়) তৈরি করতে পারি তাই আমি আমার প্রশ্নগুলি আমার অ্যাপ্লিকেশন কোডটি ফাঁসানোর পরিবর্তে স্কিমি সংজ্ঞাতে রাখি।

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

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

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

ডিবিআইসি এবং অন্যান্য ওআরএম / ওআরএম-এর মতো প্ল্যাটফর্মগুলির মধ্যে একটি বিশাল পার্থক্য হ'ল এটি আপনাকে তার কাজগুলি করার পথে পরিচালিত করার চেষ্টা করলেও এটি আপনার পছন্দ মতো কোনও পাগল জিনিস থামিয়ে দেয় না:

  • আপনি এসকিউএল ফাংশন এবং সঞ্চিত প্রক্রিয়াগুলি ব্যবহার করতে পারেন যা ডিবিআইসি জানেন না যে কেবলমাত্র ফাংশনটির নামটি কোয়েরিতে কী হিসাবে সরবরাহ করে (আপনি যখন মাইএসকিউএল এ কমপক্ষে ব্যবহার করার চেষ্টা করেন তখন কিছুটা মজাও পেতে পারে ^^ তবে এটি ডিবিআইসির দোষ নয়) ।

  • কিছু করার জন্য যখন 'ডিবিআইসি উপায়' না থাকে এবং ফলাফল ফিরে পাওয়া যায় তখনও অ্যাক্সেসর সহ চমৎকার ক্লাসগুলিতে আবৃত থাকে যখন আক্ষরিক এসকিউএল ব্যবহার করা যেতে পারে।

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


7

(আমি শুরু করার আগে আমার বলা উচিত এটি কেবল ডিবিআইসি, ডিবিআই এবং মোজো ভিত্তিক ডিবিআই মোড়কের সাথে তুলনা করে I আমার কাছে অন্য কোনও পার্ল ওআরএমের সাথে অভিজ্ঞতা নেই এবং তাই এগুলি সম্পর্কে সরাসরি মন্তব্য করব না)।

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

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

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

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

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

যদি আপনি এসকিউএল পছন্দ করেন না বা আপনার অ্যাসিঙ্কের প্রয়োজন না হয় তবে ডিএল ডিবিআইসি ব্যবহার করেন, সেই ক্ষেত্রে মোজো স্বাদযুক্ত ডিবিআইয়ের মোড়কে তদন্ত করুন।


6

আমি এই নিয়ে আমার চিন্তাভাবনাগুলি লিখেছিলাম তিন বছর আগে ডিবিআইসি বনাম ডিবিআইতে । সংক্ষেপে বলতে গেলে, আমি দুটি প্রধান কারণ তালিকাভুক্ত করেছি:

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

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


2
হু, আমি টাইপগুলি ঠিক করতে পারছি না কারণ আমি পর্যাপ্ত অক্ষর ("রিঘ টটুল") পরিবর্তন করি না। কৌতূহলীভাবে খোঁড়া। তবে এটি উত্তর ধরণের যা আমার ধাঁধা দেয়। আমি আপনার পার্লহ্যাক্স পোস্টে মনে করি, আপনি এমন একটি বিষয় সম্বোধন করেছেন যা রব উল্লেখ করেছে, তবে অন্যটি বিবেচনা করবেন না। অনেক ক্ষেত্রে, আমি লোকদের ম্যানুয়াল এসকিউএল ফিরে যেতে দেখেছি।
brian d foy

1

যেভাবে আমি এটি স্কেল করি:

  1. একটি ক্লাস তৈরি করুন যা ডিবিআই সকেট কনস্ট্রাক্টর এবং পরীক্ষার পদ্ধতি সরবরাহ করে।

  2. আপনার এসকিউএল কোয়েরি ক্লাসগুলিতে (বর্গ টেবিল প্রতি এক ক্লাস) শ্রেণিটি তৈরি করুন এবং নির্মাতার সময় সকেটের জন্য পরীক্ষা করুন।

  3. আপনার টেবিলের নাম এবং প্রাথমিক সূচক কলামের নামগুলি ধরে রাখতে শ্রেণি স্কোপযুক্ত ভেরিয়েবলগুলি ব্যবহার করুন।

  4. আপনার সমস্ত এসকিউএল ইন্টারপোলটিং টেবিলের নাম এবং প্রাথমিক সূচক কলামগুলি স্থায়ীভাবে এসকিউএল-এ সংজ্ঞায়িত করার পরিবর্তে সেইগুলি পরিবর্তনগুলি থেকে লিখুন।

  5. আপনাকে কেবলমাত্র এসকিএল স্টেটমেন্টে টাইপ করার সময় আপনাকে প্রাথমিক ডিবিআই পদ্ধতির জোড় তৈরি করতে (প্রস্তুত এবং কার্যকর করতে) অনুমতি দেওয়ার জন্য সম্পাদক ম্যাক্রো ব্যবহার করুন।

আপনি যদি এটি করতে পারেন তবে আপনি আপেক্ষিক স্বাচ্ছন্দ্যে সারাদিন ডিবিআইয়ের উপরে ক্লিন এপিআই কোড লিখতে পারেন।

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

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

কখন ডিবিআই ব্যবহার করবেন: সর্বদা।

আমি মনে করি না যদিও এটি আপনার আসল প্রশ্ন ছিল। আপনার আসল প্রশ্নটি ছিল: "এটি দেখতে বিশাল পিটার মতো দেখাচ্ছে, দয়া করে আমাকে বলুন যে আমাকে এটি করতে হবে না?"

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


আপনার যে কোনও ওপেন সোর্স প্রকল্প আপনি ভাগ করে নিতে পারেন এমন কোনও সুযোগ রয়েছে, বা প্রতিটি ক্লাসের উদাহরণ সহ গিথুবটিতে কেবলমাত্র একটি টুকরো? আমি মনে করি আপনি যে ধারণাগুলি বলছেন তা আকর্ষণীয় এবং সম্ভবত বহু লোকের প্রকল্পের পক্ষে কার্যকর হবে তবে কয়েকটি উদাহরণ দিয়ে যাওয়া আরও সহজ হবে be
মাউথ

0

আমি পার্ল বিশেষজ্ঞ নই, তবে আমি এটি প্রচুর ব্যবহার করি। আরও অনেক জিনিস রয়েছে যা আমি জানি না বা কীভাবে আরও ভাল করতে হয় তা জানি না; কিছু জিনিস আমি ডকুমেন্টেশন সত্ত্বেও এখনও বুঝতে সক্ষম নই।

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

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

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


4
এই উত্তরটি খুব ভালভাবে আসে না - আপনি ডিবিআইএক্স ব্যবহার করার সময় আপনার সমস্যা আছে, তবে কেন আপনার এই সমস্যাগুলি রয়েছে? ডিবিআই কি নমনীয় নয়, খুব শক্তভাবে ডিবি-র সাথে মিলিত হয়, স্কেলেবল নয়, বা কী?
জে এলস্টন 8'15
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.