Veritabanı Performansını Optimize Edin

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:

  1. Uygulamanızda izin verilen toplam eşzamanlı, etkin bağlantı sayısını, bunları veritabanı örneklerine bölerek artırın.
  2. Yükü veritabanı örnekleri arasında dengeleyin.
  3. 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.