بهترین راه برای بهینهسازی عملکرد و مقیاسبندی دادههایتان در Firebase Realtime Database این است که دادههایتان را در چند نمونه Realtime Database تقسیم کنید، که به آن بخشبندی پایگاه داده نیز میگویند. تکهتکه کردن به شما انعطافپذیری میدهد تا فراتر از محدودیتهایی که برای نمونههای پایگاه داده مجزا اعمال میشود، مقیاسبندی کنید، علاوهبر توازن بار و بهینهسازی عملکرد.
چه زمانی دادههایتان را بخشبندی کنید
اگر از Realtime Database استفاده میکنید و در هریک از سناریوهای زیر قرار میگیرید، ممکن است بخواهید دادههایتان را در چندین پایگاه داده تقسیم کنید:
- میخواهید فراتر از حد ۲۰۰۰۰۰ اتصال همزمان، ۱۰۰۰ عملیات نوشتن در ثانیه، یا هرکدام از حدود دیگر برای یک نمونه پایگاه داده واحد مقیاسبندی کنید.
- چندین مجموعه داده مجزا دارید و میخواهید عملکرد را بهینهسازی کنید (برای مثال، برنامه گپی که به گروههای مجزا و مستقل کاربران خدمات ارائه میدهد).
- میخواهید بار را در چندین پایگاه داده متعادل کنید تا زمان فعال بودن دستگاه را بهبود ببخشید و خطر اضافهبار شدن یک نمونه پایگاه داده را کاهش دهید.
نحوه قطعهبندی دادهها
برای قطعهبندی کردن دادههایتان، این مراحل را دنبال کنید (در زیر با جزئیات بیشتر شرح داده شده است):
- دادههایتان را براساس نیازهای خاص برنامهتان به چندین پایگاه داده نگاشت کنید.
- چندین نمونه پایگاه داده ایجاد کنید.
- برنامهتان را پیکربندی کنید تا به نمونه Realtime Database لازم برای هر مجموعه داده متصل شود.
نگاشت دادهها
وقتی دادههایتان را به چندین پایگاه داده نگاشت میکنید، سعی کنید شرایط زیر را برآورده کنید:
- هر پرسمان فقط در یک نمونه پایگاه داده اجرا میشود. Realtime Database از پُرسمانها در نمونههای پایگاه داده پشتیبانی نمیکند.
- هیچ دادهای در نمونههای پایگاه داده همرسانی یا تکرار نمیشود (یا همرسانی یا تکرار حداقل است).
- هر نمونه برنامه در هر لحظه فقط به یک پایگاه داده متصل میشود.
هنگام نگاشت دادههایتان، استفاده از استراتژیهای زیر را درنظر بگیرید:
ایجاد «تکه اصلی»
نقشهای از نحوه ذخیره شدن دادههایتان در نمونههای پایگاه داده ذخیره کنید. بهاینترتیب، میتوانید بهصورت برنامهنویسیشده جستجو کنید که کدام نمونه پایگاه داده با کلاینت متصلشونده مطابقت دارد. بهخاطر داشته باشید که این کار ممکن است سربار بیشتری نسبت به اتصال مستقیم به نمونه پایگاه داده خاصی که نیاز دارید، در زمانی که نیاز دارید، داشته باشد.
دادههای Bucket براساس دستهها یا مشتری
دادهها را در نمونههای پایگاه داده مجزا، گروهبندیشده براساس کاربر یا نوع داده، ذخیره کنید. برای مثال، اگر برنامه گپی میسازید که به چندین سازمان خدمات ارائه میدهد، میتوانید برای هر سازمان یک نمونه پایگاه داده ایجاد کنید و همه دادههای گپ را در نمونههای پایگاه داده منحصربهفرد ذخیره کنید.
در این حالت، سازمان الف و سازمان ب دادهها را همرسانی نمیکنند، هیچ داده تکراریای در پایگاههای داده شما وجود ندارد، و شما فقط پُرسمانها را درمقابل یک نمونه پایگاه داده اجرا میکنید. علاوهبراین، کاربران هر سازمان فقط وقتی از برنامه گپ استفاده میکنند به پایگاه داده سازمانشان متصل میشوند.
سپس میتوانید چندین نمونه پایگاه داده را ازقبل ایجاد کنید و از شناسه سازمان برای نگاشت تیم به نمونه پایگاه داده آن استفاده کنید. برای مثال، سازمان الف به «پایگاه داده بیدرنگ» الف نگاشت میشود.
نحوه نگاشت دادهها برای برنامهتان به مورد استفاده خاص شما بستگی دارد، اما شرایط و راهبردهای ذکرشده در بالا میتواند به شما کمک کند تا آنچه را برای دادههایتان مناسب است تعریف کنید.
ایجاد چندین نمونه Realtime Database
اگر در طرح قیمتگذاری Blaze هستید، میتوانید تا ۱۰۰۰ نمونه پایگاه داده در همان پروژه Firebase ایجاد کنید.

در کنسول Firebase، به برگه پایگاههای داده و فضای ذخیرهسازی > پایگاه داده همزمان > داده بروید.
ایجاد پایگاه داده جدید را از منوِ کرکرهای انتخاب کنید.
مرجع پایگاه داده و Security Rules را سفارشیسازی کنید، سپس روی متوجه شدم کلیک کنید.
این فرایند را تکرار کنید تا هر تعداد نمونه پایگاه داده که نیاز دارید ایجاد شود. هر نمونه پایگاه داده مجموعه Firebase Realtime Database Security Rules خودش را دارد، بنابراین میتوانید دسترسی به دادههایتان را بهطور دقیق تنظیم کنید.
میتوانید نمونههای پایگاه داده را در کنسول Firebase یا بااستفاده از Realtime Database Management REST API ایجاد و مدیریت کنید.
مدیریت و تعامل با نمونههای خاص بااستفاده از CLI
میتوانید بااستفاده از Firebase CLI، با نمونههای خاص Realtime Database تعامل داشته باشید و آنها را مدیریت کنید.
بهطور پیشفرض، فرمانهای CLI با نمونه پایگاه داده پیشفرض شما تعامل دارند. اما میتوانید بااستفاده از پرچم --instance DATABASE_NAME
برای مثال، از فرمان زیر برای اجرای
نمایهساز برای نمونه پایگاه دادهای با نام my-example-shard.firebaseio.com استفاده کنید:
firebase database:profile --instance "my-example-shard"
فرمانهای زیر از پرچم --instance پشتیبانی میکنند:
firebase database:getfirebase database:profilefirebase database:pushfirebase database:removefirebase database:setfirebase database:update
ویرایش و استقرار Realtime Database Security Rules برای هر نمونه
مطمئن شوید که Realtime Database Security Rules شما دسترسی مناسب به هر نمونه پایگاه داده در پروژهتان را مجاز میکند. هر پایگاه داده مجموعه قوانین خاص خود را دارد، که میتوانید آنها را از کنسول Firebase ویرایش و مستقر کنید، یا از رابط خط فرمان Firebase برای مستقر کردن هدفها استفاده کنید.
برای ویرایش و استقرار قوانین از کنسول Firebase، این مراحل را دنبال کنید:
در کنسول Firebase، به برگه پایگاههای داده و فضای ذخیرهسازی > پایگاه داده همزمان > قوانین بروید.
پایگاه دادهای را که میخواهید ویرایش کنید انتخاب کنید، سپس قوانین را اصلاح کنید.
برای ویرایش و استقرار قوانین از Firebase CLI، این مراحل را دنبال کنید:
قوانین را در فایلهای قوانین برای نمونههای پایگاه دادهتان اصلاح کنید (برای مثال،
foo.rules.json).هدفهای استقرار را ایجاد و اعمال کنید تا پایگاههای دادهای را که از فایل قوانین یکسان استفاده میکنند مرتبط کنید. برای مثال:
firebase target:apply database main my-db-1 my-db-2
firebase target:apply database other my-other-db-3
فایل پیکربندی
firebase.jsonرا با هدفهای استقرار بهروز کنید:{ "database": [ {"target": "main", "rules": "foo.rules.json"}, {"target": "other", "rules": "bar.rules.json"} ] }فرمان استقرار را اجرا کنید:
firebase deploy
مطمئن شوید که قوانین را بهطور مداوم از یک مکان ویرایش و مستقر میکنید. استقرار قوانین از Firebase CLI هرگونه ویرایشی را که در کنسول Firebase انجام دادهاید لغو میکند، و ویرایش قوانین مستقیماً در کنسول Firebase هرگونه تغییرات اخیری را که ازطریق Firebase CLI مستقر کردهاید لغو میکند.
متصل کردن برنامه به چند نمونه پایگاه داده
از مرجع پایگاه داده برای دسترسی به دادههای ذخیرهشده در نمونههای پایگاه داده ثانویه استفاده کنید. میتوانید مرجع نمونه پایگاه داده خاصی را ازطریق نشانی وب یا برنامه دریافت کنید. اگر نشانی وب را مشخص نکنید، مرجع نمونه پایگاه داده پیشفرض برنامه را دریافت خواهید کرد.
Web
import { initializeApp } from "firebase/app"; import { getDatabase } from "firebase/database"; const app1 = initializeApp({ databaseURL: "https://testapp-1234-1.firebaseio.com" }); const app2 = initializeApp({ databaseURL: "https://testapp-1234-2.firebaseio.com" }, 'app2'); // Get the default database instance for an app1 const database1 = getDatabase(app1); // Get a database instance for app2 const database2 = getDatabase(app2);
Web
const app1 = firebase.initializeApp({ databaseURL: "https://testapp-1234-1.firebaseio.com" }); const app2 = firebase.initializeApp({ databaseURL: "https://testapp-1234-2.firebaseio.com" }, 'app2'); // Get the default database instance for an app1 var database1 = firebase.database(); // Get a database instance for app2 var database2 = firebase.database(app2);
Swift
// Get the default database instance for an appvar ref: DatabaseReference! ref = Database.database().reference()
Objective-C
// Get the default database instance for an app@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];
Kotlin
// Get the default database instance for an app val primary = Firebase.database.reference // Get a secondary database instance by URL val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference
Java
// Get the default database instance for an app DatabaseReference primary = FirebaseDatabase.getInstance() .getReference(); // Get a secondary database instance by URL DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com") .getReference();
بهینهسازی اتصالات در هر پایگاه داده
اگر هر کارخواه باید درطول یک جلسه به چندین پایگاه داده متصل شود، میتوانید تعداد اتصالات همزمان به هر نمونه پایگاه داده را با اتصال به هر نمونه پایگاه داده فقط برای مدتزمان لازم کاهش دهید.
دریافت کردن مشاوره بیشتر
اگر برای بخشبندی دادههایتان در چند نمونه پایگاه داده به راهنمایی بیشتری نیاز دارید، با کارشناسان Firebase در کانال Slack ما یا در Stack Overflow تماس بگیرید.