যোগদান অলস মানুষের জন্য?


169

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

তার জন্য যোগদান অলস লোকদের জন্য যা পারফরম্যান্সের বিষয়ে চিন্তা করে না। এটা কি সত্য? আমাদের যোগদান করা এড়ানো উচিত?


114
না। ডেটাবেসগুলিতে যোগদানের জন্য অনুকূলিত করা হয়, বিশেষত বড় ডেটাসেটগুলির জন্য এগুলি অত্যন্ত দ্রুত। আপনি চান না যে আপনার অ্যাপ্লিকেশনটি কয়েক হাজার সারি লোড করুন এবং সেগুলি ম্যানুয়ালি একত্রিত করুন।
হাফদান

91
প্রোগ্রামিং ভাষা অলস মানুষের জন্য; তারা হাতে সিপিইউ নির্দেশাবলী কোডিংয়ের চেয়ে কম দক্ষ। :)
মাইকেল ম্যাকগওয়ান 13

76
বিকাশকারীর নাম কী? আমি নিশ্চিত করতে চাই যে আমি কখনই তাকে নিয়োগ করি না।
জো

39
@ মিশেল মেহ, বাস্তব প্রোগ্রামাররা প্রজাপতি ব্যবহার করুন ...
মার্ক গ্র্যাভেল

14
আপনার "এটি সত্য" - না, তা নয় Re ডাটাবেসগুলি সেট থিয়োর মাধ্যমে কাজ করে; সেটগুলিতে যোগদান করে খুব সুন্দর এবং কার্যকরভাবে ...
মার্ক গ্র্যাভেল

উত্তর:


188

না, আমাদের এমন বিকাশকারীদের এড়ানো উচিত যারা এই ধরনের অবিশ্বাস্যরূপে ভুল মতামত রাখে।

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

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

সম্পাদনা করুন: এমন কিছু বিরল ঘটনা রয়েছে যেখানে কাস্টম ক্লায়েন্ট কোডগুলি সরাসরি ডিবি যোগ দেওয়ার চেয়ে দক্ষতার সাথে জিনিসগুলি করতে পারে (মেরিট দ্বারা মন্তব্য দেখুন)। তবে এটি খুব ব্যতিক্রম।


1
3-ওয়ে যোগদানের কি? "কোডে" সেগুলি করা আপনার পক্ষে ভাল হবে এমন কোনও মামলা নেই?
জুলিয়েন_সি

56
ডাটাবেসে যোগ দেওয়ার কারণে নেটওয়ার্কের মাধ্যমে প্রেরিত ফলাফলের সেটটিতে মারাত্মক অতিরিক্ত বাড়াবাড়ি ঘটতে পারে তবে অ্যাপ সার্ভারে যোগ দেওয়া আরও কার্যকর হতে পারে। A এবং B সারণীগুলি বিবেচনা করুন, যেখানে A এর প্রতিটি সারি বিতে 20 টি সারি যুক্ত, বিতে 100 টি সারি রয়েছে এবং আমরা বি থেকে সংযুক্ত সারিগুলির সাথে A থেকে প্রথম 1000 সারি আনতে চাই, ডাটাবেসে যোগদানের ফলে 20 টি ফলাফল হবে * নেটওয়ার্ক জুড়ে 1000 টি টিপল পাঠানো হয়েছে। যদি অ্যাপ্লিকেশন সার্ভারে যোগ দেওয়া হয়ে থাকে (প্রথমে পুরো বি টেবিলটিকে মেমরিতে আনছে), নেটওয়ার্ক জুড়ে মাত্র 100 + 1000 সারি প্রেরণ করা হবে।
মেরিটন

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

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

2
@ মেরিটন আমি কিছুটা অবাক; আমি ক্লায়েন্ট লাইব্রেরি ক্রস যোগদানের অনুকূলিতকরণ আশা করি।
ফিল লেলো

83

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

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

সংক্ষেপে: আমি একমত নই। একটি আরডিবিএমএসে যোগ দেয় মৌলিক । আপনি যদি সেগুলি ব্যবহার না করে থাকেন তবে আপনি এটি আরডিবিএমএস হিসাবে ব্যবহার করছেন না।


46

ঠিক আছে, তিনি সাধারণ ক্ষেত্রে ভুল।

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


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

1
@ লেজেন্ডেল লেংথ আমি বলব যে তারা এত স্মার্ট না হলেও এটি সত্য। স্মার্টনেস ধরে নেওয়ার দরকার নেই কারণ তারা আমাদের ভুল করার মতো মনে করে একই ভুল করে (আসলে আমার কাছে এর অর্থ তারা এতো স্মার্ট নন ...) এটি সহজ: এটি খুব কমই বরখাস্ত হতে সহায়তা করে। ভুল হলে ঠিক হয়, একবারে!
সেপ্টেম্বর

24

না, তুমি কাঁদো না

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

একটি সরাইয়া হিসাবে, যোগ না দিয়ে, একটি ডাটাবেস ব্যবহার করে কি লাভ? তিনি পাশাপাশি কেবল টেক্সট ফাইল ব্যবহার করতে পারেন।


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

19

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


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

3
@ ড্রান ড্যান: যোগ দিন অলস লোকের জন্য, হ্যাঁ। তারা সম্ভবত ভাল পারফরম্যান্স করবে এই বিষয়টি অরথোগোনাল।
পিসকভোর

16

উম্মম, যুক্ত হয় কীভাবে সম্পর্কিত ডেটাবেসগুলি একে অপরের সাথে টেবিলগুলি সম্পর্কিত। আমি নিশ্চিত যে সে কী পাচ্ছে।

ডাটাবেসে বেশ কয়েকটি কল করা কীভাবে একটি কলের চেয়ে আরও দক্ষ হতে পারে? প্লাস এসকিএল ইঞ্জিনগুলি এই ধরণের জিনিসটি করতে অনুকূলিত হয়।

হতে পারে আপনার সহকর্মী এসকিউএল শিখতে খুব অলস।


12

হ্যাঁ তুমি পারবে.

পারফরম্যান্সের কারণে আপনার সি # এর পরিবর্তে সি ++ ব্যবহার করা উচিত। সি # অলস লোকের জন্য।

না না না. পারফরম্যান্সের কারণে আপনার সি ++ এর পরিবর্তে সি ব্যবহার করা উচিত। সি ++ অলস লোকদের জন্য।

না না না. পারফরম্যান্সের কারণে আপনার সি এর পরিবর্তে অ্যাসেম্বলি ব্যবহার করা উচিত। সি অলস লোকের জন্য।

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


1
আমি আপনার এ পর্যন্ত সমস্ত উত্তর দেখেছি এবং তারা খুব মজার। আসুন তাদের রাখুন। হয় বা হয়, আমি কোথায় আপনার ব্লগে সাবস্ক্রাইব করতে পারি?
গেরি

11

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

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


2
+1 "... প্রযুক্তিগতভাবে সত্য" বাক্যাংশটি যদি পূর্ববর্তী বাক্যটির unnecessaryপরিবর্তে ওপি শব্দটি ব্যবহার করত তবে আরও ভাল কাজ করতে পারে useless। যোগদানগুলি অকেজো বলে কথাটি স্পষ্টভাবে অসত্য যে কোনও প্রযুক্তিগত বিবেচনার প্রয়োজন নেই। : কোন ক্ষেত্রে, অপ এবং RDBMSs বিন্দু সহকর্মীর ভুল বোঝাবুঝি sandly বিরল নয় stackoverflow.com/q/5575682/47550
পল Sasik

7

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

হ্যাঁ আমি সম্মত হই যে অ্যাপ্লিকেশন স্তরে সম্পন্ন হওয়া ডেটাবেস দ্বারা যোগদানের তুলনায় অদক্ষ। আরও নেটওয়ার্ক যোগাযোগ।

দয়া করে মনে রাখবেন যে এসকিউএল যোগদান করা এড়াতে আমি কঠোর অবস্থান নিচ্ছি না।


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

ঠিক আছে, কোনও উদ্যোগ সমাধানে যেখানে আপনার কাছে ডাটাবেস সার্ভার ওভারলোড করার জন্য পর্যাপ্ত ট্র্যাফিক রয়েছে তা বিবেচনা করার মতো তবে এটি সম্ভবত স্টোরেজ পদ্ধতি বা কার্য সম্পাদনকে পেরেক করার সময়সূচী ব্যাকআপ করার সম্ভাবনা বেশি। ডেটাবেস ভাল যোগদান করে এ বিশেষ করে যদি আমাকে সাহায্য করার মত indecies হয়,
Jodrell

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

5

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

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


5

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

সম্ভবত একটি অলস প্রোগ্রামার এমন প্রযুক্তিগুলিতে আটকে থাকবে যার সাথে তারা পরিচিত ছিল এবং অ প্রযুক্তিগত কারণে অন্যান্য সম্ভাবনাগুলি রোধ করেছিল।

আমি সিদ্ধান্ত নেওয়ার জন্য এটি আপনার কাছে রেখেছি।


5

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

for each (invoice in invoices)
    let invoiceLines = FindLinesFor(invoice)
...

আপনার যদি 10 টি লাইনের সাথে 100,000 চালান থাকে তবে এই কোডটি 1 মিলিয়নের টেবিল থেকে 10 টি চালান লাইনের সন্ধান করবে এবং এটি 100,000 বার করবে। টেবিলের আকার বাড়ার সাথে সাথে নির্বাচিত ক্রিয়াকলাপগুলির সংখ্যা বৃদ্ধি পায় এবং প্রতিটি নির্বাচিত ক্রিয়াকলাপের ব্যয় বৃদ্ধি পায়।

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

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

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

  1. তালিকা থেকে একটি নাম পড়ুন।
  2. নোটবুক খুলুন।
  3. শিক্ষার্থীর নাম সন্ধান করুন।
  4. আপনি পরবর্তী শিক্ষার্থী বা শেষ পৃষ্ঠায় না পৌঁছানো পর্যন্ত পৃষ্ঠাগুলি ঘুরিয়ে শিক্ষার্থীর গ্রেডগুলি পড়ুন।
  5. নোটবুকটি বন্ধ করুন।
  6. পদ্ধতি পুনরাবৃত্তি করুন।

বা:

  1. নোটবুকটি প্রথম পৃষ্ঠায় খুলুন।
  2. তালিকা থেকে একটি নাম পড়ুন।
  3. নোটবুক থেকে এই নামের জন্য কোনও গ্রেড পড়ুন।
  4. আপনি শেষ না হওয়া পর্যন্ত 2-3 পদক্ষেপ পুনরাবৃত্তি করুন
  5. নোটবুকটি বন্ধ করুন।

5

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


3

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

এসকিউএল ডেটা সম্পর্কিত পরিসংখ্যানগুলির বিশদ বিবরণ রাখে এবং আপনি যদি আপনার সূচিগুলি সঠিকভাবে তৈরি করে থাকেন তবে খুব দ্রুত কয়েক মিলিয়ন মিলিয়নতে একটি রেকর্ড খুঁজে পেতে পারে। আপনি যখন ডাটাবেস স্তরে ঠিক এটি করতে পারেন তবে কেন আপনি যুক্ত থাকতে আপনার সমস্ত ডেটা সি # তে টেনে আনতে চান?

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


3

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


3

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


3
বেশিরভাগ ডাটাবেস ইঞ্জিনগুলি যাইহোক যাইহোক আপনার পর্দার পিছনে জন্য এটি করবে; এবং যেমন মাইএসকিউএল এ আপনি একটি সম্পূর্ণ মেমরি টেবিল তৈরি করতে পারেন (MEMORY ইঞ্জিন) । ডাটাবেস ছাড়াই ডাটাবেস কার্যকারিতা পুনরায় প্রয়োগ করা সাধারণত এনআইএইচ-এর গুরুতর মামলার লক্ষণ;)
পিসকভোর

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

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

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

2

না, কেবলমাত্র ডেটাবেস কোডে অ্যাড-হক সি / জাভা আরও ভাল অনুকূলিত হয় না; তবে সাধারণত বেশ কয়েকটি ফিল্টারিং কৌশল প্রয়োগ করা যেতে পারে যা আরও ভাল পারফরম্যান্স দেয়।


2

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

select t1.field1 
from table1 t1
join table2 t2 
    on t1.id = t2.id
where t1.field2 = 'test'

ধরুন আপনার টেবিল 1 এ 1 মিলিয়ন রেকর্ড এবং টেবিল 2 এ 1 মিলিয়ন রেকর্ড রয়েছে। সারণী 1-র 9 মিলিয়ন রেকর্ডের ধারনাটি পূরণ করুন where ধরুন তাদের মধ্যে কেবল 15 টি টেবিল 2 এ রয়েছে। আপনি এই স্কয়ার স্টেটমেন্টটি চালাতে পারেন যা যথাযথভাবে তালিকাভুক্ত হলে মিলিসেকেন্ডগুলি নেবে এবং কেবলমাত্র 1 কলামের ডেটা দিয়ে 15 জুড়ে নেটওয়ার্ক জুড়ে রেকর্ড ফিরিয়ে আনবে। অথবা আপনি 2 টি কলামের ডেটা সহ দশ মিলিয়ন রেকর্ড প্রেরণ করতে পারেন এবং পৃথকভাবে আরও 1 মিলিয়ন রেকর্ড প্রেরণ করতে পারেন নেটওয়ার্কের জুড়ে একটি কলামের ডেটা এবং ওয়েব সার্ভারে তাদের একত্রিত করুন।

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


2

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

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

ভুলে যাবেন না যে JOINআপনি একটি ডাটাবেসটি যেভাবে ডেটা টুকরো একে অপরের সাথে সম্পর্কিত আশা করছেন সে সম্পর্কে বলুন এবং তাই ডাটাবেসটিকে আপনি কী করার চেষ্টা করছেন সে সম্পর্কে আরও বেশি তথ্য দিন এবং তাই এটি আপনার প্রয়োজনের সাথে আরও ভাল ফিট করতে সক্ষম করে তোলে able

সুতরাং উত্তর অবশ্যই পাওয়া যায়: না, JOINSএকেবারেই অকেজো নয়!


0

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


0

আমি গুরুত্ব সহকারে ভুল বোঝাবুঝি না করলে প্রশ্নটির যুক্তিটি ত্রুটিযুক্ত

যদি প্রতি এ এর ​​জন্য বিতে 20 টি সারি থাকে, এ-তে 1000 সারি বি তে 20 কে সারি সূচিত করে তবে B- তে মাত্র 100 টি সারি থাকতে পারে না যদি ম্যাপিংটি সহ 20k সারি সহ অনেকগুলি সারণী "AB" থাকে না ।

সুতরাং 100 বি সারির 20 টির মধ্যে 20 টির জন্য প্রতিটি এ সারিতে আপনি কী টেবিলটি সারণি করেন সে সম্পর্কে সমস্ত তথ্য পেতে। সুতরাং এটি হয়:

  • 100, 1000 এবং 20k সারিগুলির 3 ফলাফল সেট এবং একটি ক্লায়েন্ট যোগদান করুন
  • 20k সারি সহ একটি যুক্ত জোডেড এ-এবি-বি ফলাফল সেট করুন

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

যাই হোক না কেন, আমি বলব এই মাত্রার ক্রস জোনের প্রায় কোনও ব্যবহার নেই is এটি একটি দরিদ্র উদাহরণ।

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

অনুচিন্তা:

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

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