প্রাথমিক কী হিসাবে ইউআইডি বা জিইউডি ব্যবহার করার ক্ষেত্রে ত্রুটিগুলি কী কী?


60

আমি একটি বিতরণ সিস্টেম তৈরি করতে চাই। আমি ডাটাবেস ডেটা জমা করতে প্রয়োজন এবং এটি একটি ব্যবহার করতে সহায়ক হবে UUID বা GUID কিছু টেবিল এ একটি প্রাথমিক কী হিসাবে। আমি ধরে নিই যে এই ডিজাইনের সাথে এটিগুলির একটি অসুবিধাগুলি যেহেতু ইউআইডি / জিইউডি যথেষ্ট বড় এবং এগুলি প্রায় এলোমেলো। বিকল্পটি হ'ল একটি স্ব-বর্ধিত আইএনটি বা লং ব্যবহার করা।

আমার টেবিলগুলির জন্য প্রাথমিক কী হিসাবে ইউআইডি বা জিইউডি ব্যবহার করার ক্ষেত্রে কী কী ত্রুটি রয়েছে?

আমি সম্ভবত ডার্বি / জাভাডিবি (ক্লায়েন্টগুলিতে) এবং পোস্টগ্র্রেএসকিউএল (সার্ভারে) ডিবিএমএস হিসাবে ব্যবহার করব।


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

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

1
আমি মনে করি যে এ সম্পর্কে আরও কিছু স্পষ্ট করার মত মন্তব্য ছাড়াই এটি বেশিরভাগ "এটি নির্ভরশীল" হতে চলেছে। এগুলি ছাড়া, আমি ভিসিটিতে যাব।
jcolebrand

X.co/Twpp আছে: একটি নিবন্ধ যে GUID বনাম অ GUID সম্পর্কে আলোচনা SQL সার্ভার মধ্যে ক্লাস্টার ইনডেক্স যে আপনি আকর্ষণীয় যদিও এটি একটি ভিন্ন এসকিউএল পণ্য সম্পর্কিত খুঁজে পারে প্রভাবিত হয়
জেফ

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

উত্তর:


29

এটি আপনার প্রজন্মের ফাংশন এবং চূড়ান্ত সারণীর আকারের উপর নির্ভর করে

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

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

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


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

Muahahahaah! :: শয়তানি চাল চালে গোঁফ twirls ::
ব্রায়ান Ballsun-স্টানটন

1
এমনকি অফলাইন-লেখার সাথেও আইএনটি ব্যবহার করা সম্ভব হবে। উদাহরণস্বরূপ দুটি কলাম ব্যবহার করে {Node_ID, Item_ID}যেখানে প্রতিটি নোডে একটি থাকে Node_IDএবং একটি Item_IDনোডে স্বয়ংক্রিয়ভাবে বর্ধিত হয়।
জোনাস

@ জোনাস ~ হ্যাঁ, এটি সম্ভবপর। তবে, বেশিরভাগ লোকেরা এমনকি জিইউইডিগুলি বিবেচনা করার অন্যতম কারণ হ'ল বিশ্বব্যাপী বিচ্ছিন্ন সামগ্রীগুলি অন্যান্য ডাটাবেসে প্রতিলিপি করা। আমি বলতে চাইছি নিজেই এই শব্দটি বরং QED।
jcolebrand

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

22

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

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


পোস্টগ্র্রেসের জন্য আপনি যা প্রস্তাব করেন তা মাইএসকিউএল-তেও কিছুটা আলাদা স্টেচার - অটো_সিঙ্ক্রেমেন্ট পিকে (ক্লাস্টার কী), অনন্য সূচকের (জিবিআইডি) সহ জিইউডি করা যায়।
ypercubeᵀᴹ

এটি সর্বদা সত্য নয়। ডিস্ক সিস্টেম থ্রুপুট উপর নির্ভর করে, শেষ পৃষ্ঠায় অ্যাক্সেস সিঙ্ক্রোনাইজ করা আপনার বাধা হতে পারে। blog.kejser.org/2011/10/05/…
mwilson

2
"মাইক্রোসফ্ট এসকিউএল সার্ভারের বিপরীতে, পোস্টগ্রেএসকিউএল-তে একটি সূচকে ক্লাস্টিং করা এই আদেশটি বজায় রাখে না। কিভাবে ক্লাস্টারের ক্ষেত্রে সূচক কর্ম ক্ষমতায় উন্নতি নেই
Bartolo-otrit

: তথ্য @ Bartolo-otrit একটি আরো ঘন সংস্করণে লিঙ্ক stackoverflow.com/a/4796685/1394393 । এই উত্তরটি আমার কাছে সত্যিই প্রাসঙ্গিক বলে মনে হচ্ছে না, কারণ এই প্রশ্নটি পিজি সম্পর্কে এবং এটি মনে হয় যে এসকিউএল সার্ভার এবং মাইএসকিউএল এর অস্তিত্ব নেই।
jpmc26

database would need to rearrange all its memory pages to find the right place for insertion=> আমার মনে হয় না পোস্টগ্রিসের ক্ষেত্রে এটি একই রকম, কারণ ক্লাস্টারিং alচ্ছিক এবং নতুন সারিগুলি বিনা অর্থে সংরক্ষণ করা হয়।
ফ্লাভিয়েন

3

এটা নির্ভর করে.

সিরিয়াসলি, এখন পর্যন্ত আপনি যা দিয়েছেন তার সাথে, এটি যতদূর যেতে পারে is

কেন এটি ইউআইডি ব্যবহার করতে সহায়ক হবে? আপনি আইএনটি ব্যবহার করবেন না কেন? আপনি কেন কেবল পরে ইউআইডিগুলিতে সূচি রাখতে পারবেন না? আপনি কি বুঝতে পারছেন যে কোনও ইউইউডিটির কী দিয়ে বাছাই করা তালিকা রয়েছে এবং কয়েক মিলিয়ন সারির পরে একটি এলোমেলো (অ-অনুক্রমিক) ইউআইডি ?োকানো মানে?

এটি কোন প্লাটফর্মটি চলবে? কত ডিস্ক? কতজন ব্যবহারকারী? কত রেকর্ড?


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

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

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