"লিনকিউ থেকে সত্তা", "লিনকিউ থেকে এসকিউএল" এবং "লাইনকিউ থেকে ডেটাসেট" এর মধ্যে পার্থক্য কী?


91

আমি লিনকিউ-এর সাথে বেশ কিছুক্ষণ কাজ করছি। তবে এটি লিনকিউ-র উল্লিখিত স্বাদের মধ্যে প্রকৃত পার্থক্যগুলি কী তা রহস্যের কিছুটা থেকে যায়।

সফল উত্তরের মধ্যে তাদের মধ্যে একটি স্বল্প পার্থক্য থাকবে। প্রতিটি গন্ধের মূল লক্ষ্য কী, কী সুবিধা এবং কোনও পারফরম্যান্স প্রভাব রয়েছে ...

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


উত্তর:


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

  • লিনক-টু-এসকিউএল হ'ল একটি ওআরএম - অবজেক্ট-রিলেশনাল ম্যাপারে মাইক্রোসফ্টের প্রথম প্রচেষ্টা। এটি কেবল এসকিউএল সার্ভার সমর্থন করে। .NET অবজেক্টগুলিতে এসকিউএল সার্ভার ডাটাবেস টেবিলগুলি ম্যাপ করার জন্য এটি ম্যাপিং প্রযুক্তি।

  • লিনক-টু-সত্তা একই ধারণা, তবে ওআরএম হিসাবে পটভূমিতে সত্তা ফ্রেমওয়ার্ক ব্যবহার করে - আবার মাইক্রোসফ্ট থেকে, তবে একাধিক ডাটাবেস ব্যাককেন্ডকে সমর্থন করে

  • লিনক-থেকে-ডেটাসেটগুলি লিনকুই , তবে "পুরানো স্টাইলে" অ্যাডো.নেট ২.০ ডাটাসেটের বিপরীতে - মাইক্রোসফ্টের কাছ থেকে ওআরএম এর আগে যে সময়ে আপনি ADO.NET এর সাথে যা করতে পারতেন সমস্তই ডেটাসেটস, ডেটা টেবিল ইত্যাদি ফিরিয়েছিল এবং লিনক Lin -থেকে-ডেটাসেটগুলি ডেটাগুলির জন্য সেই ডেটা স্টোরগুলি অনুসন্ধান করে। সুতরাং এই ক্ষেত্রে, আপনি একটি ডাটাবেস ব্যাকএন্ড থেকে একটি ডেটা টেবিল বা ডেটাসেটস (সিস্টেম.ডাটা নেমস্পেস) ফিরিয়ে দিতে এবং তারপরে লিনকিউ সিনট্যাক্স ব্যবহারকারীদের জিজ্ঞাসা করবেন


4
50 কে অভিনন্দন, আপনি এখন স্ট্যাকওভারফ্লোতে আনুষ্ঠানিকভাবে অনেক বেশি সময় ব্যয় করেছেন। ;)
অ্যারোনআউট

4
@ অ্যারোনট: ধন্যবাদ - এবং আপনি একেবারে ঠিক বলেছেন! :-) অতি ছেড়ে এক প্রতিটি মানুষের আসক্তি, তাই না? অনুগ্রহ?!?!?!
marc_s

4
marc_s, এই উত্তরের জন্য ধন্যবাদ। পারফরম্যান্স সম্পর্কে কিছু বলতে পারেন? আপনার উত্তর থেকে আমি অনুমান করব যে লিনাক-টু-সত্তাগুলি সর্বাধিক উন্নত এবং সম্ভবত সম্ভবত সবচেয়ে কার্য সম্পাদন করছে?
মার্সেল

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

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

38

লিনিকিউ হল প্রযুক্তির একটি বিস্তৃত সেট, এর চারপাশে ভিত্তিক (উদাহরণস্বরূপ) একটি ক্যোরি বোঝার বাক্য গঠন, উদাহরণস্বরূপ:

var qry = from x in source.Foo
          where x.SomeProp == "abc"
          select x.Bar;

যা সংকলক দ্বারা কোডে ম্যাপ করা হয়েছে:

var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);

এবং এখানে আসল যাদু শুরু হয়। নোট করুন যে আমরা Fooএখানে যা বলিনি - এবং সংকলক যত্ন করে না! যতক্ষণ না এটি ল্যাম্বডা নিতে পারে এমন কিছু উপযুক্ত পদ্ধতির সমাধান Whereকরতে পারে, এবং এর ফলস্বরূপ এমন কিছু Select পদ্ধতি রয়েছে যা ল্যাম্বদা গ্রহণ করতে পারে, এটি খুশি।

এখন যে বিবেচনা ল্যামডা কম্পাইল করা যায় পারেন একটি বেনামী পদ্ধতি মধ্যে (প্রতিনিধি, LINQ টু অবজেক্টস, যা LINQ টু ডেটা সেটটি অন্তর্ভুক্ত জন্য) বা যে একটি বস্তু মডেল ল্যামডা প্রতিনিধিত্ব করে একটি অভিব্যক্তি-ট্রি (ক রানটাইম মডেল )।

ইন-মেমরি ডেটার জন্য (সাধারণত IEnumerable<T>), এটি কেবল প্রতিনিধিকে কার্যকর করে - সূক্ষ্ম এবং দ্রুত। তবে IQueryable<T>অভিব্যক্তির অবজেক্ট-উপস্থাপনের জন্য (ক LambdaExpression<...>) এটি এটিকে আলাদা করে তুলতে পারে এবং এটি কোনও "লিনিক-টু-সামथিং" উদাহরণে প্রয়োগ করতে পারে।

ডাটাবেসগুলির জন্য (লিনকু-টু-এসকিউএল, লিংক-টু-সত্তা) এর অর্থ টিএসকিউএল লেখার অর্থ হতে পারে, উদাহরণস্বরূপ:

SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1

তবে এটি (উদাহরণস্বরূপ ADO.NET ডেটা পরিষেবাদির জন্য) একটি HTTP কোয়েরি লিখতে পারে।

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

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


মার্ক, এই অন্তর্দৃষ্টি জন্য ধন্যবাদ। তবে আমি এ জাতীয় বিস্তারিত ইন্টার্নাল সম্পর্কে জিজ্ঞাসা করিনি। -1, আমি দুঃখিত, কারণ এটি প্রশ্নের উত্তর দেয় না।
মার্সেল

7
যেহেতু কেউ তার নিজের লিনকিউ সরবরাহকারী লিখছেন, আমি এখন অবধি দেখা এটির সেরা উত্তর। আমি -1 সম্পর্কে একমত নই।
ড্যান বারোই

30

লিনকিউ ভাষা ইন্টিগ্রেটেড ক্যোয়ারী বোঝায়। এটি আপনাকে ডেটা উত্স থেকে তথ্য আহরণের জন্য সরাসরি সি # এর মধ্যে "এসকিউএল স্টাইল" ক্যোরি ভাষা ব্যবহার করতে দেয়।

  • এই ডেটা উত্সটি একটি এসকিউএল সার্ভার ডাটাবেস হতে পারে - এটি লিনাক থেকে এসকিউএল
  • সেই ডেটা উত্স সত্তা কাঠামোর অবজেক্টগুলির একটি ডেটা প্রসঙ্গ হতে পারে - লিনক থেকে সত্তা
  • ডেটা উত্সটি ADO.net ডেটা সেট হতে পারে - লিনাক থেকে ডেটাসেট

এই ডেটা উত্সটি একটি এক্সএমএল ফাইলও হতে পারে - লিনক থেকে এক্সএমএল
এমনকি প্লেইন অবজেক্টগুলির একটি সংগ্রহ শ্রেণি - লিনাক টু অবজেক্টস

লিনকিউ অনুসন্ধানের প্রযুক্তি বর্ণনা করে, বাকি নাম অনুসন্ধান করা তথ্যের উত্স বর্ণনা করে।

কিছুটা অতিরিক্ত ব্যাকগ্রাউন্ডের জন্য:

ডেটাসেটগুলি হ'ল ADO.net অবজেক্ট যেখানে ডেটাবেস থেকে একটি। নেট ডেটাसेट এবং লিনক লোড হওয়ার পরে সেই ডেটাটি জিজ্ঞাসা করার জন্য ব্যবহার করা যেতে পারে।

সঙ্গে এসকিউএল Linq আপনি যে ডাটাবেস এবং Linq টু এসকিউএল মানচিত্র SQL সার্ভার ডাটাবেস থেকে ডেটা লোড যত্ন নেয় .net শ্রেণী বর্ণনা

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


4
আসলে, লিনক-টু-এসকিউএল কেবল এসকিউএল সার্ভার - কেবল "কোনও" এসকিউএল ডাটাবেস ব্যাকএন্ড নয়।
marc_s

4
@মার্ক_স: ভাল জায়গা ধন্যবাদ যদিও, যদি কারও আগ্রহী হয় তবে অন্যান্য ডাটাবেসের জন্য তৃতীয় পক্ষের লিনিক থেকে এসকিএল সরবরাহকারী রয়েছে যদি আপনি সেগুলি চান। কোড 2code.net/DB_Linq , বা অন্যদের জন্য গুগল দেখুন । যদিও আমি তাদের গুন সম্পর্কে মন্তব্য করতে পারি না।
সাইমন পি স্টিভেন্স

4
সাইমন, বিশেষ করে এন্টিটি ফ্রেমওয়ার্কের 2-লাইনের সহায়তার জন্য বিশেষত ধন্যবাদ। +1
মার্সেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.