আমার কি পোস্টগ্রিজ এসকিউএল বিট স্ট্রিংটি ব্যবহার করা উচিত?


18

আমি bit stringইদানীং ডেটা টাইপ সম্পর্কে শিখছি , এবং আমি সম্পর্কে বেশ কৌতূহলী:

  1. এই ডক পৃষ্ঠার নীচে বাক্যটি রয়েছে:

    ... প্লাস 5 বা 8 বাইট ওভারহেড স্ট্রিংয়ের দৈর্ঘ্যের উপর নির্ভর করে

  2. পিপিএইচপি, জাভা, সি #, সি ++ ইত্যাদির মতো অন্যান্য ভাষায় কীভাবে বিট স্ট্রিংগুলি পরিচালনা করা হয়, যেমন এনপিএসকিউএল, ওডিবিসি, ইত্যাদির মতো ড্রাইভারের মাধ্যমে are

প্রশ্ন # 1 এর জন্য, স্মার্টিন্ট বা বিগিন্ট ব্যবহার করা অনেক বেশি স্টোরেজ দক্ষ হবে এবং সর্বত্র সংখ্যাসূচকভাবে সমর্থিত হওয়ায় সম্ভবত একটি পারফরম্যান্স লাভের প্রস্তাব দেয়। বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি সহজেই পূর্ণসংখ্যায় বিট অপারেশন পরিচালনা করে। যদি এটি হয় তবে বিট-স্ট্রিং ডেটা টাইপ প্রবর্তন করার কী দরকার? এটি কি কেবলমাত্র সেই ক্ষেত্রেই বিপুল পরিমাণ বিট মাস্কের প্রয়োজন? বিট ফিল্ড ইনডেক্সিং হতে পারে? পোস্টগ্র্রেএসকিউএল-তে বিট ফিল্ড ইন্ডেক্সিং কীভাবে করা হয় সে সম্পর্কে আমি আরও কৌতূহলী।

# 2 এর জন্য, আমি বিভ্রান্ত, কৌতূহলের চেয়েও বেশি। উদাহরণস্বরূপ, যদি আমি সপ্তাহের দিনের বিট মাস্কগুলিকে কিছুটা (7) ক্ষেত্রে রাখি, দিনের জন্য এক বিট, সর্বনিম্ন বিট সোমবার উপস্থাপন করে। তারপরে আমি পিএইচপি এবং সি ++ এর মানটির জন্য জিজ্ঞাসা করি। কী পাব? ডকুমেন্টেশনটি বলছে আমার কাছে কিছুটা স্ট্রিং থাকবে, তবে বিট স্ট্রিং এমন কিছু নয় যা আমি সরাসরি ব্যবহার করতে পারি - যেমন পূর্ণসংখ্যার সাথে। তাহলে এই ক্ষেত্রে, আমি কি বিট ফিল্ড ছেড়ে দেব?

আমার বিট বা বিট পরিবর্তনের জন্য এবং কেন আমার বিস্তারণ করা উচিত?



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

@ জ্যাকডুগলাস: আমার উত্তরটি অনুলিপি করতে আমার আপত্তি নেই। আমি ভাবছি, যদিও: এসই সাইট জুড়ে একটি উত্তর সদৃশ করা ভাল ধারণা?
এরউইন ব্র্যান্ডস্টেটার

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

@ জ্যাকডুগলাস: ঠিক আছে, তা বোঝা যাচ্ছে। আপনার প্রশংসা যেভাবেই পিছলে গেছে তার পরে আমি কীভাবে সম্ভবত দ্বিমত পোষণ করতে পারি? ;)
এরউইন ব্র্যান্ডসেটেটার

উত্তর:


18

আপনার যদি কেবল কয়েকটি পরিবর্তনশীল থাকে তবে আমি পৃথক booleanকলামগুলি রাখার বিষয়টি বিবেচনা করব ।

  • সূচীকরণ সহজ। বিশেষত, প্রকাশের সূচীগুলি সহজ।
  • ক্যোয়ারির শর্তাদি এবং আংশিক সূচিকাগুলি লিখতে এবং পড়তে এবং অর্থবহকে সহজ।
  • একটি বুলিয়ান কলাম 1 বাইট দখল করে। মাত্র কয়েকটি ভেরিয়েবলের জন্য এটি সর্বনিম্ন স্থান দখল করে।
  • অন্যান্য বিকল্পগুলির মতো নয় বুলিয়ান কলামগুলি NULLপৃথক বিটের জন্য মানগুলির অনুমতি দেয় যদি আপনার এটির প্রয়োজন হয়। আপনি যদি না করেন তবে সর্বদা কলামগুলি সংজ্ঞায়িত করতে পারেন NOT NULL

স্টোরেজ অনুকূলিতকরণ

আপনার যদি হাতে পূর্ণ ভেরিয়েবলের চেয়ে বেশি থাকে তবে 33 এরও কম হয়, একটি integerকলাম আপনাকে সেরা উপস্থাপন করতে পারে । (বা একটি bigintপর্যন্ত 64 ভেরিয়েবলের জন্য।)

  • ডিস্কে 4 বাইট দখল করে।
  • নির্ভুল ম্যাচের জন্য খুব দ্রুত সূচীকরণ ( =অপারেটর)।
  • স্বতন্ত্র মানগুলি হ্যান্ডলিং করা bit stringবা এর চেয়ে ধীর / কম সুবিধাজনক হতে পারে boolean

আরও ভেরিয়েবলের সাহায্যে, বা আপনি যদি মানগুলি অনেকগুলি পরিচালনা করতে চান, বা আপনার কাছে বিশাল টেবিল এবং ডিস্কের স্থান না থাকলে / র‌্যাম কোনও সমস্যা নয়, বা আপনি কী বেছে নেবেন তা নিশ্চিত না হলে আমি বিবেচনা করব bit(n)বাbit varying(n)

  • কমপক্ষে 5 বাইট (বা খুব দীর্ঘ স্ট্রিংয়ের জন্য 8) প্লাস 8 বিটের প্রতিটি গ্রুপের জন্য 1 বাইট (বৃত্তাকার) গ্রহণ করে।
  • আপনি সরাসরি বিট স্ট্রিং ফাংশন এবং অপারেটরগুলি ব্যবহার করতে পারেন ।

উদাহরণ

মাত্র 3 বিটের তথ্যের জন্য, পৃথক booleanকলামগুলি 3 বাইট, একটি সহ পেতে পারেinteger 4 বাইট এবং একটি bit string6 বাইট (5 + 1) সহ পায়।

জন্য 32 বিট তথ্য, একটি integerএখনও প্রয়োজন 4 বাইট, একটিbit string একই (5 +4) জন্য 9 বাইট দখল করে এবং booleanকলাম 32 বাইট দখল করে আছে।

আরও পড়া


হ্যা আমি আপনার সাথে একমত. বর্তমানে, আমি সপ্তাহের দিনগুলির বিট মাস্ক সঞ্চয় করার জন্য স্যামিলিন্ট ব্যবহার করছি। এটি কেস, স্টোরেজ দক্ষতা / কর্মক্ষমতা প্রশস্ত। যাইহোক, যদি আমার বিট মাস্কগুলিতে আরও কিছু ইনডেক্সিং / ফিল্টারিং থাকে তবে এটি কম ব্যর্থতার কারণে ব্যর্থ হবে।
জ্যাকি চেং

3

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

আমি অ্যাপ্লিকেশন স্তরে আশা করব, যদি না আপনার ডিবি ড্রাইভার এটি কোনও ধরণের রূপান্তর মাধ্যমে পরিচালনা করে, আপনি একটি স্ট্রিং উপস্থাপনা পেতে এবং এটি পরিচালনা করতে হবে। সুতরাং এটি বা সক্ষমতা কার্যকর হতে পারে না।

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

বাইনারি তথ্যের দীর্ঘতর স্ট্রিংয়ের জন্যও নোট করুন এখানে একটি বৃহত অবজেক্ট ইন্টারফেস রয়েছে যা আপনাকে স্ট্রিমিং ইত্যাদির অনুমতি দেয় এবং বাইটিয়া ইন্টারফেস যা আরও কমপ্যাক্ট স্ট্রিং প্রতিনিধিত্ব করে allows

TL; ডাঃ: আপনার যদি এটি প্রয়োজন হয় তবে আপনি এটি জানতে পারবেন। অন্যথায় এটি আপনার মনের "ভবিষ্যতের ব্যবহারের জন্য সংরক্ষিত" বিভাগে ফাইল করুন।

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