ডাটাবেস বিমূর্ততা - এটি কি ওভারডোন হচ্ছে?


18

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

এবং এটি এমনকি সত্যতার পরে পঠনযোগ্যতার উপর স্পর্শ ছাড়াই:

# Exhibit A:  A typical DAL
rows = db(db.ips_x_users.ip_addr == '127.0.0.1')
    .inner_join(db.ips_x_users.user_id == db.users.id)
    .select(order=(db.ips_x_users.last_seen, 'desc'), limit=10)

# Exhibit B:  Another typical DAL
rows = db.ips_x_users
    .join(db.users, on=db.ips_x_users.user_id == db.users.id)
    .filter(db.ips_x_users.ip_addr == '127.0.0.1')
    .select(sort=~db.ips_x_users, limit=10)

# Exhibit C:  A hypothetical DAL based on standard SQL syntax
rows = db('''SELECT * FROM ips_x_users
             INNER JOIN users ON
                 (ips_x_users.user_id = users.id)
             WHERE ips_x_users.ip_addr = ip
             ORDER BY last_seen DESC LIMIT 10''', ip='127.0.0.1')

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

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


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

উত্তর:


10

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

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

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

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


3
"আরডিবিএমএস ওওপির সাথে ভালভাবে যায় না" - সফ্টওয়্যারটির সমস্ত কি ওও হতে হবে?
কোয়ান্ট_দেব

@ কোয়ান্ট_দেব: না তবে 'অ্যাবস্ট্রাকশন'-স্তরগুলি অন্তত অন্তত অন্তত 'বিমূর্তিমুখী' হয়। এছাড়াও প্রদত্ত কোড স্নিপেটগুলি পরামর্শ দেয় যে আমরা ওও-কোডের কথা বলছি।
back2dos

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

9

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


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

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

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

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

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

5

আমি মনে করি যে এসকিউএল 10 বছর আগে পয়েন্টারগুলির একই বড় পরিবর্তনটি অনুভব করছে। ম্যানুয়াল ওয়ার্ক উইট এসকিউএলকে নির্মূল করার এবং এটি একটি উচ্চ বিমূর্ত স্তরে নিয়ে যাওয়ার একটি চলমান প্রচেষ্টা চলছে। পয়েন্টার এবং ম্যানুয়াল মেমরি ম্যানেজমেন্টের ক্ষেত্রে অনেক বছর আগে একই ঘটনা ঘটেছিল।

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

এটি অবশ্যই আপনাকে একটি প্রান্ত দেয় যখন আপনি একই স্তরে ডেটা অ্যাক্সেস কোডটি পরিচালনা করতে পারেন এবং একই অ্যাপ্লিকেশন দিয়ে আপনি যখন প্রয়োগ করেন আপনার অ্যাপ্লিকেশন কোড দিয়ে কাজ করার সময় apply

কয়েকটি কথায় - সরলকরণ, তত্পরতা, দ্রুততা, এগুলি লক্ষ্য।


4

জোয়েল 10 বছর আগে সুন্দর নিবন্ধ লিখেছিলেন: আর্কিটেকচার নভোচারী আপনাকে ভয় দেখাতে দেবেন না

আমি মনে করি এটি ঠিক কেস। আমি আমার নিজস্ব অ্যাপ্লিকেশনগুলিতে বিমূর্ত স্তরটি ব্যবহার করছিলাম যেহেতু আমি একটি নিদর্শন পেয়েছি এবং এটি আমার পক্ষে এভাবে করা সহজ easy তবে এটি আমার ডাল ছিল আমি সোর্স কোড => সম্পূর্ণ নিয়ন্ত্রণের প্রতিটি লাইন জানতাম। তবে আমি সেই কাঠামোটি আমার দল / প্রকল্পের বাইরের কাউকে ব্যবহার করার পরামর্শ দেব না।

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


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

@ কোয়ান্ট_দেব হ্যাঁ, এটি হ'ল ফাঁদ - হাইবারনেট বা জেপিএ দিয়ে সাধারণ কাজ করা সহজ easy
m5ba 21
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.