জাভা প্রোগ্রামিং - এসকিউএল বিবৃতি কোথায় সংরক্ষণ করা উচিত? [বন্ধ]


107

একটি জেডিবিসি-অনুগত অ্যাপ্লিকেশনটির এসকিউএল স্টেটমেন্টগুলি কোথায় সংরক্ষণ করতে হবে এবং কেন?

এখনও অবধি, আমি এই বিকল্পগুলি সনাক্ত করতে সক্ষম হয়েছি:

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

প্রত্যেকের জন্য "পেশাদার" এবং "কনস" কী?

এসকিউএল কোডকে "কোড" বা "মেটাডেটা" হিসাবে বিবেচনা করা উচিত?

সঞ্চিত পদ্ধতিগুলি কেবল পারফরম্যান্স অপ্টিমাইজেশনের জন্য ব্যবহার করা উচিত বা এগুলি ডাটাবেস কাঠামোর বৈধ বিমূর্ততা?

পারফরম্যান্স কি একটি মূল ফ্যাক্টর সিদ্ধান্ত? বিক্রেতা লক-ইন সম্পর্কে কী ?

ভাল কি - আলগা সংযুক্ত বা আঁট সংযোগ এবং কেন?

সম্পাদিত: উত্তরের জন্য আপনাকে সবাইকে ধন্যবাদ - এখানে একটি সারাংশ দেওয়া হল:

মেটাডেটা চালিত অর্থাৎ অবজেক্ট রিলেশনাল ম্যাপিংস (ওআরএম)

পেশাদাররা:

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

কনস:

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

হার্ডকোডযুক্ত / ডিএও স্তরতে এনক্যাপসুলেটেড

পেশাদাররা:

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

কনস:

  • এসকিউএলকে ডিবিএ দ্বারা পর্যালোচনা / পরিবর্তন করা যাবে না
  • এসকিউএল সম্ভবত ডিবি-নির্দিষ্ট হয়ে উঠবে
  • এসকিউএল বজায় রাখা শক্ত হয়ে উঠতে পারে

সঞ্চিত পদ্ধতি

পেশাদাররা:

  • এসকিউএল ডাটাবেসে রাখা হয়েছে (ডেটার কাছাকাছি)
  • এসকিউএল ডিবিএমএস দ্বারা বিশ্লেষণ, সংকলন এবং অনুকূলিত করা হয়
  • এসকিউএল ডিবিএর পক্ষে পর্যালোচনা / পরিবর্তন করা সহজ
  • নেটওয়ার্ক ট্র্যাফিক হ্রাস করে
  • সুরক্ষা বাড়িয়েছে

কনস:

  • এসকিউএল ডাটাবেসের সাথে আবদ্ধ (বিক্রেতা লক-ইন)
  • এসকিউএল কোড বজায় রাখা শক্ত

বাহ্যিক ফাইল (যেমন সম্পত্তি বা সংস্থান ফাইল)

পেশাদাররা

  • অ্যাপ্লিকেশনটি পুনর্নির্মাণের প্রয়োজন ছাড়াই এসকিউএল পরিবর্তন করা যেতে পারে
  • অ্যাপ্লিকেশন ব্যবসার যুক্তি থেকে এসকিউএল লজিককে ডুপ্লুপ করে
  • সমস্ত এসকিউএল বিবৃতিগুলির কেন্দ্রীয় ভান্ডার - বজায় রাখা সহজ
  • বোঝা সহজ

কনস:

  • এসকিউএল কোডটি রক্ষণাবেক্ষণযোগ্য হতে পারে
  • (সিনট্যাক্স) ত্রুটির জন্য এসকিউএল কোডটি পরীক্ষা করা আরও শক্ত

এসকিউএলজে ধারাগুলিতে এম্বেড করা হয়েছে

পেশাদাররা:

  • আরও ভাল সিনট্যাক্স পরীক্ষা করা

কনস:

  • জাভা খুব কাছাকাছি সম্পর্ক
  • জেডিবিসির চেয়ে কম পারফরম্যান্স
  • গতিশীল প্রশ্নের অভাব
  • এত জনপ্রিয় না

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

+1 ভাল প্রশ্ন! আপনার প্রতি @ ওসিডিসিওতে "ওআরএম" যুক্ত করা উচিত। এছাড়াও "আপনার জাভা কোডের সর্বত্র ছিটানো" যুক্ত করুন (যা আমি দেখেছি এবং সবচেয়ে খারাপটি হবে)।
জিম ফেরানস

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

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

উত্তর:


31

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

হার্ডকোডযুক্ত (স্থির চূড়ান্ত স্থির হিসাবে) প্রথম পদক্ষেপ। একটি ফাইল (বৈশিষ্ট্য / এক্সএমএল ফাইল) সঞ্চিত পরবর্তী পদক্ষেপ is মেটাডেটা চালিত (যেমন হাইবারনেট / জেপিএর মতো কোনও ওআরএম দ্বারা সম্পন্ন) সর্বশেষ পদক্ষেপ।

হার্ডকোডের এমন অসুবিধা রয়েছে যে আপনার কোডটি সম্ভবত ডিবি-নির্দিষ্ট হয়ে উঠতে পারে এবং প্রতিটি পরিবর্তনের জন্য আপনাকে পুনর্লিখন / পুনর্নির্মাণ / পুনরায় বিতরণ করতে হবে। সুবিধা হ'ল এটি আপনার 1 স্থানে রয়েছে।

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

মেটাডেটা চালিত হ'ল অসুবিধাটি হ'ল ডেটাবেস মডেলের সাথে মিলিয়ে আপনার মডেল কোডটি খুব শক্ত। ডাটাবেস মডেলটির প্রতিটি পরিবর্তনের জন্য আপনাকে কোডটি পুনরায় লিখতে / পুনর্নির্মাণ করতে / পুনরায় বিতরণ করতে হবে। সুবিধাটি হ'ল এটি অত্যন্ত বিমূর্ত এবং আপনি নিজের মডেল পরিবর্তন না করেই খুব সহজেই ডিবি সার্ভার থেকে স্যুইচ করতে পারেন (তবে নিজেকে এখনই জিজ্ঞাসা করুন: ডিবি সার্ভার থেকে কোনও সংস্থা কতবার স্যুইচ করবে? সম্ভবত কমপক্ষে প্রতি 3 বছরে একবার একবার আসেনি) টি?)।

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


21

আমি জানি না এটি সর্বোত্তম কিনা তবে আমার অভিজ্ঞতায় তারা ডিএও স্তরতে হার্ডকোডযুক্ত (অর্থাত্ স্ট্রিং আক্ষরিক) শেষ করে।


5
এটি সম্ভবত অনুকূল নয় তবে এটি আমিও করি। লিখতে সহজ, ট্র্যাক ডাউন করা সহজ এবং উদ্বেগের জন্য কোনও অগোছালো আর্কিটেকচার।
জেমস ক্রোনেন

21
এবং হার্ড কোডেড এসকিউএল ট্র্যাক করতে সমস্ত সময় ব্যয় করা হ'ল চাকরির সুরক্ষা। যদি আপনি একমাত্র ব্যক্তি যিনি জানেন যে এসকিউএল কোথায়, আপনাকে বরখাস্ত করা যাবে না।
এস .লট

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

3
-1। ডিএও রাখা ঠিক আছে তবে খুব কম সময়ে কোথাও কোথাও কোথাও একটি সম্পত্তি ফাইলের জন্য প্রশ্নগুলি সরিয়ে নেওয়া যাতে কোনও ডিবিএ তাদের যথাযথ হিসাবে পর্যালোচনা করতে এবং তাত্ক্ষণিক করতে পারে!
চিত্তেগেক

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

12

আমি মনে করি না যে কেউ আপনাকে চাইবে এমন প্রবণতা দেবে যেহেতু এটি একটি বড় প্রশ্ন। অতএব পরিবর্তে এখানে আমি আগে যা ব্যবহার করেছি এবং আমি কী এগিয়ে যাব তা ব্যবহার করব।

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

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

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

এগিয়ে যাওয়া আমি ওরাকল প্যাকেজগুলি থেকে জাভা ক্লাস তৈরি করতে কোড উত্পন্ন সরঞ্জাম সহ সঞ্চিত পদ্ধতি ব্যবহার করতে চাই।

2013-01-31 সম্পাদনা করুন : কয়েক বছর এবং পরে ডিবিএ এবং আমরা এখন হাইবারনেট ব্যবহার করি, এসকিউএল (ডিবিতে সঞ্চিত প্রক্স) কেবল তখনই প্রয়োজন হয়। এটি আমার মনে হয় সেরা সমাধান। 99% বার এসবিএল নিয়ে ডিবিদের চিন্তা করার দরকার নেই, এবং 1% তারা এটি এমন জায়গায় করে যা তারা ইতিমধ্যে স্বাচ্ছন্দ্য বোধ করে।


1
সঞ্চিত প্রক্রিয়াগুলি লেখার ধারণার জন্য এবং তারপরে জাভা কোড উত্পন্ন করার জন্য, অন্যভাবে নয় +
ড্যানিয়েল প্রাইডেন

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

2
@ এক্সপচ: আমি আসলেই একমত - সম্ভবত আমার মন্তব্যটি অন্যরকম করে দেওয়া উচিত ছিল। আপনার ডাটাবেসটি আপনার ডেটা মডেলের (সত্তা সম্পর্কের মডেল) প্রতিচ্ছবি হওয়া উচিত এবং আপনার অবজেক্ট মডেলটি আপনার ডেটা মডেলের প্রতিবিম্বও হওয়া উচিত (যদিও এটি অভিন্ন নয়)। সুতরাং এগুলি অন্তত সম্পর্কিত হওয়া উচিত। সঞ্চিত পদ্ধতিগুলি থেকে জাভা কোড উত্পন্ন করার ক্ষেত্রে, মুল বক্তব্যটি হ'ল আপনার ডেটাবেজে অ্যাক্সেসের জন্য এপিআই আপনার ডেটা মডেলের কাঠামো থেকে নেওয়া উচিত, আপনার ডেটা মডেলটি আপনার সামগ্রীর কাঠামো থেকে উত্পন্ন নয়।
ড্যানিয়েল প্রাইডেন 22

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

10

একটি ওআরএম (যেমন হাইবারনেট) ব্যবহার করে আপনার আশা করা যায় যে উদ্বেগের জন্য কোনও এসকিউএল স্টেটমেন্ট নেই । পারফরম্যান্স সাধারণত গ্রহণযোগ্য এবং আপনি বিক্রেতার স্বাধীনতাও পাবেন।


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

1
@ ফ্লাইওয়াইওয়্যার - হাইবারনেটের সাথে এইচকিউএল অবলম্বন করা বিরলতা। 98% ক্ষেত্রে, উদাহরণস্বরূপ এবং মানদণ্ড অনুসারে ক্যোয়ারী (অর্থাত্‍ বস্তু ব্যবহার করা) যা প্রয়োজন তা কেবল।
একক শট

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

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

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

10

এসকিউএল কোডকে "কোড" বা "মেটাডেটা" হিসাবে বিবেচনা করা উচিত?

কোড।

সঞ্চিত পদ্ধতিগুলি কেবল পারফরম্যান্স অপ্টিমাইজেশনের জন্য ব্যবহার করা উচিত বা এগুলি ডাটাবেস কাঠামোর বৈধ বিমূর্ততা?

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

ORM তার বিমূর্ততার কারণে অপ্টিমাইজেশনে leণ দেয় না। আইএমই, ওআরএম এর অর্থ রেফারেন্সিয়াল অখণ্ডতার অভাব - একটি ডাটাবেস থেকে রিপোর্ট করা কঠিন করে তোলে। জটিলতায় যা সংরক্ষণ করা হয়েছিল, তা এখন কার্যক্ষম ফ্যাশনে ডেটা বের করতে সক্ষম হতে বেড়েছে।

পারফরম্যান্স কি একটি মূল ফ্যাক্টর সিদ্ধান্ত? বিক্রেতা লক-ইন সম্পর্কে কী?

না, সরলতা হয়। ভেন্ডর লককিন ডাটাবেসগুলির সাথেও ঘটে - এসকিউএল তুলনামূলকভাবে প্রমিত, তবে এখনও কিছু করার নির্দিষ্ট উপায় রয়েছে বিক্রেতাদের are


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

9

জাভা বিশ্বে বিক্রেতাদের লক-ইন হওয়ার ভয় আকর্ষণীয়।

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

সুতরাং, কীভাবে আপনার এসকিউএল কলগুলি কেবলমাত্র বিক্রেতার অজনোস্টিক এসকিউএল এর নীতির উপর ভিত্তি করে প্রয়োগ করবেন সে সম্পর্কে সিদ্ধান্ত নেবেন না - এটি করার সত্যিকারের (ব্যবসায়িক) কারণ থাকতে হবে।


1
ওহ, এরকম কিছুই না! মূল উদ্বেগটি হ'ল সহায়তা দলকে এসকিউএল স্টেটমেন্টগুলি (যেমন টিউনিংয়ের জন্য, ডিবিএ সম্পর্কিত কাজগুলি) পরিবর্তন করতে দেওয়া এবং অ্যাপ্লিকেশনটি কী করে তা সম্পর্কে দৃশ্যমানতা উন্নত করা (ডাটাবেসের সাথে সম্পর্কযুক্ত The কোড ড্রিল ডাউন দেখুন সুখী হতে অ্যাপ্লিকেশান সব একটি Ingres ডাটাবেস ব্যবহার বিদ্যমান বেশী একজন বড় এস্টেট একটি নতুন সংযোজন হবে।।
আদ্রিয়ান

6

সঞ্চিত পদ্ধতিগুলির অভ্যন্তরে এসকিউএল ডাটাবেস সিস্টেম দ্বারা অনুকূলিত করা হয় এবং গতির জন্য সংকলিত - এটি তার প্রাকৃতিক বাড়ি। এসকিউএল ডাটাবেস সিস্টেম দ্বারা পার্স করা ডেটাবেস সিস্টেম দ্বারা বোঝা যায়। আপনি যদি পারেন তবে আপনার এসকিউএল ডাটাবেজে রাখুন; এটি সঞ্চিত পদ্ধতি বা ফাংশনগুলিতে বা যেকোন যুক্তির যুক্তিযুক্ত ডেটাবেস সিস্টেম সরবরাহ করে এবং আপনার বা অন্য কেউ উল্লিখিত যে কোনও একটি সরঞ্জাম ব্যবহার করে এটিতে সহজ কল করুন।

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

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


+1 দর্শন দৃষ্টিকোণ। আপনি এই ব্লগ পোস্টে আগ্রহী হবেন, আমার মনে হয়: ডাটাবেস- প্রোগ্রামার.ব্লগস্পট . com/ 2010/12/…
লুকাশ এদার

5

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

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

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

4

আমরা আইব্যাটিস এসকিউএল ম্যাপার ব্যবহার করতে পারি যা হাইবারনেটের মতো ওআরএম থেকে ধাতুর আরও কাছাকাছি। আইব্যাটিসে আপনি এসকিউএল স্টেটমেন্টগুলিকে রিসোর্স ফাইলগুলিতে (এক্সএমএল) রেখেছিলেন যা ক্লাসপথে থাকতে হবে।

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


4

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

সর্বাধিক সফল সিস্টেম আমি দেখেছি সঞ্চিত পদ্ধতি, ফাংশন এবং দর্শনগুলি নিয়োগ করে।

সঞ্চিত প্রকোপগুলি এসকিউএল পাঠ্যটি ডিবিতে ফিরিয়ে রাখে এবং অপসারণ ও কাস্টমাইজিং (যার পক্ষে এটি সমর্থন করার জন্য অনেকগুলি উপযুক্ত নকশার প্রয়োজন হয়) দ্বারা অপেক্ষাকৃত তাত্ক্ষণিক পরিবর্তনের অনুমতি দেয়।

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


+1 মতামত উল্লেখ করার জন্য। এটি এখনও প্রশ্নের সংক্ষিপ্তসারে প্রতিফলিত হয়নি
লুকাশ এডার

2

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

public class CoolBusinessObject
public class DAOFactory.java
public implementation CoolBusinessOjectDAO
public class CoolBusinessOjectDAOOracleImpl implements CoolBusinessOjectDAO

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


2

এই তিনটির মধ্যে সত্যই কোনও পার্থক্য নেই:

  1. ব্যবসায়িক বিষয়গুলিতে হার্ডকোডযুক্ত
  2. এসকিউএলজে ধারাগুলিতে এম্বেড করা হয়েছে
  3. পৃথক শ্রেণিতে যেমন ডেটা অ্যাক্সেস অবজেক্টগুলিতে আবদ্ধ হয়

আমি ধরে নিচ্ছি যে আপনি এসকিউএল কোডটি সরাসরি আপনার জাভা কোডের মধ্যে স্ট্রিং আকারে এম্বেড করতে চলেছেন। যদিও 1 এবং 3 সম্ভবত জেডিবিসি সরাসরি ব্যবহার করবে (বা অ্যাপাচি ডিবিটিলের মতো কোনও সরঞ্জাম ), 2 সংকলনের পূর্বে প্রাসঙ্গিক জেডিবিসি কোড তৈরি করে, স্ট্যাকটিতে একটি প্রিপ্রসেসর প্রযুক্তি যুক্ত করে।

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

  • জেপিএ ক্রিটারিয়া এপিআই , জাভাতে অভ্যন্তরীণ ডোমেন-নির্দিষ্ট ভাষা হিসাবে জেপিকিউএলকে মডেলিং করে
  • jOOQ , একটি অভ্যন্তরীণ ডোমেন-নির্দিষ্ট ভাষা হিসাবে মডেলিং করছে

এসকিউএলজে বা আসল স্ট্রিং কনটেনটেশনের মাধ্যমে জাভাতে এসকিউএলকে আরও টাইপসেফ এম্বেডে সহায়তা করার জন্য অন্যান্য সরঞ্জামও থাকতে পারে।


1

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

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


কিছু লোকের আপত্তি হতে পারে যে এটি এসকিউএল ইঞ্জেকশনের ঝুঁকিটি প্রবর্তন করবে। সে সম্পর্কে আপনার মতামত কী?
অ্যাড্রিয়ান

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

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

1

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

আমি দেখতে আগ্রহী যে কেউ আমার পদ্ধতিরও ব্যবহার করে কিনা।


কৌতুহল কেন আপনি এসবিএলকে ডিবিতে রাখেন না?
Jé ক্যু

@ এক্সপচ - আপনার অর্থ কী? বিবৃতিগুলি রিসোর্স বান্ডিলগুলিতে (সম্পত্তি ফাইলগুলি) যা সত্তার মতো একই প্যাকেজের মধ্যে থাকে তাই গ্রাহক.প্রেটিগুলি গ্রাহক.ক্লাসের সাথে সম্পর্কিত। তথ্য ডিবিতে সংরক্ষণ করা হয়।
ব্রেট রায়ান

1

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

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

* Hardcoded in business objects
* Encapsulate in separate classes e.g. Data Access Objects

সহজ সমাধান (পি), বজায় রাখা শক্ত (সি)

* Embedded in SQLJ clauses

বিটার সিনট্যাক্স চেকিং (পি), অ ডায়নামিক কোয়েরি (সি) এর অভাব, জেডিবিসি (সি) এর চেয়ে কম পারফরম্যান্স নেই, এত জনপ্রিয় নেই (সি)

* Metadata driven (decouple the object schema from the data schema - describe the mappings between them in metadata)

এটি অবশ্যই সুনির্দিষ্ট ক্ষেত্রে আপনার (সি) করা উচিত বা আপনার অর্থ ওআরএম (পি);) হওয়া উচিত

* External files (e.g. Properties or Resource files)

ম্যানটাইন করা সহজ (পি) তবে ত্রুটিগুলি পরীক্ষা করা আরও শক্ত (সি)

* Stored Procedures

হাই সিকিওরটি (পি), একজন বিক্রেতার লক-ইন সমস্যা (সি) মান্টেন করার জন্য কোড কঠিন

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