পোস্টগ্রিএসকিউএল: অপরিবর্তনীয়, অস্থির, স্থিতিশীল


11

আমি অপ্রয়োজনীয়, ভোল্যাটাইল এবং স্ট্যাবল ফাংশনগুলির সংজ্ঞাগুলির সত্য অর্থ সম্পর্কে অস্পষ্ট।

আমি ডকুমেন্টেশন পড়ি, বিশেষত প্রত্যেকটির সংজ্ঞা।

অপ্রত্যাশিত ইঙ্গিত দেয় যে ফাংশনটি ডাটাবেসটি পরিবর্তন করতে পারে না এবং একই আর্গুমেন্টের মান দেওয়া হলে সর্বদা একই ফল দেয় ; এটি হ'ল এটি ডাটাবেস লুকআপ করে না বা অন্যথায় তার যুক্তি তালিকায় সরাসরি উপস্থিত তথ্য ব্যবহার করে না। যদি এই বিকল্পটি দেওয়া হয় তবে অবিচ্ছিন্ন আর্গুমেন্ট সহ ফাংশনের যে কোনও কল তত্ক্ষণাত ফাংশন মানের সাথে প্রতিস্থাপন করা যেতে পারে।

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

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

আমার ধান্দা অপরিবর্তনীয় জন্য শর্ত এবং স্থিতিশীল ফাংশন যা দিয়ে আসে সর্বদা বা ধারাবাহিকভাবে একই ফলাফল ফেরৎ একই আর্গুমেন্ট দেওয়া।

অপ্রত্যাশিত সংজ্ঞা বলছে যে ফাংশনটি ডাটাবেসগুলি অনুসন্ধান করে না বা অন্যথায় তার যুক্তি তালিকায় সরাসরি উপস্থিত তথ্য ব্যবহার করে না। সুতরাং, আমার কাছে, এর অর্থ এই যে ফাংশনগুলি ক্লায়েন্টের সরবরাহিত ডেটা ম্যানিপুলেট করতে ব্যবহৃত হয়, এবং সেলেক্ট স্টেটমেন্টগুলি থাকা উচিত নয় ... যদিও এটি আমার কাছে কিছুটা বিশ্রী মনে হচ্ছে sounds

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

সুতরাং, আমার কাছে ... এর অর্থ হ'ল যে কোনও ফাংশন যা কোনও টেবিল বা টেবিলগুলিতে আপডেট করা যায় সেগুলিতে একটি নির্বাচন সম্পাদন করে, কেবলমাত্র অস্থির হওয়া উচিত।

তবে, আবার ... এটি আমার কাছে ঠিক শোনাচ্ছে না।

এটিকে আমার ব্যবহারের ক্ষেত্রে ফিরিয়ে আনতে, আমি এমন ফাংশনগুলি লিখছি যা একাধিক জিনের সাথে নির্বাচিত স্টেটমেন্টগুলি টেবিলগুলিতে নিয়মিত যুক্ত করা হয়, যাতে ফাংশন কলগুলি প্রতিবার যখন ডাকা হয়, তবুও একই যুক্তি সহ বিভিন্ন ফলাফল প্রত্যাশা করে would ।

সুতরাং, এর অর্থ কি আমার ফাংশনগুলি ভোলিটাইল হওয়া উচিত? যদিও ডকুমেন্টেশন তুলনামূলকভাবে কয়েকটি ডাটাবেস ফাংশন এই অর্থে অস্থির হয় ?

ধন্যবাদ!

উত্তর:


15

IMMUTABLEঅবশ্যই একটি খাঁটি ফাংশন হতে হবে, যার ফলাফলগুলি কেবল তার ইনপুটগুলির উপর নির্ভর করে। এটি খুব কঠোর প্রয়োজনীয়তা; তারা অন্যান্য অপরিবর্তনীয় ফাংশনগুলি কল করতে পারে না, তারা টেবিলগুলি অ্যাক্সেস করতে পারে না, তারা কনফিগারেশন বৈশিষ্ট্যের মান অ্যাক্সেস করতে পারে না ইত্যাদি

STABLEযে কোনও ইনপুট নিজেরাই ব্যবহার করতে পারে STABLE: অন্যান্য STABLEবা IMMUTABLEফাংশন, এবং SELECTটেবিলের কোয়েরি। সারণীগুলি জিজ্ঞাসা করা নিরাপদ কারণ এই টেবিলগুলির ফাংশনের দৃষ্টিতে ক্যোয়ারির বর্তমান স্ন্যাপশটের মধ্যে পরিবর্তন হবে না। আপনি জিইউসি মানগুলি ( current_setting(...)) এতক্ষণ অ্যাক্সেস করতে পারবেন যতক্ষণ আপনি জানেন যে এগুলি বর্তমান বিবৃতিতেও বরাদ্দ দেওয়া হবে না।

VOLATILE ফাংশনগুলি এমন সমস্ত কিছু যা উপরের মাপসই হয় না:

  • পার্শ্ব প্রতিক্রিয়া সহ যেকোন কিছু
  • যে কিছু লিখে দেয়
  • বাহ্যিক ডেটা অনুসন্ধান করে এমন যে কোনও কিছু পোস্টগ্রাইএসকিউএল স্ন্যাপশট দ্বারা পরিচালিত হয় না
  • ...

সাধারণভাবে, VOLATILEযদি আপনার না করার কোনও ভাল কারণ না থাকে তবে কেবল সবকিছু ছেড়ে দিন ।

ব্যবহারের প্রধান কারণ IMMUTABLEহ'ল সূচি প্রকাশের অংশ হিসাবে ব্যবহৃত ফাংশনগুলি লেখার সময়।


1
"তারা টেবিলগুলি অ্যাক্সেস করতে পারে না।" ন্যায়বিচারে, তারা করতে পারে এবং তারা করতে পারে। আমি মনে করি আরও সাধারণ নিয়ম হ'ল টেবিলগুলি ডাটাবেস-পুনরায় আরম্ভ না করে অর্থবহ রূপান্তরিত হওয়ার কথা নয়।
ইভান ক্যারল

STABLE যদি টেবিল অ্যাক্সেসের অনুমতি দেয় তবে ভোল্যাটাইলের / উপরে উপরে কোনও অপ্টিমাইজেশন রয়েছে ...?
ব্রুকস

আমার মাথার উপরের অংশটি মনে রাখবেন না, ডক্স / কোড চেক করতে হবে।
ক্রেগ রিঞ্জার

4

স্ট্যাবলের জন্য, আপনার যে অংশটি গা bold় করা দরকার তা হ'ল 'ফলাফল এসকিউএল বিবৃতিতে পরিবর্তন হতে পারে' '

অপরিবর্তনীয় জিনিসগুলি কখনও পরিবর্তিত হওয়ার কথা নয়। এমনকি যদি আপনি পুনরায় আরম্ভ আপনার ডাটাবেস সার্ভার, রান yum update(কিন্তু অবশ্যই সেখানে বাগ হতে পারে!), আপনার কনফিগারেশন (যেমন পরিবর্তন datestyle, timezone, default_text_search_config, extra_float_digits, ইত্যাদি), অথবা আপনার সার্ভার হার্ডওয়্যার সম্পূর্ণরূপে (পুরোনো হার্ডওয়্যার হিসাবে একই স্থাপত্যের প্রতিস্থাপন, তাই বাইনারি ফাইলগুলি এখনও সামঞ্জস্যপূর্ণ)।

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


আমি বিশ্বাস করি যে আমি অপ্রয়োজনীয় পূর্বের প্রয়োজনীয়তাগুলি বুঝতে পারি (কোথাও কোথাও পরিবর্তন হতে পারে না .... কখনও কখনও প্রশ্ন, সংযোগ, রিবুট, গ্রহ ধ্বংস এবং পুনর্গঠনের মধ্যে, যদি ডাটাবেসটি সংশোধন করা হয় তবে) এবং ভোল্যাটাইল (ফাংশন প্রসঙ্গে প্রসঙ্গের বাইরে চলে যায়) যা এটি বলা হয়েছিল)। এটা কি ঠিক? সুতরাং, তারপরে এটি স্ট্যাবলের সহজভাবে বোঝায় যে ফাংশনটি ডাটাবেসটি সংশোধন করে না এবং এর প্রসঙ্গে বাইরে ডাটাবেস অ্যাক্সেস করে না? স্ট্যাবিলের সংজ্ঞাটি মনে হচ্ছে এটি সত্যিই হওয়া দরকারের চেয়ে বেশি জটিল ... বা আমি কিছু রেখে যাচ্ছি?
ব্রুকস

পোস্টগ্রেএসকিউএল আসলে চারপাশে কিছু কিছু সমস্যা IMMUTABLEএবং জোটবদ্ধকরণ রয়েছে। এটি বিশ্বাস করে যে glibc(বা, নতুন পিজিতে, আইকনভ) কোলেশন সংজ্ঞা পরিবর্তন করবে না। বাস্তবে, তারা তা করে এবং এ জাতীয় পরিবর্তনগুলি সনাক্ত করার কোনও উপায় সরবরাহ করে না। এটি নীরব সূচক দুর্নীতির দিকে নিয়ে যেতে পারে :(। বিভিন্ন ওএস সংস্করণ ইত্যাদির মধ্যে প্রতিলিপি দেওয়ার সময় এটি বেশিরভাগ ক্ষেত্রেই হয়
ক্রেগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.