একটু ব্যাকগ্রাউন্ড
আমি বহু বছর ধরে বহু-ভাড়াটে অ্যাপ চালানোর জন্য অ্যাপার্টমেন্টের রত্নটি ব্যবহার করে আসছি । এখন সম্প্রতি পৃথক হোস্টে ডাটাবেসটি স্কেল করার প্রয়োজনীয়তা এসে গেছে, ডিবি সার্ভারটি আর কিছু ধরে রাখতে পারে না (পড়তে এবং লেখাগুলি উভয়ই খুব বেশি হয়ে যায়) - এবং হ্যাঁ, আমি হার্ডওয়্যারটি সর্বোচ্চকে মাপা করেছি (উত্সর্গীকৃত হার্ডওয়্যার, c৪ টি কোর, ১২ টি এনভিএম-ই ড্রাইভ রেইড 10, 384 জিবি র্যাম ইত্যাদি)
আমি এই প্রতি-ভাড়াটে (1 ভাড়াটিয়া = 1 ডাটাবেস সংযোগ কনফিগারেশন / পুল) করার কথা বিবেচনা করছিলাম কারণ number-of-tenants
এটি অ্যাপ্লিকেশন কোড পরিবর্তনগুলি লোড না করে বার -বার আরও বেশি ক্ষমতা অর্জনের একটি "সহজ" এবং দক্ষ উপায় ।
এখন, আমি শীঘ্রই 5.2 এ উন্নীত করে রেলপথ চালাচ্ছি 4.2। আমি দেখতে পাচ্ছি যে রেল 6 প্রতি মডেল সংযোগ সংজ্ঞাগুলির জন্য সমর্থন যোগ করে, তবে এটি আমার যা প্রয়োজন তা সত্যিই নয়, কারণ আমার প্রতিটি 20 ভাড়াটে লোকের জন্য আমার পুরোপুরি মিররড ডাটাবেস স্কিমা রয়েছে। সাধারণত আমি অনুরোধ অনুযায়ী "ডাটাবেস" স্যুইচ করি (মিডওয়্যারের সাথে) বা ব্যাকগ্রাউন্ড জব (সাইডকিক মিডলওয়্যার), তবে এটি বর্তমানে তুচ্ছ এবং পরিচালিত অ্যাপার্টমেন্ট অ্যাপার্টমেন্ট রত্ন, কারণ এটি search_path
পোস্টগ্র্যাস্কল-এ কেবল সেট করে এবং প্রকৃত সংযোগটি পরিবর্তন করে না। প্রতি ভাড়াটে হোস্টিং কৌশলটিতে স্যুইচ করার সময় আমার অনুরোধ অনুযায়ী পুরো সংযোগটি স্যুইচ করা দরকার।
প্রশ্নাবলী:
- আমি বুঝতে পারি যে আমি
ActiveRecord::Base.establish_connection(config)
প্রতি অনুরোধ / পটভূমির কাজ করতে পারি - তবে, আমি যেমন বুঝতে পেরেছি, এটি সম্পূর্ণ নতুন ডাটাবেস সংযোগ হ্যান্ডশেক তৈরি করতে এবং একটি নতুন ডিবি পুলকে ট্রেনে ছড়িয়ে দেবে - ঠিক? আমার অনুমান যে আমার আবেদনের প্রতি একক অনুরোধে এই ধরণের ওভারহেড তৈরি করা একটি পারফরম্যান্স আত্মহত্যা। - আমি তাই ভাবছি যে কেউ যদি প্রথম থেকেই একাধিক (মোট ২০ টি) ডাটাবেস সংযোগ / পুল (যেমন অ্যাপ্লিকেশন বুটে থাকে) এর রেল দিয়ে বিকল্প দেখতে পায় এবং কেবল অনুরোধ অনুসারে এই পুলগুলির মধ্যে স্যুইচ করে? যাতে তিনি ডিবি সংযোগগুলি ইতিমধ্যে তৈরি এবং ব্যবহারের জন্য প্রস্তুত।
- এগুলি কি কেবল একটি দরিদ্র ধারণা, এবং এর পরিবর্তে আমার কি আলাদা পদ্ধতির সন্ধান করা উচিত? উদাহরণস্বরূপ 1 অ্যাপ্লিকেশন উদাহরণ = একটি নির্দিষ্ট ভাড়াটেটির সাথে একটি নির্দিষ্ট সংযোগ। অথবা অন্য কিছু.
master
শাখায় সম্প্রতি প্রয়োজনীয় বৈশিষ্ট্যটি যুক্ত করেছে । রেলস ডিম চালানো কোনও বিকল্প হবে বা আপনার বর্তমান রেল সংস্করণে সেই বৈশিষ্ট্যটি ব্যাক-প্রাইটিং হবে?
ActiveRecord::Base.connected_to(shard: :shard_one) do ... end
অর্থ হ'ল পুলটি পুনরায় ব্যবহার করা হবে, প্রতিবার পুরো নতুন সংযোগ তৈরির পরিবর্তে?