সিকোয়েন্স বনাম পরিচয়


87

এসকিউএল সার্ভার ২০১২ Sequenceনতুন বৈশিষ্ট্য হিসাবে পরিচিত হয়েছে, যেমন ওরাকল এবং পোস্টগ্র্রেসের মতো। সিকোয়েন্সগুলি যেখানে পরিচয়ের চেয়ে বেশি পছন্দ করা হয়? এবং কেন আমাদের সিকোয়েন্সগুলি দরকার?


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

উত্তর:


81

আমি মনে করি আপনি এখানে আপনার উত্তর খুঁজে পাবেন

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

এবং এখানে :

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

এবং এখানেও :

একটি এসকিউএল সার্ভার সিকোয়েন্স অবজেক্ট স্কুয়েল টেবিলগুলিতে একটি সনাক্তকরণ কলামের মতো সংখ্যার ক্রম তৈরি করে। তবে সিকোয়েন্স সংখ্যার সুবিধাটি হ'ল সিকোয়েন্স নম্বর অবজেক্টটি একক স্কেল টেবিলের সাথে সীমাবদ্ধ নয়।

এবং এমএসডিএন-তে আপনি ব্যবহার সম্পর্কে আরও পড়তে পারেন এবং কেন আমাদের এটি প্রয়োজন ( এখানে ):

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

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

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

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


21

সিকোয়েন্স এবং পরিচয় উভয়ই অটো নম্বর উত্পন্ন করতে ব্যবহৃত হয় তবে প্রধান পার্থক্য হ'ল পরিচয়টি একটি টেবিল নির্ভর এবং সিকোয়েন্সটি টেবিল থেকে স্বতন্ত্র।

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


14

যদিও সিকোয়েন্সগুলি পরিচয় কলামগুলির চেয়ে আরও নমনীয়তা সরবরাহ করে তবে আমি তাদের কোনও কার্যকারিতা সুবিধা পেয়েছি।

ব্যাচের সন্নিবেশগুলির জন্য সিক্যুয়েন্স ব্যবহার করার চেয়ে পরিচয় ব্যবহার করে পারফরম্যান্স ধারাবাহিকভাবে 3x গতিতে পেয়েছি।

আমি প্রায় 1.5M সারি সন্নিবেশ করিয়েছি এবং পারফরম্যান্সটি হ'ল:

  • পরিচয় জন্য 14 সেকেন্ড
  • অনুক্রমের জন্য 45 সেকেন্ড

আমি সারণিগুলিকে একটি টেবিলের মধ্যে সন্নিবেশ করিয়েছি যা সারণী ডিফল্টের মাধ্যমে সিকোয়েন্স অবজেক্ট ব্যবহার করেছে:

NEXT VALUE for <seq> for <col_name>

এবং নির্বাচনী বিবৃতিতে ক্রম মান নির্দিষ্ট করার চেষ্টাও করেছেন:

SELECT NEXT VALUE for <seq>, <other columns> from <table>

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

অ্যারিয়নের প্রথম লিঙ্কটিতে উল্লেখ করা নিবন্ধটি সারি-সারি সারি সন্নিবেশ করানোর জন্য পরিচয় এবং সিকোয়েন্সের মধ্যে পার্থক্যটি 10,000 সন্নিবেশের জন্য 16.6 সেকেন্ড থেকে 14.3 সেকেন্ডের মধ্যে দেখায়।

ক্যাচিং বিকল্পটি পারফরম্যান্সে একটি বড় প্রভাব ফেলে, তবে উচ্চতর ভলিউমের জন্য পরিচয় দ্রুত (+ 1 এম সারি)

ইউটি 4 লাইফের মন্তব্য অনুসারে নির্বিঘ্ন বিশ্লেষণের জন্য এই লিঙ্কটি দেখুন ।


ক্রমটির ক্যাশে আকারটি কী ছিল।
শ্যানন সিভেরেন্স

50, এটি বাড়ানো একটি তাত্পর্যপূর্ণ করে তোলে, তবে আমি স্মরণ করি যে এখনও পরিচয়টি দ্রুত ছিল।
স্ট্যাগ 18

4
byobi.com/blog/2012/09/… বিভিন্ন কনফিগারেশনের একটি ভাল বিশদ তুলনা সরবরাহ করে। 50 থেকে 500 এর ক্যাশে আকারে বৃদ্ধি দেখায় যেগুলি প্রায় 2x গতির পার্থক্য পেয়েছিল।
ulty4Live

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

4
অনুক্রমের সাহায্যে alter sequence increment by ...আপনি আপনার নতুন সারিগুলির জন্য কেবল স্থান তৈরি করতে এবং তারপরে বেস + সারি_নম্বার () বা আসল মানগুলির জন্য যা কিছু ব্যবহার করুন ব্যাচ সন্নিবেশ কর্মক্ষমতাটি অনুকূল করতে পারেন ।
গর্ডি

6

আমি জানি এটি একটু পুরাতন, তবে একটি পর্যবেক্ষণ যোগ করতে চেয়েছিলেন যা আমাকে বিট করে।

আমার সূচকগুলি ক্রমে রাখতে আমি পরিচয় থেকে সিকোয়েন্সে স্যুইচ করেছি। পরে আমি জানতে পেরেছি যে ক্রমটি প্রতিরূপের সাথে স্থানান্তর করে না। ক্রমগুলি সিঙ্কে না থাকায় দুটি ডাটাবেসের মধ্যে প্রতিলিপি সেটআপ করার পরে আমি কী লঙ্ঘন পেতে শুরু করেছি। আপনি সিদ্ধান্ত নেওয়ার আগে কিছু দেখার জন্য।


3

আমি সিকোয়েন্সগুলির সর্বোত্তম ব্যবহারটি সনাক্তকরণ কলামটি প্রতিস্থাপন না করে "অর্ডার নম্বর" ধরণের ক্ষেত্র তৈরি করা is

অন্য কথায়, একটি অর্ডার নম্বর শেষ ব্যবহারকারীর সামনে প্রকাশিত হয় এবং এর সাথে ব্যবসার বিধি থাকতে পারে। আপনি এটি অনন্য হতে চান তবে কেবল একটি পরিচয় কলাম ব্যবহার করা সত্যই সঠিক নয়।

উদাহরণস্বরূপ, বিভিন্ন অর্ডার ধরণের জন্য আলাদা সিকোয়েন্সের প্রয়োজন হতে পারে, তাই আপনার অভ্যন্তরীণ আদেশগুলির বিপরীতে ইন্টারনেট অর্ডারের জন্য সিকোয়েন্স থাকতে পারে।

অন্য কথায়, একটি সিকোয়েন্সকে সনাক্তকরণের সহজ প্রতিস্থাপন হিসাবে ভাবেন না, এমন কোনও ক্ষেত্রে পরিচয় ব্যবসায়ের প্রয়োজনীয়তার সাথে খাপ খায় না এমন ক্ষেত্রে এটি কার্যকর হিসাবে বিবেচনা করুন।


1

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

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property?view=sql-server-2017

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


4
আপনি কেন IDENTITYসংখ্যার লিঙ্কটি এড়িয়ে যাচ্ছেন এবং SEQUENCEএখানে লিঙ্কটি বর্ণিত একই সমস্যাটি সম্পর্কে খুব সুন্দর উত্তর রয়েছে তবে আপনি এটি একটি ছোট ক্যাসি আকার নির্ধারণ করে সীমাবদ্ধ করতে পারেন তবে সেখানে গতি সহ একটি বাণিজ্য বন্ধ রয়েছে।
মিঃফিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.