Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. עבור אל הכרטיסייה כללי בחלק פיתוח> Database.
    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, תקבל את ההפניה למופע ברירת המחדל של מסד הנתונים של האפליקציה.

גרסת אינטרנט 9

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);

גרסת אינטרנט 8

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.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// קבל מופע באתר משני על ידי שופט var URL: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
הערה: מוצר Firebase זו איננו זמין על יעד קליפ App.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// קבל מופע באתר המשני ידי @property URL (חזק, nonatomic) FIRDatabaseReference * נ"צ; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] הפניה];

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();

קוטלין+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

ציין מופע בעת שימוש ב-Firebase CLI

השתמש --instance אפשרות לציין איזה Firebase זמן אמת מסד ברצונך להחיל פקודה Firebase CLI כדי. לדוגמה, השתמש בפקודה הבאה כדי להפעיל את Profiler עבור מופע באתר בשם my-example-shard.firebaseio.com :

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

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

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

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

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