קנה מידה עם מסדי נתונים מרובים

הדרך הטובה ביותר לייעל את הביצועים ולהגדיל את קנה המידה של הנתונים שלך ב-Firebase Realtime Database היא לפצל את הנתונים שלך על פני מספר מופעי Realtime Database, הידוע גם בשם ריסוק מסד נתונים. Sharding מעניקה לך את הגמישות להתרחב מעבר למגבלות החלות על מופעי מסד נתונים בודדים, בנוסף לאיזון עומסים ואופטימיזציה של ביצועים.

מתי לחלוק את הנתונים שלך

ייתכן שתרצה לפזר את הנתונים שלך על פני מסדי נתונים מרובים אם אתה משתמש במסד נתונים בזמן אמת ומתאים לכל אחד מהתרחישים הבאים:

  • ברצונך לבצע קנה מידה מעבר למגבלה של 200,000 חיבורים בו-זמניים, 1,000 פעולות כתיבה/שנייה, או כל אחת מהמגבלות האחרות עבור מופע מסד נתונים בודד.
  • יש לך מערכי נתונים מרובים בדידים ואתה רוצה לייעל את הביצועים (לדוגמה, אפליקציית צ'אט המשרתת קבוצות נפרדות ועצמאיות של משתמשים).
  • אתה רוצה לאזן עומס על פני מסדי נתונים מרובים כדי לשפר את זמן העבודה ולהפחית את הסיכון של עומס יתר על מופע מסד נתונים בודד.

כיצד לחלוק את הנתונים שלך

כדי לפזר את הנתונים שלך, בצע את השלבים הבאים (המתואר בפירוט רב יותר להלן):

  1. מפה את הנתונים שלך למספר מסדי נתונים בהתאם לצרכים הספציפיים של האפליקציה שלך.
  2. צור מופעי מסד נתונים מרובים.
  3. הגדר את האפליקציה שלך כך שהיא תתחבר למופע Realtime Database הדרוש עבור כל מערך נתונים.

מפה את הנתונים שלך

כאשר אתה ממפה את הנתונים שלך למספר מסדי נתונים, נסה לעמוד בתנאים הבאים:

  • כל שאילתה פועלת רק מול מופע יחיד של מסד נתונים. מסד נתונים בזמן אמת אינו תומך בשאילתות בין מופעי מסד נתונים.
  • אין שיתוף או שכפול של נתונים בין מופעי מסד נתונים (או שיתוף או שכפול מינימלי).
  • כל מופע אפליקציה מתחבר רק למסד נתונים אחד בכל רגע נתון.

בזמן שאתה ממפה את הנתונים שלך, שקול ליישם את האסטרטגיות הבאות:

צור "רסיס מאסטר"

אחסן מפה של האופן שבו הנתונים שלך מאוחסנים על פני מופעי מסד נתונים. בדרך זו, אתה יכול לחפש באופן פרוגרמטי איזה מופע מסד נתונים מתאים ללקוח המתחבר. זכור שייתכן שיש לזה יותר תקורה מאשר חיבור ישיר למופע מסד הנתונים הספציפי שאתה צריך, כאשר אתה צריך אותו.

נתוני דלי לפי קטגוריות או לפי לקוח

אחסן נתונים במופעי מסד נתונים מכוסים, מקובצים לפי משתמש או סוג נתונים. לדוגמה, אם אתה בונה יישום צ'אט המשרת מספר ארגונים, אתה יכול ליצור מופע מסד נתונים עבור כל ארגון ולאחסן את כל נתוני הצ'אט במופעי מסד נתונים ייחודיים.

במקרה זה, ארגון A וארגון B אינם חולקים נתונים, אין נתונים כפולים בבסיסי הנתונים שלך, ואתה מבצע שאילתות רק כנגד מופע מסד נתונים בודד. בנוסף, משתמשים בכל ארגון מתחברים למסד הנתונים של הארגון שלהם רק כשהם משתמשים באפליקציית הצ'אט.

לאחר מכן תוכל ליצור מספר מופעי מסד נתונים מראש ולהשתמש במזהה הארגון כדי למפות צוות למופע מסד הנתונים שלו. לדוגמה, ארגון A ממפה למסד נתונים בזמן אמת A.

האופן שבו אתה ממפה נתונים עבור האפליקציה שלך תלוי במקרה השימוש הספציפי שלך, אבל התנאים והאסטרטגיות המפורטות למעלה יכולים לעזור לך להגדיר מה עובד עבור הנתונים שלך.

צור מופעי מסד נתונים מרובים בזמן אמת

אם אתה בתוכנית התמחור של Blaze , אתה יכול ליצור עד 1,000 מופעי מסד נתונים באותו פרויקט Firebase.

צור מסד נתונים במסוף Firebase עם תפריט ההקשר במקטע מסדי הנתונים

  1. במסוף Firebase, עבור ללשונית נתונים בקטע פיתוח > מסד נתונים .
  2. בחר צור מסד נתונים חדש מהתפריט במקטע מסד נתונים בזמן אמת .
  3. התאם אישית את ההפניה למסד הנתונים ואת כללי האבטחה שלך, ולאחר מכן לחץ על הבנתי .

חזור על התהליך כדי ליצור מופעי מסד נתונים רבים ככל שתצטרך. לכל מופע מסד נתונים יש קבוצה משלו של כללי אבטחת מסד נתונים של Firebase בזמן אמת, כך שתוכל לכוונן את הגישה לנתונים שלך.

אתה יכול ליצור ולנהל מופעי מסד נתונים במסוף Firebase או באמצעות REST API לניהול מסד נתונים בזמן אמת .

ערוך ופריסה של כללי אבטחת מסד נתונים בזמן אמת עבור כל מופע

ודא שכללי האבטחה של מסד הנתונים בזמן אמת מאפשרים גישה מתאימה לכל מופע מסד נתונים בפרויקט שלך. לכל מסד נתונים יש קבוצת כללים משלו, אותם תוכל לערוך ולפרוס ממסוף Firebase, או באמצעות Firebase CLI לפריסת יעדים .

  • כדי לערוך ולפרוס כללים ממסוף Firebase, בצע את השלבים הבאים:

    1. עבור אל הכרטיסייה כללים בקטע פיתוח > מסד נתונים .
    2. בחר את מסד הנתונים שברצונך לערוך, ולאחר מכן שנה את הכללים.
  • כדי לערוך ולפרוס כללים מה-CLI של Firebase, בצע את השלבים הבאים:

    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 עם יעדי הפריסה:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. הפעל את פקודת הפריסה:

      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()
Objective-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 Realtime ברצונך להחיל פקודת Firebase CLI. לדוגמה, השתמש בפקודה הבאה כדי להפעיל את הפרופיל עבור מופע מסד נתונים בשם my-example-shard.firebaseio.com :

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

בצע אופטימיזציה של החיבורים בכל מסד נתונים

אם כל לקוח צריך להתחבר למספר מסדי נתונים במהלך הפעלה, אתה יכול לצמצם את מספר החיבורים בו-זמנית לכל מופע מסד נתונים על ידי התחברות לכל מופע מסד נתונים רק כל זמן שנדרש.

קבל עצות נוספות

אם אתה זקוק לעזרה נוספת בחלוקת הנתונים שלך על פני מופעי מסד נתונים מרובים, פנה אל מומחי Firebase בערוץ ה-Slack שלנו או ב- Stack Overflow .