ডাটা টাইপ uuid
করা হয় পুরোপুরি কাজের জন্য উপযুক্ত। এটির জন্য varchar
বা text
উপস্থাপনের জন্য র্যামের 37 বাইটের বিপরীতে কেবল 16 বাইট দখল করে । (অথবা ডিস্কে 33 বাইট, তবে বিজোড় সংখ্যার জন্য এটি 40 বাইট কার্যকরভাবে তৈরি করতে অনেক ক্ষেত্রে প্যাডিং প্রয়োজন )) এবং uuid
প্রকারটির আরও কিছু সুবিধা রয়েছে।
উদাহরণ:
SELECT md5('Store hash for long string, maybe for index?')::uuid AS md5_hash
বিশদ এবং আরও ব্যাখ্যা:
আপনি যদি এমডি 5 এর ক্রিপ্টোগ্রাফিক উপাদানটির প্রয়োজন না হন তবে আপনি অন্যান্য (সস্তার) হ্যাশিং ফাংশনগুলি বিবেচনা করতে পারেন তবে আমি আপনার ব্যবহারের ক্ষেত্রে এমডি 5 নিয়ে যাব (বেশিরভাগই কেবল পঠনযোগ্য)।
সতর্কতার শব্দ : আপনার ক্ষেত্রে ( immutable once written
) কার্যকরীভাবে নির্ভরশীল (সিউডো-প্রাকৃতিক) পিকে ঠিক আছে। তবে একইরকম একটি ব্যথা হবে যেখানে আপডেটগুলি text
পাওয়া সম্ভব। কোনও টাইপো সংশোধন করার কথা ভাবুন: পিকে এবং সমস্ত নির্ভরশীল সূচক, এফকে কলামগুলি dozens of other tables
এবং অন্যান্য রেফারেন্সগুলিতেও পরিবর্তন করতে হবে। সারণী এবং সূচক ব্লাট, লকিংয়ের সমস্যা, ধীর আপডেটগুলি, হারানো রেফারেন্স, ...
যদি text
স্বাভাবিক অপারেশনে পরিবর্তন আসতে পারে তবে একটি সারোগেট পিকে আরও ভাল পছন্দ হবে। আমি একটি bigserial
কলামের জন্য প্রস্তাব দিচ্ছি (পরিসীমা -9223372036854775808 to +9223372036854775807
- এটি নয় পঞ্চাশটি দুইশ তেইশ কোয়াড্রিলিয়ন তিনশ পঁচাত্ত্বিক ট্রিলিয়ন ছত্রিশ ছয় হাজার কিছু বিলিয়ন ) এর স্বতন্ত্র মানগুলির জন্য billions of rows
। যে কোনও ক্ষেত্রে একটি ভাল ধারণা হতে পারে : কয়েক হাজার এফ কলাম এবং সূচকের 16 বাইটের পরিবর্তে 8 ) 8 বা অনেক বড় কার্ডিনালিটিস বা বিতরণ সিস্টেমের জন্য একটি এলোমেলো ইউআইডি । মূল টেক্সট থেকে দ্রুত মূল টেবিলটিতে সারিগুলি সন্ধান করার জন্য আপনি সর্বদা অতিরিক্ত md5 (as ) সঞ্চয় করতে পারেন । সম্পর্কিত:uuid
আপনার জিজ্ঞাসা হিসাবে :
ড্যানিয়েলের মন্তব্যে সম্বোধন করার জন্য : আপনি যদি হাইফেন ছাড়াই উপস্থাপনা পছন্দ করেন তবে প্রদর্শনের জন্য হাইফেনগুলি সরান:
SELECT replace('90b7525e-84f6-4850-c2ef-b407fae3f271', '-', '')
তবে আমি বিরক্ত করতাম না। ডিফল্ট উপস্থাপনা ঠিক আছে। এবং সমস্যাটি এখানে সত্য উপস্থাপন নয়।
অন্য পক্ষের যদি আলাদা দৃষ্টিভঙ্গি হওয়া উচিত এবং হাইফেন ছাড়াই স্ট্রিংগুলি মিশ্রণে নিক্ষেপ করা উচিত তবে এটি কোনও সমস্যা নয়। পোস্টগ্রিস এ এর ইনপুট হিসাবে বেশ কয়েকটি যুক্তিসঙ্গত পাঠ্য উপস্থাপনা গ্রহণ করে uuid
। ডকুমেন্টেশন :
পোস্টগ্রিএসকিউএল ইনপুটগুলির জন্য নিম্নলিখিত বিকল্প ফর্মগুলিও গ্রহণ করে: উচ্চ-কেস ডিজিটের ব্যবহার, ব্রেস দ্বারা বেষ্টিত স্ট্যান্ডার্ড ফর্ম্যাট, কিছু বা সমস্ত হাইফেন বাদ দিয়ে, চার অঙ্কের কোনও গ্রুপের পরে একটি হাইফেন যুক্ত করে। উদাহরণগুলি হ'ল:
A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}
আরো কি, md5()
ফাংশন আয় text
, আপনি ব্যবহার করেন decode()
রূপান্তর bytea
এবং এর ডিফল্ট উপস্থাপনা যে হল:
SELECT decode(md5('Store hash for long string, maybe for index?'), 'hex')
\220\267R^\204\366HP\302\357\264\007\372\343\362q
encode()
মূল পাঠ্য উপস্থাপনা পেতে আপনাকে আবার করতে হবে:
SELECT encode(my_md5_as_bytea, 'hex');
এটি শীর্ষে রাখতে, অভ্যন্তরীণ ওভারহেডের কারণে bytea
র্যামে 20 বাইট (এবং ডিস্কে 17 বাইট, প্যাডিং সহ 24 ) মান হিসাবে সংরক্ষণ করা মানগুলি সাধারণ সূচকগুলির আকার এবং কার্য সম্পাদনের জন্য বিশেষত প্রতিকূল।varlena
সবকিছুuuid
এখানে একটি পক্ষে কাজ করে ।