নিম্ন প্রান্তে, এটি মূলত নীচে ফোটে "আপনি কি পুরোপুরি বলতে পারবেন যে আপনার কাছে কোনও ভাগ করা ডেটা নেই?" মাইএসকিএল-এর বিপরীতে, ডাটাবেসটি পোস্টগ্রেস্কলিতে একটি পরম সীমানা। আপনি SELECT zip_code FROM common.city_zip WHERE city=...পৃথক ডাটাবেস (কমপক্ষে ছাড়া না dblink) নিয়ে গেলে আপনি পারবেন না ।
আপনার কাছে যদি কোনও ভাগ করা ডেটা থাকে তবে পোস্টগ্র্যাসিকেলের "স্কিমা" মাইএসকিএল একটি "ডাটাবেস" বলে যা তার মতই । আপনি পারেন CREATE SCHEMA clienta; CREATE TABLE clienta.customer (...);। আপনি প্রতিটি ক্লায়েন্টের জন্য একটি স্কিমা তৈরি করবেন, সেই ক্লায়েন্টের ব্যবহারকারীর তাদের অনুসন্ধানের পথে প্রথমে তাদের স্কিমা থাকবে এবং অনুমতি দেওয়া হবে যাতে ক্লায়েন্ট এ এর ব্যবহারকারীর clientaএবং publicস্কিমার (এবং তাদের টেবিলগুলি) অ্যাক্সেস থাকে ।
আপনার সমস্যাটি হ'ল # ক্লায়েন্টের উচ্চ প্রান্তে, প্রতিটি টেবিলটি একটি ফাইল হিসাবে সংরক্ষণ করা হয়, তাই আপনি ক্লায়েন্টের প্রতি একটি ডাটাবেস, ক্লায়েন্টের জন্য একটি স্কিমা, বা ${client}_customerআপনার টেবিলের নামগুলির মতো কিছু ব্যবহার করেন না কেন , আপনি আপনার কাছে প্রতি ক্লায়েন্টের কাছে কেবল একটি টেবিল থাকলে (সংযোগে প্রতি একটি ফাইলডেস্ক্রিপ্টর) থাকলেও সম্ভবত 10 কে ক্লায়েন্টের সাথে ফাইলডিসিপিটার সীমাতে চালিত হতে পারে । অবশ্যই, আপনি সিস্টেপ্ট ব্যবহার করে ফ্লাইটে কার্নেলের সর্বাধিক সংখ্যক ফাইল বর্ণনাকারী সামঞ্জস্য করতে পারেন, তবে প্রতি-প্রক্রিয়া সীমাতে (উলিমিট) যদি আপনি প্রথমবারের মতো খুব কম সেট করেন তবে পোস্টগ্র্যাসকিল পুনরায় চালু করতে হবে।
বিকল্পটি হল একটি ক্লায়েন্ট কলামের সাথে "একটি বড় টেবিল" থাকা যা সারিটি কোন ক্লায়েন্টের অন্তর্ভুক্ত তা চিহ্নিত করে (আদর্শভাবে, ব্যবহারকারীর নাম অনুসারে যদি প্রতি ক্লায়েন্টে আপনার একজন ব্যবহারকারী থাকে, এটি লটটির নীচে থাকা জিনিসকে আরও সহজ করে তোলে)। ক্লায়েন্টদের দ্বারা এই টেবিলটিতে মোটামুটি কোনও অ্যাক্সেস না দিয়ে আপনি ক্লায়েন্ট-নির্দিষ্ট দৃষ্টিভঙ্গি তৈরি করতে পারেন (বা session_userবর্তমান ক্লায়েন্ট সনাক্ত করতে ব্যবহার করতে পারেন )। আপডেটগুলি সরাসরি কোনও দৃশ্যের মাধ্যমে করা যায় না। টেবিলগুলিতে সন্নিবেশ / আপডেট / মুছার অনুমতি সহ একটি বিশেষ ব্যবহারকারী হিসাবে এক্সিকিউটিভ করার জন্য session_userফাংশনগুলি ব্যবহার করে টেবিলের উপরে (কোনও ক্লায়েন্ট প্রতি ফাংশনের একটি সেট বা অন্য ব্যবহার করে ) সন্নিবেশ / আপডেট / মুছতে আপনার সংজ্ঞায়িত ফাংশন থাকতে হবে SECURITY DEFINER(নোট : session_userকারণ userএবং ব্যবহৃত হয়current_user বর্তমান প্রসঙ্গের উপর ভিত্তি করে, এবং একটি সুরক্ষা ডিফাইনার ফাংশনের মধ্যে এটি সর্বদা ফাংশনটি সংজ্ঞায়িতকারী ব্যবহারকারী হবে)।
পারফরম্যান্স অনুসারে, এফডি ইস্যুটির বাইরে, আমি সতর্কতার সাথে জানি না যে পোস্টগ্রেস্কেএল-তে 10000 ডাটাবেসগুলির সাথে কী ঘটবে, বনাম এতে একটি বড় টেবিল রয়েছে যার মধ্যে এতে 10000 ক্লায়েন্টের মূল্যবান ডেটা রয়েছে। যথাযথ সূচী নকশাগুলি কোয়েরি থেকে ধীরে ধীরে বড় টেবিলটি রাখা উচিত।
আমি বলব যে আমি এখানে প্রতিটি ক্লায়েন্টের জন্য পৃথক ডাটাবেস নিয়ে গিয়েছিলাম (সিস্টেমটি ব্যবহারযোগ্য রাখার জন্য আমরা সার্ভারগুলি যুক্ত করি, ক্লায়েন্টের ডেটাবেসগুলিকে প্রয়োজনমতো নতুন সার্ভারে স্থানান্তর করি, তাই আমরা কখনই একটি সার্ভারে 10 কে ডাটাবেস পেতে পারি না)। ডিবাগিংয়ের জন্য বা নিয়মিতভাবে ব্যবহারকারীর ত্রুটির কারণে ব্যাকআপ থেকে স্বতন্ত্র ক্লায়েন্টের ডেটা আমাকে পুনরুদ্ধার করতে হয়েছিল, এটি এমন একটি যা "একটি বড় টেবিল" ডিজাইনের পরম দুঃস্বপ্ন হতে পারে। এছাড়াও, যদি আপনি আপনার ক্লায়েন্টদের কাছে আপনার পণ্যটির কাস্টমাইজেশন বিক্রি করতে চান, তবে "একটি বড় টেবিল" ডিজাইনটি আপনাকে ডেটা মডেলটি কাস্টমাইজ করার দক্ষতা অবলম্বন করতে পারে।