Mevcut uygulama projelerimden biriyle ilerlemenin en iyi yolunu belirlerken öğrendiklerim.
Eşzamansız Depolama (Yerel Yanıt Verme "yerleşik")
AsyncStorage'ı üretim içi bir uygulama için kullanıyorum. Depolama, cihazda yerel olarak kalır, şifrelenmez (başka bir cevapta belirtildiği gibi), uygulamayı silerseniz kaybolur, ancak cihazınızın yedeklerinin bir parçası olarak kaydedilmeli ve yükseltmeler sırasında devam etmelidir (CodePush aracılığıyla hem yerel yükseltmeler hem de kod yükseltmeleri ).
Sonuç: Yerel depolama; kendi senkronizasyon / yedekleme çözümünüzü sağlarsınız.
SQLite
Üzerinde çalıştığım diğer projeler uygulama depolaması için sqlite3 kullandılar. Bu, aygıta ve aygıttan da iletilebilen sıkıştırılabilir veritabanlarıyla SQL benzeri bir deneyim sunar. Onları bir arka uçla senkronize etme konusunda hiçbir deneyimim olmadı, ancak çeşitli kütüphanelerin var olduğunu hayal ediyorum. SQLite'a bağlanmak için RN kütüphaneleri vardır.
Veriler, veritabanına, tablolara, anahtarlara, dizinlere vb. Sahip geleneksel veritabanı biçiminizde depolanır ve tümü diske ikili biçimde kaydedilir. Verilere doğrudan erişim, komut satırı veya SQLite sürücüleri olan uygulamalar aracılığıyla kullanılabilir.
Sonuç: Yerel depolama; senkronizasyonu ve yedeklemeyi sağlarsınız.
Firebase
Firebase, diğer şeylerin yanı sıra, 1'den n'ye kadar istemciyi senkronize etmek için tasarlanmış bir JSON belge deposuyla (MongoDB gibi) gerçek zamanlı bir noSQL veritabanı sunar. Dokümanlar çevrimdışı kalıcılık hakkında konuşuyor, ancak yalnızca yerel kod için (Swift / Obj-C, Java). Google'ın React Native tarafından kullanılan kendi JavaScript seçeneği ("Web") önbelleğe alınmış bir depolama seçeneği sağlamaz (aşağıdaki 2/18 güncellemesine bakın). Kütüphane, bir web tarayıcısının bağlanacağı varsayımı ile yazılmıştır ve bu nedenle yarı kalıcı bir bağlantı olacaktır. Firebase depolama çağrılarını desteklemek için yerel bir önbellek mekanizması yazabilir veya yerel kütüphaneler ile React Native arasında bir köprü yazabilirsiniz.
Güncelleme 2/2018
O zamandan beriyerel iOS ve Android kütüphanelerine uyumlu bir JavaScript arayüzü sağlayan React Native Firebase'i buldum(Google'ın muhtemelen yapabileceği / yapması gerekeni yapıyor), size React bonusu ile yerel kütüphanelerin tüm güzelliklerini veriyor Yerel destek. Google'ın gerçek zamanlı veritabanının yanında bir JSON belge deposu tanıtmasıyla, Firebase'e oluşturmayı planladığım bazı gerçek zamanlı uygulamalar için ikinci iyi bir görünüm veriyorum.
Gerçek zamanlı veritabanı, web sitesinde düzenleyebileceğiniz ve oldukça basit bir şekilde içe / dışa aktarabileceğiniz JSON benzeri bir ağaç olarak saklanır.
Sonuç: Reat-native-firebase ile RN, Swift ve Java ile aynı faydaları elde eder. [/ update] Ağa bağlı cihazlar için iyi ölçeklendirilir. Düşük kullanım için düşük maliyet. Diğer Google bulut teklifleriyle güzel bir şekilde birleşir. Veriler arayüzlerinden kolayca görülebilir ve düzenlenebilir.
Diyar
Güncelleme 4/2020
MongoDB, Realm'i satın aldı ve MongoDB Stitch ile birleştirmeyi planlıyor (aşağıda tartışıldı). Bu çok heyecan verici görünüyor .
Ayrıca otomajik ağ senkronizasyonu ile gerçek zamanlı bir nesne deposu. Kendilerini "önce cihaz" olarak tanıtıyorlar ve demo video, cihazların düzensiz veya kayıplı ağ bağlantısını nasıl ele aldığını gösteriyor.
Kendi sunucularınızda veya AWS veya Azure gibi bir bulut çözümünde barındırdığınız nesne deposunun ücretsiz bir sürümünü sunarlar. Ayrıca, aygıtla birlikte kalıcı olmayan bellek içi depolar, sunucuyla senkronize olmayan yalnızca aygıt depoları, salt okunur sunucu depoları ve bir veya daha fazla aygıt arasında eşitleme için tam okuma-yazma seçeneği de oluşturabilirsiniz. Firebase'den ayda daha pahalıya mal olan profesyonel ve kurumsal seçeneklere sahipler.
Firebase'in aksine, tüm Realm yetenekleri tıpkı Swift / ObjC / Java (yerel) uygulamalarında olduğu gibi React Native ve Xamarin'de desteklenir.
Verileriniz kodunuzdaki nesnelere bağlıdır. Tanımlanmış nesneler oldukları için bir şemanız var ve kod kontrolü için sürüm kontrolü şarttır. Realm'in sağladığı GUI araçlarıyla doğrudan erişim mümkündür. Cihazdaki veri dosyaları platformlar arası uyumludur.
Sonuç: Önce cihaz, ücretsiz ve ücretli planlarla isteğe bağlı senkronizasyon. React Native'de desteklenen tüm özellikler. Yatay ölçeklendirme Firebase'den daha pahalıdır.
iCloud
Dürüst olmak gerekirse, bununla çok fazla oyun oynamadım, ancak yakın gelecekte yapacağım.
CloudKit kullanan yerel bir uygulamanız varsa, uygulamanızın kapsayıcılarına bir web uygulamasından (veya bizim durumumuzda React Native) bağlanmak için CloudKit JS'yi kullanabilirsiniz. Bu senaryoda, muhtemelen yerel bir iOS uygulamanız ve React Native Android uygulamanız olur.
Realm gibi, bu da verileri yerel olarak depolar ve mümkün olduğunda iCloud ile senkronize eder. Uygulamanız için genel mağazalar ve her müşteri için özel mağazalar vardır. Müşteriler bazı mağazalarını veya nesnelerini diğer kullanıcılarla paylaşmayı bile seçebilirler.
Ham verilere erişmenin ne kadar kolay olduğunu bilmiyorum; şemalar Apple'ın sitesinde kurulabilir.
Sonuç: Apple hedefli uygulamalar için idealdir.
Couchbase
Büyük isim, arkasında büyük şirketler var. Standart destek maliyetlerine sahip bir Topluluk Sürümü ve İşletme Sürümü vardır.
Sitelerinde React Native'a bir şeyler bağladıkları için bir eğitici var. Ben de bu konuda çok zaman harcadım, ama fonksiyonellik açısından Realm için uygun bir alternatif gibi görünüyor. Uygulamanızın veya oluşturduğunuz API'ların dışında verilerinize ulaşmanın ne kadar kolay olduğunu bilmiyorum.
[Düzenle: Couchbase ve CouchDB hakkında konuşan eski bir bağlantı bulundu ve CouchDB de dikkate alınması gereken başka bir seçenek olabilir. Bu ikisi tarihsel olarak birbiriyle ilişkilidir ancak şu anda tamamen farklı ürünlerdir. Bu karşılaştırmaya bakın .]
Sonuç: Realm ile benzer özelliklere sahip görünüyor. Yalnızca cihaz veya senkronize edilebilir. Denemem gerek.
MongoDB
4/2020 Güncellemesi
Mongo, Realm'i satın aldı ve MongoDB Stitch'i (aşağıda tartışıldı) Realm (yukarıda tartışıldı) ile birleştirmeyi planlıyor .
Yerel olarak AsyncStorage kullanan uygulamanın bir parçası için bu sunucu tarafını kullanıyorum. Her şeyin JSON nesneleri olarak depolanmasını seviyorum, bu da istemci cihazlara iletimi çok basit hale getiriyor. Benim kullanım durumumda, bir TV rehberi veri akış yukarı sağlayıcısı ve istemci aygıtlarım arasında bir önbellek olarak kullanılır.
Verilerin şema gibi sert bir yapısı yoktur, bu nedenle her nesne kolayca aranabilir, filtrelenebilir vb. Bir "belge" olarak saklanır. Benzer JSON nesneleri ek (ancak farklı) özniteliklere veya alt nesnelere sahip olabilir. Nesnelerinizi / verilerinizi nasıl yapılandırdığınız konusunda çok fazla esneklik.
Sunucu senkronizasyonu özellikleri için herhangi bir istemci denemedim ya da gömülü kullanmadım. React MongoDB için yerel kod mevcut.
Sonuç: Yalnızca yerel NoSQL çözümü, Realm veya Firebase gibi belirgin bir senkronizasyon seçeneği yoktur.
Güncelleme 2/2019
MongoDB'de Stitch adında bir "ürün" (veya hizmet) vardır. İstemciler (web tarayıcıları ve telefonlar anlamında) doğrudan MongoDB ile konuşmaması gerektiğinden (sunucunuzdaki kodla yapılır), uygulamalarınızı aralarından yararlanabileceğiniz sunucusuz bir ön uç oluşturdular. barındırılan çözüm (Atlas). Dokümanları, olası bir senkronizasyon seçeneği olduğunu gösteriyor.
Aralık 2018'deki bu yazıda, örnek bir uygulamada React Native, Stitch ve MongoDB'nin kullanılması, belgedeki diğer örneklerle ( https://www.mongodb.com/blog/post/building-ios-and-android-apps -mongodb-dikiş-tepki-doğal-sdk ile ).
Twilio Senkronizasyonu
Senkronizasyon için başka bir NoSQL seçeneği Twilio's Sync'dir. Sitelerinden: "Senkronizasyon, herhangi bir arka uç altyapısını işlemek zorunda kalmadan, herhangi bir sayıda cihazdaki durumu gerçek zamanlı olarak yönetmenizi sağlar."
Bunu, özellikle her iki ekiple konuştuktan sonra, yukarıda bahsedilen projelerden biri için Firebase'e bir alternatif olarak gördüm. Diğer iletişim araçlarını da seviyorum ve bunları basit bir web uygulamasından mesaj güncellemeleri için kullandım.
Bunu ilk yazdığımdan beri Realm ile biraz zaman geçirdim. Firebase'e benzer şekilde uygulama ve sunucu arasındaki verileri senkronize etmek için bir API yazmak zorunda olmadığımı seviyorum. Sunucusuz işlevler de yazmak zorunda olduğum arka uç kodu miktarını sınırlayarak bu iki ile gerçekten yararlı görünüyor.
MongoDB veri deposunun esnekliğini seviyorum, bu yüzden web tabanlı ve bağlantı gerektiren diğer uygulamaların sunucu tarafı için seçimim haline geliyor.
MongoDB için çok basit, ölçeklenebilir bir RESTful API oluşturan RESTHeart'ı buldum . JSON nesnelerini RESTHeart'a okuyan ve yazan bir React (Native) bileşeni oluşturmak çok zor olmamalı, bu da onları MongoDB'ye / MongoDB'den / 'den geçirir.
[Düzenle] Verilerin nasıl saklandığı hakkında bilgi ekledim. Bazen, verileri düzeltip test etmeniz gerekiyorsa, geliştirme ve test sırasında ne kadar işte olabileceğinizi bilmek önemlidir.
Düzenlemeler 2/2019 Geçen yıl (2018) yüksek eşzamanlı bir proje tasarlarken bu seçeneklerden birkaçını denedim . Bazıları belgelerinde sert ve yumuşak eşzamanlılık sınırlarından bahsediyorlar (Altebf'teki her iki ekiple yapılan tartışmalara göre, Twilio'nun çarpılabilecek yumuşak bir sınır olduğuna inanıyorum, Firebase'in 10.000 bağlantıda zor bir sınırı vardı).
On binlerce ila yüz binlerce kullanıcı için bir uygulama tasarlıyorsanız, veri arka ucunu buna göre ölçeklendirmeye hazır olun.