بهترین راه برای بهینه سازی عملکرد و مقیاس داده های خود در Firebase Realtime Database ، تقسیم داده های خود در چندین نمونه Realtime Database است که به عنوان اشتراک گذاری پایگاه داده نیز شناخته می شود. Sharding به شما این امکان را می دهد که فراتر از محدودیت هایی که برای نمونه های پایگاه داده فردی اعمال می شود، علاوه بر تعادل بار و بهینه سازی عملکرد، مقیاس کنید.
چه زمانی داده های خود را به اشتراک بگذارید
اگر از Realtime Database استفاده می کنید و در هر یک از سناریوهای زیر قرار می گیرید، ممکن است بخواهید داده های خود را در چندین پایگاه داده به اشتراک بگذارید:
- شما می خواهید فراتر از حد مجاز 200000 اتصال همزمان، 1000 عملیات نوشتن در ثانیه یا هر یک از محدودیت های دیگر برای یک نمونه پایگاه داده مقیاس کنید.
- شما چندین مجموعه داده مجزا دارید و می خواهید عملکرد را بهینه کنید (به عنوان مثال، یک برنامه چت که به گروه های جداگانه و مستقلی از کاربران خدمت می کند).
- شما می خواهید بار را در چندین پایگاه داده متعادل کنید تا زمان آپدیت را بهبود ببخشید و خطر بارگذاری بیش از حد یک نمونه پایگاه داده را کاهش دهید.
چگونه داده های خود را به اشتراک بگذارید
برای به اشتراک گذاری داده های خود، این مراحل را دنبال کنید (که در زیر با جزئیات بیشتر توضیح داده شده است):
- داده های خود را با توجه به نیازهای خاص برنامه خود به چندین پایگاه داده نقشه برداری کنید.
- چندین نمونه پایگاه داده ایجاد کنید.
- برنامه خود را طوری پیکربندی کنید که به نمونه Realtime Database لازم برای هر مجموعه داده متصل شود.
داده های خود را نقشه برداری کنید
هنگامی که داده های خود را به چندین پایگاه داده نگاشت می کنید، سعی کنید شرایط زیر را برآورده کنید:
- هر پرس و جو فقط در برابر یک نمونه پایگاه داده اجرا می شود. Realtime Database از پرس و جو در نمونه های پایگاه داده پشتیبانی نمی کند.
- بدون اشتراک گذاری یا تکراری از داده ها در نمونه های پایگاه داده (یا حداقل اشتراک گذاری یا تکراری).
- هر نمونه برنامه در هر لحظه فقط به یک پایگاه داده متصل می شود.
همانطور که در حال نقشه برداری از داده های خود هستید، استراتژی های زیر را در نظر بگیرید:
ایجاد یک "تکه اصلی"
نقشه ای از نحوه ذخیره داده های شما در نمونه های پایگاه داده ذخیره کنید. به این ترتیب، میتوانید بهصورت برنامهنویسی به دنبال این باشید که کدام نمونه پایگاه داده با مشتری اتصال مطابقت دارد. به خاطر داشته باشید که این ممکن است بیش از اتصال مستقیم به نمونه پایگاه داده خاصی که نیاز دارید، زمانی که به آن نیاز دارید، سربار داشته باشد.
دادهها را بر اساس دستهها یا بر اساس مشتری جمعبندی کنید
ذخیره داده ها در نمونه های پایگاه داده siled، گروه بندی شده بر اساس کاربر یا نوع داده. به عنوان مثال، اگر یک برنامه چت بسازید که به چندین سازمان خدمت می کند، می توانید یک نمونه پایگاه داده برای هر سازمان ایجاد کنید و تمام داده های چت را در نمونه های پایگاه داده منحصر به فرد ذخیره کنید.
در این مورد، سازمان A و سازمان B داده ها را به اشتراک نمی گذارند، هیچ داده تکراری در پایگاه داده شما وجود ندارد و شما فقط در مورد یک نمونه پایگاه داده پرس و جو انجام می دهید. علاوه بر این، کاربران در هر سازمان تنها زمانی به پایگاه داده سازمان خود متصل می شوند که از برنامه چت استفاده می کنند.
سپس می توانید چندین نمونه پایگاه داده را از قبل ایجاد کنید و از شناسه سازمان برای نگاشت یک تیم به نمونه پایگاه داده خود استفاده کنید. برای مثال، سازمان A به پایگاه داده بیدرنگ A نقشه میدهد.
نحوه نقشهبرداری دادهها برای برنامهتان به مورد استفاده خاص شما بستگی دارد، اما شرایط و استراتژیهای ذکر شده در بالا میتواند به شما کمک کند تا مشخص کنید چه چیزی برای دادههایتان کار میکند.
چندین نمونه Realtime Database ایجاد کنید
اگر در طرح قیمت گذاری Blaze هستید، می توانید تا 1000 نمونه پایگاه داده در همان پروژه Firebase ایجاد کنید.
کنسول Firebase با منوی زمینه در بخش پایگاه داده" />
- در کنسول Firebase ، به تب Data در قسمت Develop > Database بروید.
- از منوی قسمت Realtime Database گزینه Create new database را انتخاب کنید.
- مرجع پایگاه داده و قوانین امنیتی خود را سفارشی کنید، سپس روی Got it کلیک کنید.
برای ایجاد هر تعداد نمونه پایگاه داده که نیاز دارید، این فرآیند را تکرار کنید. هر نمونه پایگاه داده مجموعه ای از Firebase Realtime Database Security Rules را دارد، بنابراین می توانید دسترسی به داده های خود را دقیق تنظیم کنید.
می توانید نمونه های پایگاه داده را در کنسول Firebase یا با استفاده از Realtime Database Management REST API ایجاد و مدیریت کنید.
Realtime Database Security Rules برای هر نمونه ویرایش و استقرار دهید
مطمئن شوید که Realtime Database Security Rules شما اجازه دسترسی مناسب به هر نمونه پایگاه داده در پروژه شما را می دهد. هر پایگاه داده مجموعه ای از قوانین خاص خود را دارد که می توانید آنها را از کنسول Firebase ویرایش و اجرا کنید یا از Firebase CLI برای استقرار اهداف استفاده کنید.
برای ویرایش و استقرار قوانین از کنسول Firebase ، این مراحل را دنبال کنید:
- در قسمت Develop > Database به تب Rules بروید.
- پایگاه داده ای را که می خواهید ویرایش کنید انتخاب کنید، سپس قوانین را تغییر دهید.
برای ویرایش و استقرار قوانین از 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
خود را با Deploy targets به روز کنید:{ "database": [ {"target": "main", "rules": "foo.rules.json"}, {"target": "other", "rules": "bar.rules.json"} ] }
دستور deploy را اجرا کنید:
firebase deploy
- قوانین موجود در فایل های قوانین را برای نمونه های پایگاه داده خود تغییر دهید (به عنوان مثال،
اطمینان حاصل کنید که به طور مداوم قوانین را از یک مکان ویرایش و اجرا می کنید. استقرار قوانین از Firebase CLI همه ویرایشهایی را که در کنسول Firebase انجام دادهاید لغو میکند، و ویرایش قوانین مستقیماً در کنسول Firebase ، تغییرات اخیری را که از طریق Firebase CLI اعمال کردهاید لغو میکند.
برنامه خود را به چندین نمونه پایگاه داده متصل کنید
از مرجع پایگاه داده برای دسترسی به داده های ذخیره شده در نمونه های پایگاه داده ثانویه استفاده کنید. می توانید مرجع یک نمونه پایگاه داده خاص را با URL یا برنامه دریافت کنید. اگر URL را مشخص نکنید، مرجع نمونه پایگاه داده پیشفرض برنامه را دریافت خواهید کرد.
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);
سویفت
// Get the default database instance for an appvar ref: DatabaseReference! ref = Database.database().reference()// یک نمونه پایگاه داده ثانویه را با URL var ref: DatabaseReference دریافت کنید! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
هدف-C
// Get the default database instance for an app@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];// یک نمونه پایگاه داده ثانویه را با URL @property (قوی، غیر اتمی) دریافت کنید FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] مرجع];
Kotlin+KTX
// 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 CLI یک نمونه را مشخص کنید
از گزینه --instance
استفاده کنید تا مشخص کنید که می خواهید دستور Firebase CLI را روی کدام Firebase Realtime Database اعمال کنید. به عنوان مثال، از دستور زیر برای اجرای پروفایلر برای نمونه پایگاه داده به نام my-example-shard.firebaseio.com
استفاده کنید:
firebase database:profile --instance "my-example-shard"
اتصالات موجود در هر پایگاه داده را بهینه کنید
اگر هر کلاینت نیاز به اتصال به چندین پایگاه داده در طول یک جلسه داشته باشد، می توانید تعداد اتصالات همزمان به هر نمونه پایگاه داده را با اتصال به هر نمونه پایگاه داده تنها تا زمانی که لازم است کاهش دهید.
مشاوره بیشتری دریافت کنید
اگر برای اشتراک گذاری داده های خود در چندین نمونه پایگاه داده به کمک بیشتری نیاز دارید، با کارشناسان Firebase در کانال Slack یا Stack Overflow تماس بگیرید.