Uygulamanızda Firebase Gerçek Zamanlı Veritabanı performansını iyileştirmenin birkaç farklı yolu vardır. Gerçek Zamanlı Veritabanı performansınızı optimize etmek için neler yapabileceğinizi öğrenmek için, farklı Gerçek Zamanlı Veritabanı izleme araçları aracılığıyla veri toplayın ve ardından uygulamanızda veya Gerçek Zamanlı Veritabanı kullanımınızda buna göre değişiklikler yapın.
Gerçek Zamanlı Veritabanı performansını izleyin
İhtiyaç duyduğunuz ayrıntı düzeyine bağlı olarak, birkaç farklı araç aracılığıyla Gerçek Zamanlı Veritabanınızın performansı hakkında veri toplayabilirsiniz:
- Üst düzey genel bakış: Dizine eklenmemiş sorguların bir listesi ve okuma/yazma işlemlerine gerçek zamanlı genel bakış için profil oluşturucu aracını kullanın.
- Faturalandırılmış kullanım tahmini: Faturalandırılmış kullanımınızı ve üst düzey performans ölçümlerinizi görmek için Firebase konsolunda bulunan kullanım ölçümlerini kullanın.
- Ayrıntılı inceleme: Veritabanınızın zaman içindeki performansına daha ayrıntılı bir bakış için Cloud Monitoring'i kullanın.
Performansı metrik bazında iyileştirin
Verileri topladıktan sonra geliştirmek istediğiniz performans alanına göre aşağıdaki en iyi uygulamaları ve stratejileri keşfedin.
Bir bakışta performans iyileştirme stratejileri | ||
---|---|---|
Metrik | Tanım | En iyi uygulamalar |
Yük/Kullanım | Herhangi bir zamanda istekleri işlemek için veritabanınızın kapasitesinin ne kadarının kullanıldığını optimize edin (**Load** veya **io/database_load** ölçümlerinde yansıtılır). | Veri yapınızı optimize edin Veritabanlarında verileri parçalama Dinleyici verimliliğini artırın Sorgu tabanlı kurallarla indirmeleri sınırlayın Bağlantıları optimize edin |
Aktif bağlantılar | 200.000 bağlantı sınırının altında kalmak için veritabanınıza yapılan eşzamanlı, etkin bağlantıların sayısını dengeleyin. | Veritabanlarında verileri parçalama Yeni bağlantıları azaltın |
Giden bant genişliği | Veritabanınızdan indirilenlerin sayısı istediğinizden daha yüksek görünüyorsa okuma işlemlerinizin verimliliğini artırabilir ve şifreleme yükünü azaltabilirsiniz. | Bağlantıları optimize edin Veri yapınızı optimize edin Sorgu tabanlı kurallarla indirmeleri sınırlayın SSL oturumlarını yeniden kullanma Dinleyici verimliliğini artırın Verilere erişimi kısıtlama |
Depolamak | Kullanılmayan verileri depolamadığınızdan emin olun veya kotanın altında kalmak için depolanan verilerinizi diğer veritabanları ve/veya Firebase ürünleri arasında dengeleyin. | Kullanılmayan verileri temizleyin Veri yapınızı optimize edin Veritabanlarında verileri parçalama Firebase için Cloud Storage'ı kullanın |
Bağlantıları optimize edin
GET
ve PUT
gibi RESTful istekler, bağlantı kısa süreli olsa da yine de bağlantı gerektirir. Bu sık, kısa ömürlü bağlantılar aslında veritabanınıza yapılan gerçek zamanlı, etkin bağlantılardan önemli ölçüde daha fazla bağlantı maliyetine, veritabanı yüküne ve giden bant genişliğine neden olabilir.
Mümkün olduğunda uygulamanızın platformu için REST API yerine yerel SDK'ları kullanın. SDK'lar açık bağlantıları sürdürerek SSL şifreleme maliyetlerini ve REST API'ye eklenebilecek veritabanı yükünü azaltır.
REST API kullanıyorsanız, açık bağlantıyı sürdürmek için HTTP canlı tutmayı kullanmayı veya sunucu tarafından gönderilen etkinlikleri kullanmayı düşünün; bu, SSL anlaşmalarından kaynaklanan maliyetleri azaltabilir.
Verileri birden fazla veritabanında parçalayın
Verilerinizi birden çok Gerçek Zamanlı Veritabanı örneğine bölmek (veritabanı parçalama olarak da bilinir), üç avantaj sunar:
- Uygulamanızda izin verilen toplam eşzamanlı, etkin bağlantı sayısını, bunları veritabanı örneklerine bölerek artırın.
- Yükü veritabanı örnekleri arasında dengeleyin.
- Yalnızca ayrı veri kümelerine erişmesi gereken bağımsız kullanıcı gruplarınız varsa daha yüksek aktarım hızı ve daha düşük gecikme süresi için farklı veritabanı örnekleri kullanın.
Blaze fiyatlandırma planını kullanıyorsanız aynı Firebase projesi içinde birden fazla veritabanı örneği oluşturarak veritabanı örneklerinde ortak bir kullanıcı kimlik doğrulama yönteminden yararlanabilirsiniz.
Verilerin nasıl ve ne zaman parçalanacağı hakkında daha fazla bilgi edinin.
Verimli veri yapıları oluşturun
Gerçek Zamanlı Veritabanı, verileri yolun yanı sıra bir yolun alt düğümlerinden de aldığından, veri yapınızı mümkün olduğunca düz tutmak mantıklıdır. Bu şekilde, istemcilere gereksiz verileri indirmeden, ihtiyacınız olan verileri seçerek alabilirsiniz.
Verilerinizi yapılandırırken özellikle yazma ve silme işlemlerini göz önünde bulundurun. Örneğin, binlerce yapraklı yolların silinmesi potansiyel olarak pahalıdır. Bunları birden çok alt ağaç ve düğüm başına daha az yaprak içeren yollara bölmek, silme işlemlerini hızlandırabilir.
Ek olarak, her yazma işlemi toplam veritabanı kullanımınızın %0,1'ini alabilir. Verilerinizi, SDK'lardaki update()
yöntemleri veya RESTful PATCH
istekleri aracılığıyla çok yollu güncellemeler şeklinde toplu yazma işlemlerini tek bir işlemde gerçekleştirmenize olanak tanıyacak şekilde yapılandırın.
Veri yapınızı optimize etmek ve performansı artırmak için veri yapılarına yönelik en iyi uygulamaları izleyin.
Yetkisiz erişimi önleyin
Gerçek Zamanlı Veritabanı Güvenliği Kuralları ile veritabanınızda yetkisiz işlemleri önleyin. Örneğin, kuralların kullanılması, kötü niyetli bir kullanıcının veritabanınızın tamamını tekrar tekrar indirdiği bir senaryoyu önleyebilir.
Firebase Gerçek Zamanlı Veritabanı Kurallarını kullanma hakkında daha fazla bilgi edinin.
İndirmeleri sınırlamak için sorgu tabanlı kurallar kullanın
Gerçek Zamanlı Veritabanı Güvenliği Kuralları, veritabanınızdaki verilere erişimi kısıtlar ancak aynı zamanda okuma işlemleri yoluyla döndürülen veriler üzerinde de sınırlama görevi görebilir. query.
query.limitToFirst
gibi ifadelerde sorgular yalnızca kuralın sınırladığı verileri alır.
Örneğin, aşağıdaki kural okuma erişimini öncelik sırasına göre bir sorgunun yalnızca ilk 1000 sonucuyla sınırlandırır:
messages: {
".read": "query.orderByKey &&
query.limitToFirst <= 1000"
}
// Example query:
db.ref("messages").limitToFirst(1000)
.orderByKey("value")
Gerçek Zamanlı Veritabanı Güvenliği Kuralları hakkında daha fazla bilgi edinin.
Dizin sorguları
Verilerinizi dizine eklemek, uygulamanızın çalıştırdığı her sorgu için kullandığınız toplam bant genişliğini azaltır.
SSL oturumlarını yeniden kullanma
TLS oturum biletleri düzenleyerek devam ettirilen bağlantılarda SSL şifreleme ek yükünü azaltın. Bu, özellikle veritabanına sık ve güvenli bağlantılara ihtiyacınız varsa faydalıdır.
Dinleyici verimliliğini artırın
Senkronize ettikleri veri miktarını sınırlamak için dinleyicilerinizi yolun mümkün olduğunca aşağısına yerleştirin. Dinleyicileriniz almalarını istediğiniz verilere yakın olmalıdır. Veritabanı kökünü dinlemeyin, çünkü bu tüm veritabanınızın indirilmesine neden olur.
Dinleme operasyonlarınızın döndürdüğü verileri sınırlandırmak için sorgular ekleyin ve yalnızca veri güncellemelerini indiren dinleyicileri kullanın (örneğin, once()
) yerine on()
). Gerçekten veri güncellemesi gerektirmeyen eylemler için .once()
işlevini ayırın. Ayrıca, en iyi performansı elde etmek için sorgularınızı mümkün olduğunda orderByKey()
kullanarak sıralayın. orderByChild()
ile sıralama 6-8 kat daha yavaş olabilir ve büyük veri kümeleri için orderByValue()
ile sıralama çok yavaş olabilir çünkü kalıcılık katmanından tüm konumun okunmasını gerektirir.
Dinleyicileri de dinamik olarak eklediğinizden ve artık gerekli olmadıklarında kaldırdığınızdan emin olun.
Kullanılmayan verileri temizleyin
Veritabanınızdaki kullanılmayan veya yinelenen verileri periyodik olarak kaldırın. Verilerinizi manuel olarak incelemek veya düzenli aralıklarla bir Google Bulut Depolama paketine yedeklemek için yedeklemeler çalıştırabilirsiniz. Ayrıca depolanan verileri Firebase için Cloud Storage aracılığıyla barındırmayı da düşünün.
Güncelleyebileceğiniz ölçeklenebilir kod gönderin
IoT cihazlarında yerleşik uygulamalar, kolayca güncelleyebileceğiniz ölçeklenebilir kod içermelidir. Kullanım örneklerini kapsamlı bir şekilde test ettiğinizden, kullanıcı tabanınızı katlanarak büyütebileceğiniz senaryoları hesaba kattığınızdan ve güncellemeleri kodunuza dağıtma yeteneğini geliştirdiğinizden emin olun. Örneğin verilerinizi parçalamaya karar verirseniz, ileride yapmanız gerekebilecek büyük değişiklikleri dikkatlice değerlendirin.