Veritabanı Performansını Optimize Etme

Uygulamanızdaki Firebase Realtime Databaseperformansı iyileştirmenin birkaç farklı yolu vardır. Realtime DatabasePerformansınızı optimize etmek için neler yapabileceğinizi öğrenmek üzere farklı Realtime Databaseizleme araçlarıyla veri toplayın, ardından uygulamanızda veya Realtime Databasekullanımınızda buna göre değişiklikler yapın.

Realtime Database performansını izleme

İhtiyacınız olan ayrıntı düzeyine bağlı olarak, Realtime Database'ün performansıyla ilgili verileri birkaç farklı araçla toplayabilirsiniz:

  • Genel bakış: Dizine eklenmemiş sorguların listesi ve okuma/yazma işlemlerine gerçek zamanlı genel bakış için profil oluşturma aracını kullanın.
  • Faturalandırılan kullanım tahmini: Faturalandırılan kullanımınızı ve üst düzey performans metriklerini görmek için Firebase konsolunda bulunan kullanım metriklerini kullanın.
  • Ayrıntılı ayrıntılı inceleme: Veritabanının zaman içindeki performansını daha ayrıntılı bir şekilde incelemek için Cloud Monitoring simgesini kullanın.

Metriğe göre performansı iyileştirme

Veri topladıktan sonra, iyileştirmek istediğiniz performans alanına göre aşağıdaki en iyi uygulamaları ve stratejileri inceleyin.

Performans iyileştirme stratejilerine genel bakış
Metrik Açıklama En iyi uygulamalar
Yük/Kullanım Belirli bir zamanda isteklerin işlenmesi için veritabanınızın kapasitesinin ne kadarının kullanıldığını optimize edin (bu durum **Yük** veya **io/database_load** metriklerini yansıtır). Veri yapınızı optimize edin
Verileri veritabanları arasında bölme
Dinleyici verimliliğini artırın
İndirme işlemlerini sorgu tabanlı kurallarla sınırlayın
Bağlantıları optimize edin
Etkin bağlantı sayısı 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. Verileri veritabanları arasında parçalama
Yeni bağlantıları azaltın
Giden bant genişliği Veritabanınızdan yapılan indirmelerin istediğinizden daha yüksek olduğunu düşünüyorsanız okuma işlemlerinizin verimliliğini artırabilir ve şifreleme ek yükünü azaltabilirsiniz. Bağlantıları optimize edin
Veri yapınızı optimize edin
Sorguya dayalı kurallarla indirmeleri sınırlayın
SSL oturumlarını yeniden kullanın
Dinleyici verimliliğini artırın
Verilere erişimi kısıtlayın
Depolama Kullanılmayan veri 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 dengeli bir şekilde dağıtın. Kullanılmayan verileri temizleme
Veri yapınızı optimize edin
Verileri veritabanları arasında bölme
Cloud Storage for Firebase'i kullanın

Bağlantıları optimize etme

GET ve PUT gibi RESTful istekler, kısa süreli olsa bile bağlantı gerektirir. Bu sık ve kısa ömürlü bağlantılar aslında veritabanınıza gerçek zamanlı, etkin bağlantılara kıyasla önemli ölçüde daha fazla bağlantı maliyeti, veritabanı yükü ve giden bant genişliği ekleyebilir.

Mümkün olduğunda REST API yerine uygulamanızın platformuna yönelik yerel SDK'ları kullanın. SDK'lar açık bağlantıları sürdürerek REST API ile birlikte ortaya çıkabilecek SSL şifreleme maliyetlerini ve veritabanı yükünü azaltır.

REST API'yi kullanıyorsanız açık bir bağlantıyı korumak için HTTP keep-alive kullanmayı veya SSL el sıkışmalarından kaynaklanan maliyetleri azaltabilecek sunucu tarafından gönderilen etkinlikleri kullanmayı düşünün.

Verileri birden fazla veritabanı arasında bölme

Verilerinizi birden fazla Realtime Database örneğine bölme (veya veritabanı bölme) işleminin üç avantajı vardır:

  1. Uygulamanızda izin verilen toplam eş zamanlı ve etkin bağlantı sayısını veritabanı örnekleri arasında bölerek artırın.
  2. Veritabanı örnekleri arasında yükü dengeleyebilirsiniz.
  3. Yalnızca ayrı veri kümelerine erişmesi gereken bağımsız kullanıcı gruplarınız varsa daha yüksek veri akışı ve daha düşük gecikme süresi için farklı veritabanı örnekleri kullanın.

Blaze fiyatlandırma planını kullanıyorsanız aynı Firebase projesinde birden fazla veritabanı örneği oluşturabilir ve veritabanı örnekleri arasında ortak bir kullanıcı kimlik doğrulama yönteminden yararlanabilirsiniz.

Verileri nasıl ve ne zaman bölebileceğiniz hakkında daha fazla bilgi edinin.

Verimli veri yapıları oluşturma

Realtime Database, hem yolun alt düğümlerinden hem de yoldan veri aldığı için veri yapınızı mümkün olduğunca düz tutmanız önerilir. Bu sayede, istemcilere gereksiz verileri indirmeden ihtiyacınız olan verileri seçerek alabilirsiniz.

Özellikle, verilerinizi yapılandırırken yazma ve silme işlemlerini göz önünde bulundurun. Örneğin, binlerce yaprağı olan yolların silinmesi pahalı olabilir. Bunları birden çok alt ağaç ve düğüm başına daha az yaprak bulunan yollara ayırmak, silme işlemlerini hızlandırabilir.

Ayrıca her yazma işlemi, toplam veritabanı kullanımınızın% 0,1'ini kullanabilir. Verilerinizi, SDK'lardaki update() yöntemleri veya RESTful PATCH istekleri aracılığıyla çok yollu güncellemeler olarak tek bir işlemde toplu yazmanıza olanak tanıyacak şekilde yapılandırın.

Veri yapınızı optimize etmek ve performansı artırmak için veri yapılarıyla ilgili en iyi uygulamaları izleyin.

Yetkisiz erişimi engelleyin

Realtime Database Security Rules ile veritabanınızda yetkisiz işlemleri önleyin. Örneğin, kuralları kullanmak kötü amaçlı bir kullanıcının veritabanınızın tamamını tekrar tekrar indirdiği bir senaryoyu önleyebilir.

Firebase Realtime Database Kurallarını kullanma hakkında daha fazla bilgi edinin.

İndirmeleri sınırlamak için sorgu tabanlı kurallar kullanma

Realtime Database Security Rules, veritabanınızdaki verilere erişimi kısıtlar ancak okuma işlemleri aracılığıyla döndürülen veriler için de sınır teşkil edebilir. query.limitToFirst gibi query. ifadeleri tarafından tanımlanan sorgu tabanlı kuralları kullandığınızda sorgular yalnızca kuralla sınırlı verileri alır.

Örneğin, aşağıdaki kural, okuma erişimini yalnızca bir sorgunun öncelik sırasına göre sıralanan ilk 1.000 sonucuyla sınırlandırır:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

Realtime Database Security Rules 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 kullan

TLS oturum biletleri yayınlayarak devam eden bağlantılardaki SSL şifreleme ek maliyetlerini azaltın. Bu, özellikle veritabanına sık sık güvenli bağlantılar kurmanız gerekiyorsa kullanışlıdır.

Dinleyici verimliliğini artırma

Dinleyicilerinizin senkronize ettikleri veri miktarını sınırlamak için dinleyicilerinizi mümkün olduğunca yolun sonuna yerleştirin. Dinleyicileriniz, elde etmelerini istediğiniz verilere yakın olmalıdır. Veritabanı kökünde dinleme yaparsanız veritabanınızın tamamı indirilir.

Dinleme işlemlerinizin döndürdüğü verileri sınırlamak için sorgu ekleyin ve yalnızca verilerdeki güncellemeleri indiren dinleyiciler kullanın (ör. once() yerine on()). .once() değerini, gerçekten veri güncellemesi gerektirmeyen işlemler için kullanın. Ayrıca, en iyi performans için mümkün olduğunda sorgularınızı orderByKey() kullanarak sıralayın. orderByChild() ile sıralama işlemi 6-8 kat daha yavaş olabilir. orderByValue() ile sıralama, kalıcılık katmanından konumun tamamının okunmasını gerektirdiğinden büyük veri kümelerinde çok yavaş olabilir.

Dinleyicileri dinamik olarak eklediğinizden ve artık gerekli olmadığında kaldırdığınızdan emin olun.

Kullanılmayan verileri temizleme

Veritabanınıza eklediğiniz ancak kullanmadığınız veya yinelenen verileri düzenli olarak kaldırın. Verilerinizi manuel olarak incelemek için yedekleme çalıştırabilir veya düzenli olarak bir Google Cloud Storage paketine yedekleyebilirsiniz. Depolanan verileri Cloud Storage for Firebase üzerinden barındırmayı da düşünebilirsiniz.

Güncelleyebileceğiniz ölçeklenebilir kod gönderin

IoT cihazlarına yerleştirilmiş uygulamalar, kolayca güncelleyebileceğiniz ölçeklenebilir kod içermelidir. Kullanım alanlarını ayrıntılı bir şekilde test ettiğinizden, kullanıcı tabanınızı katlanarak büyütmenizin mümkün olduğu senaryoları hesaba kattığınızdan ve kodunuza güncelleme dağıtma özelliğini eklediğinizden emin olun. Örneğin, verilerinizi bölme kararı alırsanız ileride yapmanız gerekebilecek önemli değişiklikleri dikkatlice düşünün.