مقیاس با چندین پایگاه داده

بهترین راه برای بهینه سازی عملکرد و مقیاس داده های خود در پایگاه داده بیدرنگ Firebase، تقسیم داده های خود در چندین نمونه پایگاه داده بیدرنگ است که به عنوان اشتراک گذاری پایگاه داده نیز شناخته می شود. Sharding به شما این امکان را می دهد که فراتر از محدودیت هایی که برای نمونه های پایگاه داده فردی اعمال می شود، علاوه بر تعادل بار و بهینه سازی عملکرد، مقیاس کنید.

چه زمانی داده های خود را به اشتراک بگذارید

اگر از پایگاه داده Realtime استفاده می کنید و در هر یک از سناریوهای زیر قرار می گیرید، ممکن است بخواهید داده های خود را در چندین پایگاه داده به اشتراک بگذارید:

  • شما می خواهید فراتر از حد مجاز 200000 اتصال همزمان، 1000 عملیات نوشتن در ثانیه یا هر یک از محدودیت های دیگر برای یک نمونه پایگاه داده مقیاس کنید.
  • شما چندین مجموعه داده مجزا دارید و می خواهید عملکرد را بهینه کنید (به عنوان مثال، یک برنامه چت که به گروه های جداگانه و مستقلی از کاربران خدمت می کند).
  • شما می خواهید بار را در چندین پایگاه داده متعادل کنید تا زمان آپدیت را بهبود ببخشید و خطر بارگذاری بیش از حد یک نمونه پایگاه داده را کاهش دهید.

چگونه داده های خود را به اشتراک بگذارید

برای به اشتراک گذاری داده های خود، این مراحل را دنبال کنید (که در زیر با جزئیات بیشتر توضیح داده شده است):

  1. داده های خود را با توجه به نیازهای خاص برنامه خود به چندین پایگاه داده نقشه برداری کنید.
  2. چندین نمونه پایگاه داده ایجاد کنید.
  3. برنامه خود را طوری پیکربندی کنید که به نمونه پایگاه داده بیدرنگ لازم برای هر مجموعه داده متصل شود.

داده های خود را نقشه برداری کنید

هنگامی که داده های خود را به چندین پایگاه داده نگاشت می کنید، سعی کنید شرایط زیر را برآورده کنید:

  • هر پرس و جو فقط در برابر یک نمونه پایگاه داده اجرا می شود. پایگاه داده بیدرنگ از پرس و جو در نمونه های پایگاه داده پشتیبانی نمی کند.
  • بدون اشتراک گذاری یا تکراری از داده ها در نمونه های پایگاه داده (یا حداقل اشتراک گذاری یا تکراری).
  • هر نمونه برنامه در هر لحظه فقط به یک پایگاه داده متصل می شود.

همانطور که در حال نقشه برداری از داده های خود هستید، استراتژی های زیر را در نظر بگیرید:

ایجاد یک "تکه اصلی"

نقشه ای از نحوه ذخیره داده های شما در نمونه های پایگاه داده ذخیره کنید. به این ترتیب، می‌توانید به‌صورت برنامه‌نویسی به دنبال این باشید که کدام نمونه پایگاه داده با مشتری اتصال مطابقت دارد. به خاطر داشته باشید که این ممکن است بیش از اتصال مستقیم به نمونه پایگاه داده خاصی که نیاز دارید، زمانی که به آن نیاز دارید، سربار داشته باشد.

داده‌ها را بر اساس دسته‌ها یا بر اساس مشتری جمع‌بندی کنید

ذخیره داده ها در نمونه های پایگاه داده siled، گروه بندی شده بر اساس کاربر یا نوع داده. به عنوان مثال، اگر یک برنامه چت بسازید که به چندین سازمان خدمت می کند، می توانید یک نمونه پایگاه داده برای هر سازمان ایجاد کنید و تمام داده های چت را در نمونه های پایگاه داده منحصر به فرد ذخیره کنید.

در این مورد، سازمان A و سازمان B داده ها را به اشتراک نمی گذارند، هیچ داده تکراری در پایگاه داده شما وجود ندارد و شما فقط در مورد یک نمونه پایگاه داده پرس و جو انجام می دهید. علاوه بر این، کاربران در هر سازمان تنها زمانی به پایگاه داده سازمان خود متصل می شوند که از برنامه چت استفاده می کنند.

سپس می توانید چندین نمونه پایگاه داده را از قبل ایجاد کنید و از شناسه سازمان برای نگاشت یک تیم به نمونه پایگاه داده خود استفاده کنید. برای مثال، سازمان A به پایگاه داده بیدرنگ A نقشه می‌دهد.

نحوه نقشه‌برداری داده‌ها برای برنامه‌تان به مورد استفاده خاص شما بستگی دارد، اما شرایط و استراتژی‌های ذکر شده در بالا می‌تواند به شما کمک کند تا مشخص کنید چه چیزی برای داده‌هایتان کار می‌کند.

چندین نمونه پایگاه داده بیدرنگ ایجاد کنید

اگر در طرح قیمت گذاری Blaze هستید، می توانید تا 1000 نمونه پایگاه داده در همان پروژه Firebase ایجاد کنید.

یک پایگاه داده در کنسول Firebase با منوی زمینه در بخش پایگاه داده ایجاد کنید

  1. در کنسول Firebase، به تب Data در قسمت Develop > Database بروید.
  2. از منوی قسمت Realtime Database گزینه Create new database را انتخاب کنید.
  3. مرجع پایگاه داده و قوانین امنیتی خود را سفارشی کنید، سپس روی Got it کلیک کنید.

برای ایجاد هر تعداد نمونه پایگاه داده که نیاز دارید، این فرآیند را تکرار کنید. هر نمونه پایگاه داده دارای مجموعه ای از قوانین امنیتی پایگاه داده بیدرنگ Firebase است، بنابراین می توانید دسترسی به داده های خود را دقیق تنظیم کنید.

می توانید نمونه های پایگاه داده را در کنسول Firebase یا با استفاده از Realtime Database Management REST API ایجاد و مدیریت کنید.

قوانین امنیتی پایگاه داده بیدرنگ را برای هر نمونه ویرایش و استقرار دهید

مطمئن شوید که قوانین امنیت پایگاه داده بیدرنگ شما اجازه دسترسی مناسب به هر نمونه پایگاه داده در پروژه شما را می دهد. هر پایگاه داده مجموعه ای از قوانین خاص خود را دارد که می توانید آنها را از کنسول Firebase ویرایش و اجرا کنید یا از Firebase CLI برای استقرار اهداف استفاده کنید.

  • برای ویرایش و استقرار قوانین از کنسول Firebase، این مراحل را دنبال کنید:

    1. در قسمت Develop > Database به تب Rules بروید.
    2. پایگاه داده ای را که می خواهید ویرایش کنید انتخاب کنید، سپس قوانین را تغییر دهید.
  • برای ویرایش و استقرار قوانین از Firebase CLI، این مراحل را دنبال کنید:

    1. قوانین موجود در فایل های قوانین را برای نمونه های پایگاه داده خود تغییر دهید (به عنوان مثال، foo.rules.json ).
    2. ایجاد و اعمال اهداف استقرار برای مرتبط کردن پایگاه داده هایی که از فایل قوانین یکسان استفاده می کنند. به عنوان مثال:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. فایل پیکربندی firebase.json خود را با Deploy targets به روز کنید:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. دستور deploy را اجرا کنید:

      firebase deploy

اطمینان حاصل کنید که به طور مداوم قوانین را از یک مکان ویرایش و اجرا می کنید. استقرار قوانین از Firebase CLI همه ویرایش‌هایی را که در کنسول Firebase انجام داده‌اید لغو می‌کند، و ویرایش قوانین مستقیماً در کنسول Firebase، تغییرات اخیری را که از طریق Firebase CLI اعمال کرده‌اید لغو می‌کند.

برنامه خود را به چندین نمونه پایگاه داده متصل کنید

از مرجع پایگاه داده برای دسترسی به داده های ذخیره شده در نمونه های پایگاه داده ثانویه استفاده کنید. می توانید مرجع یک نمونه پایگاه داده خاص را با URL یا برنامه دریافت کنید. اگر URL را مشخص نکنید، مرجع نمونه پایگاه داده پیش‌فرض برنامه را دریافت خواهید کرد.

Web modular API

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 namespaced API

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);
سریع
توجه: این محصول Firebase در هدف App Clip موجود نیست.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// یک نمونه پایگاه داده ثانویه را با URL var ref: DatabaseReference دریافت کنید! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
هدف-C
توجه: این محصول Firebase در هدف App Clip موجود نیست.
// 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 اعمال کنید. به عنوان مثال، از دستور زیر برای اجرای پروفایلر برای نمونه پایگاه داده به نام my-example-shard.firebaseio.com استفاده کنید:

firebase database:profile --instance "my-example-shard"

اتصالات موجود در هر پایگاه داده را بهینه کنید

اگر هر کلاینت نیاز به اتصال به چندین پایگاه داده در طول یک جلسه داشته باشد، می توانید تعداد اتصالات همزمان به هر نمونه پایگاه داده را با اتصال به هر نمونه پایگاه داده تنها تا زمانی که لازم است کاهش دهید.

مشاوره بیشتری دریافت کنید

اگر برای اشتراک گذاری داده های خود در چندین نمونه پایگاه داده به کمک بیشتری نیاز دارید، با کارشناسان Firebase در کانال Slack یا Stack Overflow تماس بگیرید.