Firebase Realtime Database'te performansı optimize etmenin ve verilerinizi ölçeklendirmenin en iyi yolu, verilerinizi veritabanı bölme olarak da bilinen birden fazla Realtime Database örneğine bölmektir. Bölme, yük dengeleme ve performans optimizasyonunun yanı sıra tek tek veritabanı örnekleri için geçerli olan sınırların ötesine ölçeklendirme esnekliği sağlar.
Verilerinizi ne zaman bölemeniz gerekir?
Realtime Database kullanıyorsanız ve aşağıdaki senaryolardan herhangi birine uyuyorsanız verilerinizi birden fazla veritabanı arasında bölme isteyebilirsiniz:
- Tek bir veritabanı örneği için 200.000 eşzamanlı bağlantı, saniyede 1.000 yazma işlemi veya diğer sınırların ötesine ölçeklendirmek istiyorsunuz.
- Birden fazla ayrı veri kümeniz varsa ve performansı optimize etmek istiyorsanız (örneğin, ayrı ve bağımsız kullanıcı gruplarına hizmet veren bir sohbet uygulaması)
- Çalışma süresini artırmak ve tek bir veritabanı örneğinin aşırı yüklenme riskini azaltmak için yükü birden fazla veritabanı arasında dengelemek istiyorsunuz.
Verilerinizi bölme
Verilerinizi parçalara ayırmak için aşağıdaki adımları uygulayın (aşağıda daha ayrıntılı olarak açıklanmıştır):
- Uygulamanızın ihtiyaçlarına göre verilerinizi birden fazla veritabanı ile eşleyin.
- Birden fazla veritabanı örneği oluşturma
- Uygulamanızı, her veri kümesi için gerekli Realtime Database örneğine bağlanacak şekilde yapılandırın.
Verilerinizi eşleme
Verilerinizi birden fazla veritabanı ile eşlerken aşağıdaki koşulları karşılamaya çalışın:
- Her sorgu yalnızca tek bir veritabanı örneğinde çalıştırılır. Realtime Database, veritabanı örnekleri arasında sorguları desteklemez.
- Veritabanı örnekleri arasında veri paylaşımı veya kopyalama yapılmamalıdır (veya minimum düzeyde paylaşım veya kopyalama yapılmalıdır).
- Her uygulama örneği herhangi bir zamanda yalnızca bir veritabanına bağlanır.
Verilerinizi eşlerken aşağıdaki stratejileri uygulayabilirsiniz:
"Ana parça" oluşturma
Verilerinizin veritabanı örnekleri arasında nasıl depolandığını gösteren bir harita depolayın. Bu sayede, hangi veritabanı örneğinin bağlanan istemciye karşılık geldiğini programatik olarak arayabilirsiniz. Bunun, ihtiyacınız olduğunda doğrudan ihtiyacınız olan veritabanı örneğine bağlanmaktan daha fazla ek maliyete neden olabileceğini unutmayın.
Verileri kategorilere veya müşterilere göre gruplandırma
Verileri, kullanıcıya veya veri türüne göre gruplandırılmış, birbirinden izole veritabanı örneklerinde depolayın. Örneğin, birden fazla kuruluşa hizmet veren bir sohbet uygulaması oluşturursanız her kuruluş için bir veritabanı örneği oluşturabilir ve tüm sohbet verilerini benzersiz veritabanı örneklerinde saklayabilirsiniz.
Bu durumda A kuruluşu ve B kuruluşu veri paylaşmaz, veritabanlarınızda yinelenen veri yoktur ve yalnızca tek bir veritabanı örneğine karşı sorgu yürütürsünüz. Ayrıca, her kuruluştaki kullanıcılar yalnızca sohbet uygulamasını kullanırken kuruluşlarının veritabanına bağlanır.
Ardından, önceden birkaç veritabanı örneği oluşturabilir ve bir ekibi veritabanı örneğiyle eşlemek için kuruluşun kimliğini kullanabilirsiniz. Örneğin, A kuruluşu A anlık veritabanıyla eşlenir.
Uygulamanız için verileri eşleme şekliniz, kullanım alanınıza bağlıdır ancak yukarıda belirtilen koşullar ve stratejiler, verileriniz için neyin işe yaradığını belirlemenize yardımcı olabilir.
Birden fazla Realtime Database örneği oluşturma
Blaze fiyatlandırma planını kullanıyorsanız aynı Firebase projesinde 1.000'e kadar veritabanı örneği oluşturabilirsiniz.
Veritabanları bölümündeki bağlam menüsüne sahip Firebase konsolu" />
- Firebase konsolunda Geliştirme > Veritabanı bölümündeki Veriler sekmesine gidin.
- Realtime Database bölümündeki menüden Yeni veritabanı oluştur'u seçin.
- Veritabanı referansı ve Güvenlik kurallarını özelleştirin, ardından Anladım'ı tıklayın.
İhtiyacınız olduğu kadar veritabanı örneği oluşturmak için işlemi tekrarlayın. Her veritabanı örneğinin kendi Firebase Realtime Database Security Rules grubu vardır. Böylece verilerinize erişimi hassaslaştırabilirsiniz.
Firebase konsolunda veya Realtime Database Management REST API'yi kullanarak veritabanı örnekleri oluşturabilir ve yönetebilirsiniz.
Her örnek için Realtime Database Security Rules'ü düzenleyip dağıtın
Realtime Database Security Rules'ün, projenizdeki her veritabanı örneğine uygun erişime izin verdiğinden emin olun. Her veritabanının kendine ait bir kural grubu vardır. Bu kuralları Firebase konsolundan veya Firebase CLI'yi kullanarak hedefleri dağıtmak için düzenleyip dağıtabilirsiniz.
Firebase konsolundan kuralları düzenlemek ve dağıtmak için aşağıdaki adımları uygulayın:
- Geliştirme > Veritabanı bölümündeki Kurallar sekmesine gidin.
- Düzenlemek istediğiniz veritabanını seçin ve ardından kuralları değiştirin.
Firebase CLI'den kuralları düzenlemek ve dağıtmak için aşağıdaki adımları uygulayın:
- Veritabanı örnekleriniz için kurallar dosyalarındaki kuralları (örneğin,
foo.rules.json
) değiştirin. - Aynı kurallar dosyasını kullanan veritabanlarını ilişkilendirmek için dağıtım hedefleri oluşturun ve uygulayın. Örneğin:
firebase target:apply database main my-db-1 my-db-2
firebase target:apply database other my-other-db-3
firebase.json
yapılandırma dosyanızı dağıtım hedefleriyle güncelleyin:{ "database": [ {"target": "main", "rules": "foo.rules.json"}, {"target": "other", "rules": "bar.rules.json"} ] }
Dağıtım komutunu çalıştırın:
firebase deploy
- Veritabanı örnekleriniz için kurallar dosyalarındaki kuralları (örneğin,
Kuralları her zaman aynı yerden düzenlediğinizden ve dağıttığınızdan emin olun. Kuralları Firebase CLI'den dağıtmak, Firebase konsolunda yaptığınız tüm düzenlemeleri geçersiz kılar. Kuralları doğrudan Firebase konsolunda düzenlemek ise Firebase CLI aracılığıyla dağıttığınız son değişiklikleri geçersiz kılar.
Uygulamanızı birden fazla veritabanı örneğine bağlama
İkincil veritabanı örneklerinde depolanan verilere erişmek için veritabanı referansını kullanın. Belirli bir veritabanı örneğinin referansını URL'ye veya uygulamaya göre alabilirsiniz. URL belirtmezseniz uygulamanın varsayılan veritabanı örneğinin referansını alırsınız.
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);
Swift
// Get the default database instance for an appvar ref: DatabaseReference! ref = Database.database().reference()// URL'ye göre ikincil bir veritabanı örneği alın var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
// Get the default database instance for an app@property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase database] reference];// URL'ye göre ikincil bir veritabanı örneği alın @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];
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'yi kullanırken örnek belirtme
Firebase CLI komutunu hangi Firebase Realtime Database'a uygulamak istediğinizi belirtmek için --instance
seçeneğini kullanın. Örneğin, my-example-shard.firebaseio.com
adlı bir veritabanı örneği için profil oluşturucuyu çalıştırmak üzere aşağıdaki komutu kullanın:
firebase database:profile --instance "my-example-shard"
Her veritabanındaki bağlantıları optimize edin
Her müşterinin bir oturum sırasında birden fazla veritabanına bağlanması gerekiyorsa her veritabanı örneğine yalnızca gerektiği kadar bağlanarak her veritabanı örneğine yapılan eşzamanlı bağlantıların sayısını azaltabilirsiniz.
Daha fazla tavsiye alın
Verilerinizi birden fazla veritabanı örneğine bölme konusunda daha fazla yardıma ihtiyacınız varsa Slack kanalımızdaki veya Stack Overflow'daki Firebase uzmanlarına ulaşın.