GÜNCELLEME
O atomik çoklu konumları düzenlemek için şimdi mümkündür. Ayrıntılar için bkz. this blog post.
var mergedUpdate = {};
mergedUpdate[ 'users/' + userId + '/widgets/' + widgetId ] = true;
mergedUpdate[ 'widgets/' + widgetId ] = widgetData;
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/");
ref.update(mergedUpdate);
Bu (değer şu anda X ise, Y'nin olun) işlem verilerini uygulanması, ancak bu parça security rules taşınmış olabilir değildir. Örneğin, aynı anda iki sayaçları güncellemek istiyorsanız, aşağıdaki gibi kuralları ekleyebilirsiniz:
{
"counter1": {
".validate": "newData.val() === (data.val()||0)+1"
},
"counter2"1 {
".validate": "newData.val() === (data.val()||0)+1"
}
}
Şimdi yukarıdaki gibi aynı çoklu yol güncellemesini deneyebilir. En son onları sunucudan okuduğumuzdan beri değerler değiştiyse, girişim başarısız olur. Başarısızlığın doğrulamadan kaynaklanıp kaynaklanmadığını görmek için
if(error.code === 'PERMISSION_DENIED') { ... }
numaralı telefonu kontrol edebilir ve buna göre tekrar deneyebiliriz.
ORİJİNAL SONRASI
Bunu yapmanın tek yolu ortak bir atadan üzerinde işlem çalıştırmaktır. Örneğin,/a/b/c ve/a/x/y'yi güncellemek isterseniz,/a konumunda bir işlem yürütebilir ve her iki değeri de değiştirebilirsiniz. Bu yaklaşımın olumsuz tarafı, işlem içindeki tüm verilerin indirilmesi ve sunucuya geri gönderilmesi gerektiğinden, ağ G/Ç'lerinde pahalı olabileceği yönündedir.
Göz önünde bulundurmak isteyebileceğiniz daha karmaşık ancak potansiyel olarak daha güçlü bir yaklaşım, verilerinizi yeniden yapılandırmaktır, böylece gerçek değerleri depolamak yerine, düzenlemelerin geçmişini depolarsınız. Örneğin, banka bakiyesi bilgilerini saklıyorsanız, para yatırma ve para çekme geçmişi saklayabilirsiniz. O zaman dengeyi almak istediğinde, tüm geçmişi tekrar oynayacak ve son dengeyi hesaplayacaksın.
Bu yaklaşımın güzelliği, atomik güncellemeler yapmanıza izin vermesidir. Örneğin, accountA'dan accountB'ye para aktarıyorsanız, günlüğün sonuna "hesap A'dan accountB N dolara transfer" diyen bir öğe eklersiniz. Tek elemanın atomik bir işlem olduğunu eklemek.
Bu, ortak metin düzenleyicimiz olan Firepad ile yaptığımız yaklaşımdır.
Cevabınız için teşekkür ederiz. Kavramsal olarak güncellemekten ziyade yeni işlemlerin saklanması gibi kavramsal olarak, ama bir sorgu materyalizasyon özelliği varsa bunun sadece performans açısından bakılabilir olduğunu düşünüyorum. Tüm tarihin tekrar oynatılması yavaş olacaktır. –
Bir tane yok (en azından henüz değil), fakat bunun nasıl faydalı olacağını kesinlikle görüyoruz! Şimdilik, istemcideki sorguyu gerçekleştirebilir ve Firebase'de bir "kontrol noktası" na geri yükleyebilirsiniz (bu, Firepad'in nasıl çalıştığını gösterir), veya bir materyalin gerçekleştiği bir Firebase istemcisi olarak çalışan bir node.js veya Java tabanlı sunucuya sahip olabilirsiniz. senin için. –
HI! Thanx, ama ben bunu denedim ve bir hata aldım: "Satır 10: Sol işleneni, || boole olmalıdır." Bir şey mi eksik? Firebase 3.0 kullanıyorum ... –