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

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

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

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

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

כיצד לגזור את הנתונים שלך

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

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

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

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

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

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

צור "שבר ראשי"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      firebase deploy

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

חבר את האפליקציה למספר מופעי מסד נתונים

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

אינטרנט v8

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

אינטרנט v9

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);
מָהִיר
// 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"). הפניה ()
מטרה-ג
// 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"] הפניה];

ג'אווה

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

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

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

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

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

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

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

קבל עוד עצות

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