জিইউইডি / ইউইউডি ডাটাবেস কীগুলির সুবিধা এবং অসুবিধা


222

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

কেউ কি ডাটাবেসে জিইউইডিগুলির সাথে ব্যাপকভাবে কাজ করেছেন? সে পথে যাওয়ার মাধ্যমে আমি কী কী সুবিধা পাব এবং সম্ভাব্য সমস্যাগুলি কী কী?


1
জেফের একটি পোস্ট আছে " প্রাথমিক কী: আইডি বনাম জিইউডি "।
jfs

1
রিমোট ক্লায়েন্টদের জন্য হাই-লো ব্যবহার করতে পারেন: স্ট্যাকওভারফ্লো
নীল ম্যাকগুইগান


" প্রাথমিক কী: আইডি বনাম জিইউডিগুলি " সম্পর্কে জেফ অ্যাটউডের পোস্টের জন্য আপডেট হওয়া অবস্থান । রেফারেন্সের জন্য @ jfs ধন্যবাদ।
অ্যাডাম কাটজ

@ জেফস লিঙ্কটি ব্লগকোডিংহরর. com
primary-

উত্তর:


229

সুবিধাদি:

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

অসুবিধা:

  • বৃহত্তর স্থান ব্যবহার, কিন্তু স্থান সস্তা (er)
  • Sertোকানোর অর্ডার পেতে আইডি দ্বারা অর্ডার করতে পারে না।
  • কোনও ইউআরএলটিতে কুরুচিপূর্ণ দেখতে পারে তবে সত্যই, ডাব্লুটিএফএফ আপনি কি কোনও ইউআরএলে সত্যিকারের ডিবি কী লাগিয়ে দিচ্ছেন !? (নীচের মন্তব্যে এই বিষয়টি বিতর্কিত)
  • ম্যানুয়াল ডিবাগিং করা আরও শক্ত, তবে সেই কঠিন নয়।

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

আমি মনে করি ডুপ্লিকেট ডেটা জিনিসটি আবর্জনা - আপনি নকল ডেটা পেতে পারেন তবে আপনি তা করেন। সারোগেট কীগুলি সাধারণত যেখানেই আমি কাজ করছিলাম তা ভঙ্গ করে। আমরা যদিও ওয়ার্ডপ্রেস-মতো সিস্টেম ব্যবহার করি না:

  • সারিটির জন্য অনন্য আইডি (জিইউইডি / যাই হোক না কেন)। ব্যবহারকারীর কাছে কখনও দৃশ্যমান নয়।
  • সার্বজনীন আইডি একসময় কোনও ক্ষেত্র থেকে উত্পন্ন হয় (উদাহরণস্বরূপ শিরোনাম - এটিকে নিবন্ধটির শিরোনাম করুন)

আপডেট: সুতরাং এটিকে অনেক বেশি +1 করা হয়েছে এবং আমি ভেবেছিলাম আমার জিইউইডি পিকে'র ক্লাস্টারড ইনডেক্সসমূহের একটি বড় ক্ষয়ক্ষতি চিহ্নিত করা উচিত।

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

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


184
[ডাব্লুটিএফ আপনি কি কোনও ইউআরএলে সত্যিকারের ডিবি কী লাগিয়ে দিচ্ছেন !?] কেন এটি আপনাকে বিরক্ত করে তা নিশ্চিত নয়। আপনি আর কি ব্যবহার করবেন? স্ট্যাক ওভারফ্লো দেখুন ... এটির পুরো জায়গাতেই ইউআরএলে এটির পরিচয় মান রয়েছে এবং এটি ঠিক কাজ করে fine ইউআরএলগুলিতে ডিবি কী ব্যবহার করা আপনাকে সুরক্ষা কার্যকর করতে বাধা দেয় না।
ইউরো মিশেল্লি

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

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

26
একটি জিনিস মনে রাখবেন, লোকেরা প্রায়শই পৃষ্ঠা, প্রশ্ন, ফোরামের শিরোনাম পরিবর্তন করে। এসইওর জন্য ইউআরএলে একটি ছোট আইডির মতো কিছু থাকা ভাল যাতে শিরোনাম পরিবর্তন হলে আপনি এখনও জানতে পারবেন যে কোনও পুরানো ইউআরএল থেকে আগত লোকদের কোথায় পাঠানো যায়। example.com/35/old-and-bustedসবেমাত্র হয়ে গেছে example.com/35/new-hotnessএবং আপনি অ্যাপ্লিকেশনটি কেবল শিরোনামটি পরীক্ষা করতে এবং 301 দিয়ে ব্যবহারকারীকে ফরোয়ার্ড করতে পারবেন
জিয়োনক্রস

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

14

@ ম্যাট শেপার্ড:

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

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

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

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

অন্য কথায়: টেবিলগুলিতে জিআইডি কলামগুলি যুক্ত করার উপযুক্ত কারণ থাকতে পারে, তবে দয়া করে আসল (== নন-জিইউডি) তথ্যের মধ্যে ধারাবাহিকতার জন্য আপনার উচ্চাকাঙ্ক্ষাকে কমিয়ে দেওয়ার প্রলোভনে পড়বেন না।


1
শুনতে শুনতে! আপনার এসকিউএল তুলনা পৃষ্ঠাটি বিটিডব্লুকে পছন্দ করুন। খুবই উপকারী. আমি মিস করছি কেবলমাত্র একটি পরিবর্তন is
হেনরিক গুস্তাফসন

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

12

কেন কেউ পারফরম্যান্সের কথা উল্লেখ করেন না? আপনি যখন একাধিক যোগদান করবেন, এই দুষ্টু GIDs এর উপর ভিত্তি করে সমস্ত পারফরম্যান্স মেঝে পেরিয়ে যাবে :(


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

1
ইউইউডিগুলি পূর্ণসংখ্যার আকারের মাত্র 4 গুণ ... (যদি আপনার ডাটাবেসে একটি ইউইউডি টাইপ থাকে)
জেসেন

11

ডাব্লিকেটড ডেটাটি আপনার টেবিলগুলিতে tingুকতে দিয়ে GIDs ভবিষ্যতে আপনার যদি অনেকগুলি সমস্যার কারণ হতে পারে যদি সেগুলি "ইউনিকফিফায়ার" হিসাবে ব্যবহৃত হয়। আপনি যদি জিইউইডি ব্যবহার করতে চান তবে দয়া করে এখনও অন্য কলামগুলিতে অনন্য-সীমাবদ্ধতা বজায় রাখার বিষয়টি বিবেচনা করুন।


11
এটি হ'ল সমস্যা হ'ল: একটি জিইউডিকে পরিচয় করিয়ে দেওয়া যে কোনও সারিটিকে অনন্য করে তোলে। তবে সারিগুলির অ-কৃত্রিম অংশগুলিতে হঠাৎ করে নকল (সত্যের বেশ কয়েকটি সংস্করণ) থাকতে পারে।
Troels অরভিন

8
ক্ষতিপূরণ +1 আমি আপনার অর্থটি দেখতে পাচ্ছি, তবে এটি খারাপভাবে প্রকাশ করা হয়েছে।
স্টেফানো বোরিনি

11

প্রধান সুবিধা হ'ল আপনি ডাটাবেসের সাথে সংযুক্ত না হয়ে অনন্য আইডি তৈরি করতে পারেন। এবং আইডি বিশ্বব্যাপী অনন্য যাতে আপনি বিভিন্ন ডেটাবেস থেকে ডেটা একত্রিত করতে পারেন। এগুলি ছোট সুবিধার মতো মনে হয় তবে অতীতে আমাকে অনেক কাজ বাঁচিয়েছে।

এর প্রধান অসুবিধাগুলি হ'ল কিছুটা বেশি স্টোরেজ প্রয়োজন (আধুনিক সিস্টেমে কোনও সমস্যা নয়) এবং আইডিগুলি সত্যই মানব পাঠযোগ্য নয়। ডিবাগ করার সময় এটি সমস্যা হতে পারে।

সূচি বিভাজনের মতো কিছু কার্য সম্পাদনের সমস্যা রয়েছে problems তবে সেগুলি ইজিলি সলভযোগ্য (জিমি নিলসনের কংগ গাইড ) : http://www.informit.com/articles/article.aspx?p=25862 )

সম্পাদনা এই প্রশ্নের আমার দুটি উত্তর একত্রিত

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


আমি চিরুনি নির্দেশিকাগুলি এবং সেইগুলিকে সমাধানের সূচিকরণ (INSERT পারফরম্যান্স) সমস্যার বিষয়ে জানি। " প্রধান অসুবিধাগুলি কিছুটা বেশি স্টোরেজ প্রয়োজন " বড় ডাটাবেস ফাইলের আকারের কারণে এটি কী পারফরম্যান্সে আঘাত পাবে?
অমিত জোশী

8

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


6

প্রাথমিক-কী-আইডিগুলি-বনাম-guids

প্রাথমিক কী হিসাবে জিইউইডিগুলির ব্যয় (এসকিউএল সার্ভার 2000)

পৌরাণিক কাহিনী, জিইউইডি বনাম স্বতঃসংশোধন (মাইএসকিউএল 5)

আপনি যা চান এটি বাস্তব

ইউআইডি প্রো

  • প্রতিটি টেবিল, প্রতিটি ডাটাবেস, প্রতিটি সার্ভার জুড়ে অনন্য
  • বিভিন্ন ডাটাবেস থেকে রেকর্ডগুলি সহজে মার্জ করার অনুমতি দেয়
  • একাধিক সার্ভার জুড়ে ডাটাবেসের সহজ বিতরণকে মঞ্জুরি দেয়
  • আপনি ডাটাবেসে রাউন্ডট্রিপ না করে যে কোনও জায়গায় আইডি তৈরি করতে পারেন
  • বেশিরভাগ প্রতিরূপ পরিস্থিতিতে যেমন GID কলাম প্রয়োজন

জিইউইডি কনস

  • এটি প্রচলিত 4-বাইট সূচক মানের তুলনায় 4 গুণ বড়; আপনি যদি সতর্ক না হন তবে এর গুরুতর পারফরম্যান্স এবং স্টোরেজ সম্পর্কিত প্রভাব ফেলতে পারে
  • ডিবাগ করার জন্য জটিল (যেখানে ইউজারিড = '{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}')
  • উত্পন্ন জিইউইডিগুলি সেরা পারফরম্যান্সের জন্য আংশিকভাবে অনুক্রমিক হওয়া উচিত (উদাঃ, এসকিউএল ২০০ new-তে নিউ সিক্যুয়েন্সিড ()) এবং ক্লাস্টারযুক্ত সূচকগুলির ব্যবহার সক্ষম করতে

1

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

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

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

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