Đây là những gì tôi đã học được khi xác định cách tốt nhất để tiến lên với một vài dự án ứng dụng hiện tại của mình.
Lưu trữ Async ("tích hợp" để React Native)
Tôi sử dụng AsyncStorage cho một ứng dụng đang sản xuất. Dung lượng lưu trữ cục bộ trên thiết bị, không được mã hóa (như được đề cập trong câu trả lời khác), sẽ biến mất nếu bạn xóa ứng dụng, nhưng nên được lưu như một phần của bản sao lưu và duy trì trong quá trình nâng cấp (cả nâng cấp gốc ala TestFlight và nâng cấp mã qua CodePush ).
Kết luận: Lưu trữ cục bộ; bạn cung cấp giải pháp đồng bộ / sao lưu của riêng bạn.
SQLite
Các dự án khác mà tôi đã làm việc đã sử dụng sqlite3 để lưu trữ ứng dụng. Điều này mang lại cho bạn trải nghiệm giống như SQL, với cơ sở dữ liệu có thể nén cũng có thể được truyền đến và từ thiết bị. Tôi chưa có bất kỳ kinh nghiệm nào về việc đồng bộ hóa chúng với mặt sau, nhưng tôi tưởng tượng các thư viện khác nhau tồn tại. Có thư viện RN để kết nối với SQLite.
Dữ liệu được lưu trữ ở định dạng cơ sở dữ liệu truyền thống của bạn với cơ sở dữ liệu, bảng, khóa, chỉ mục, v.v ... tất cả được lưu vào đĩa ở định dạng nhị phân. Truy cập trực tiếp vào dữ liệu có sẵn thông qua dòng lệnh hoặc ứng dụng có trình điều khiển SQLite.
Kết luận: Lưu trữ cục bộ; bạn cung cấp đồng bộ hóa và sao lưu.
Căn cứ hỏa lực
Firebase cung cấp, trong số những thứ khác, cơ sở dữ liệu noQuery thời gian thực cùng với kho lưu trữ tài liệu JSON (như MongoDB) có nghĩa là để giữ cho từ 1 đến n số lượng máy khách được đồng bộ hóa. Các tài liệu nói về sự kiên trì ngoại tuyến, nhưng chỉ dành cho mã gốc (Swift / Obj-C, Java). Tùy chọn JavaScript riêng của Google ("Web") được React Native sử dụng không cung cấp tùy chọn lưu trữ được lưu trong bộ nhớ cache (xem bản cập nhật 2/18 bên dưới). Thư viện được viết với giả định rằng một trình duyệt web sẽ được kết nối, và do đó sẽ có một kết nối bán liên tục. Bạn có thể có thể viết một cơ chế lưu trữ cục bộ để bổ sung các cuộc gọi lưu trữ Firebase hoặc bạn có thể viết một cầu nối giữa các thư viện gốc và React Native.
Cập nhật 2/2018
Tôi đã tìm thấy React Native Firebase cung cấp giao diện JavaScript tương thích với thư viện iOS và Android gốc (làm những gì Google có thể / nên làm), mang đến cho bạn tất cả những ưu điểm của thư viện gốc với phần thưởng của React Hỗ trợ bản địa. Với việc giới thiệu kho lưu trữ tài liệu JSON của Google bên cạnh cơ sở dữ liệu thời gian thực, tôi sẽ mang đến cho Firebase một cái nhìn tốt thứ hai về một số ứng dụng thời gian thực mà tôi dự định xây dựng.
Cơ sở dữ liệu thời gian thực được lưu trữ dưới dạng cây giống như JSON mà bạn có thể chỉnh sửa trên trang web và nhập / xuất khá đơn giản.
Kết luận: Với phản ứng gốc tự nhiên, RN nhận được lợi ích tương tự như Swift và Java. [/ update] Cân tốt cho các thiết bị kết nối mạng. Chi phí thấp cho việc sử dụng thấp. Kết hợp độc đáo với các dịch vụ đám mây khác của Google. Dữ liệu dễ dàng nhìn thấy và có thể chỉnh sửa từ giao diện của họ.
Vương quốc
Cập nhật 4/2020
MongoDB đã mua lại Realm và đang lên kế hoạch kết hợp nó với MongoDB Stitch (thảo luận bên dưới). Điều này có vẻ rất thú vị .
Cũng là một cửa hàng đối tượng thời gian thực với đồng bộ hóa mạng tự động. Họ tự quảng cáo là "thiết bị đầu tiên" và video demo cho thấy cách các thiết bị xử lý kết nối mạng rời rạc hoặc mất mát.
Họ cung cấp một phiên bản miễn phí của cửa hàng đối tượng mà bạn lưu trữ trên máy chủ của riêng bạn hoặc trong một giải pháp đám mây như AWS hoặc Azure. Bạn cũng có thể tạo các cửa hàng trong bộ nhớ không tồn tại với thiết bị, các cửa hàng chỉ dành cho thiết bị không đồng bộ hóa với máy chủ, lưu trữ máy chủ chỉ đọc và tùy chọn đọc ghi đầy đủ để đồng bộ hóa trên một hoặc nhiều thiết bị. Họ có các tùy chọn chuyên nghiệp và doanh nghiệp có chi phí cao hơn mỗi tháng so với Firebase.
Không giống như Firebase, tất cả các khả năng của Realm đều được hỗ trợ trong React Native và Xamarin, giống như trong các ứng dụng Swift / ObjC / Java (bản địa).
Dữ liệu của bạn được gắn với các đối tượng trong mã của bạn. Vì chúng là các đối tượng được xác định, nên bạn có một lược đồ và kiểm soát phiên bản là điều bắt buộc đối với sự tỉnh táo của mã. Truy cập trực tiếp có sẵn thông qua các công cụ GUI Realm cung cấp. Các tệp dữ liệu trên thiết bị tương thích đa nền tảng.
Kết luận: Thiết bị đầu tiên, đồng bộ hóa tùy chọn với các gói miễn phí và trả phí. Tất cả các tính năng được hỗ trợ trong React Native. Mở rộng quy mô ngang đắt hơn Firebase.
iCloud
Tôi thực sự đã không chơi nhiều với cái này, nhưng sẽ làm như vậy trong tương lai gần.
Nếu bạn có một ứng dụng gốc sử dụng CloudKit, bạn có thể sử dụng CloudKit JS để kết nối với các thùng chứa ứng dụng của bạn từ một ứng dụng web (hoặc, trong trường hợp của chúng tôi, React Native). Trong trường hợp này, có lẽ bạn sẽ có ứng dụng iOS gốc và ứng dụng React Native Android.
Giống như Realm, điều này lưu trữ dữ liệu cục bộ và đồng bộ hóa nó với iCloud khi có thể. Có các cửa hàng công cộng cho ứng dụng của bạn và các cửa hàng tư nhân cho mỗi khách hàng. Khách hàng thậm chí có thể chọn chia sẻ một số cửa hàng hoặc đối tượng của họ với người dùng khác.
Tôi không biết việc truy cập dữ liệu thô dễ dàng như thế nào; các lược đồ có thể được thiết lập trên trang web của Apple.
Kết luận: Tuyệt vời cho các ứng dụng nhắm mục tiêu của Apple.
Couchbase
Tên lớn, rất nhiều công ty lớn đằng sau nó. Có phiên bản Cộng đồng và Phiên bản doanh nghiệp với chi phí hỗ trợ tiêu chuẩn.
Họ đã có một hướng dẫn trên trang web của mình để kết nối mọi thứ với React Native. Tôi cũng không dành nhiều thời gian cho cái này, nhưng nó có vẻ là một sự thay thế khả thi cho Realm về chức năng. Tôi không biết việc truy cập dữ liệu của bạn bên ngoài ứng dụng của bạn dễ dàng như thế nào hoặc bất kỳ API nào bạn xây dựng.
[Chỉnh sửa: Tìm thấy một liên kết cũ hơn nói về Couchbase và CouchDB và CouchDB có thể là một lựa chọn khác để xem xét. Hai là liên quan đến lịch sử nhưng hiện tại sản phẩm hoàn toàn khác nhau. Xem so sánh này .]
Kết luận: Có vẻ như có khả năng tương tự như Vương quốc. Có thể chỉ dành cho thiết bị hoặc được đồng bộ hóa. Tôi cần phải thử nó.
MongoDB
Cập nhật 4/2020
Mongo mua lại Realm và có kế hoạch kết hợp MongoDB Stitch (thảo luận bên dưới) với Realm (đã thảo luận ở trên).
Tôi đang sử dụng phía máy chủ này cho một phần của ứng dụng sử dụng AsyncStorage cục bộ. Tôi thích rằng mọi thứ được lưu trữ dưới dạng các đối tượng JSON, khiến việc truyền đến các thiết bị khách rất đơn giản. Trong trường hợp sử dụng của tôi, nó được sử dụng làm bộ đệm giữa nhà cung cấp dữ liệu hướng dẫn truyền hình và các thiết bị khách của tôi.
Không có cấu trúc cứng cho dữ liệu, như lược đồ, vì vậy mọi đối tượng được lưu trữ dưới dạng "tài liệu" có thể dễ dàng tìm kiếm, có thể lọc, v.v. Các đối tượng JSON tương tự có thể có các thuộc tính hoặc đối tượng con bổ sung (nhưng khác nhau), cho phép rất linh hoạt trong cách bạn cấu trúc các đối tượng / dữ liệu của bạn.
Tôi chưa thử bất kỳ tính năng đồng bộ hóa máy khách nào với máy chủ, tôi cũng chưa sử dụng nó được nhúng. Phản ứng mã gốc cho MongoDB không tồn tại.
Kết luận: Giải pháp NoQuery cục bộ duy nhất, không có tùy chọn đồng bộ rõ ràng như Realm hoặc Firebase.
Cập nhật 2/2019
MongoDB có một "sản phẩm" (hoặc dịch vụ) được gọi là Stitch. Vì các máy khách (theo nghĩa của trình duyệt web và điện thoại) không nên nói chuyện trực tiếp với MongoDB (được thực hiện bằng mã trên máy chủ của bạn), nên chúng đã tạo một giao diện không có máy chủ mà ứng dụng của bạn có thể giao tiếp, nên bạn nên chọn sử dụng chúng giải pháp lưu trữ (Atlas). Tài liệu của họ làm cho có vẻ như có một tùy chọn đồng bộ hóa có thể.
Bài viết này từ tháng 12 năm 2018 thảo luận về việc sử dụng React Native, Stitch và MongoDB trong một ứng dụng mẫu, với các mẫu khác được liên kết trong tài liệu ( https://www.mongodb.com/blog/post/building-ios-and-android-apps -with-the-mongodb-Stitch-Reac -igen-sdk ).
Đồng bộ hóa Twilio
Một tùy chọn khác để đồng bộ hóa là Đồng bộ hóa của Twilio. Từ trang web của họ: "Đồng bộ hóa cho phép bạn quản lý trạng thái trên bất kỳ số lượng thiết bị nào theo thời gian thực mà không phải xử lý bất kỳ cơ sở hạ tầng phụ trợ nào."
Tôi đã xem đây là một giải pháp thay thế cho Firebase cho một trong những dự án đã nói ở trên, đặc biệt là sau khi nói chuyện với cả hai đội. Tôi cũng thích các công cụ liên lạc khác của họ và đã sử dụng chúng để nhắn tin cập nhật từ một ứng dụng web đơn giản.
[Chỉnh sửa] Tôi đã dành một chút thời gian với Realm kể từ khi tôi viết bài này. Tôi thích cách tôi không phải viết API để đồng bộ hóa dữ liệu giữa ứng dụng và máy chủ, tương tự như Firebase. Các chức năng không có máy chủ cũng có vẻ rất hữu ích với hai chức năng này, hạn chế số lượng mã phụ trợ tôi phải viết.
Tôi yêu sự linh hoạt của kho dữ liệu MongoDB, vì vậy đó đang trở thành lựa chọn của tôi cho phía máy chủ của các ứng dụng dựa trên web và các ứng dụng cần kết nối khác.
Tôi đã tìm thấy RESTHeart , nó tạo ra một API RESTful rất đơn giản, có thể mở rộng cho MongoDB. Không quá khó để xây dựng một thành phần React (Bản địa) để đọc và ghi các đối tượng JSON vào RESTHeart, từ đó chuyển chúng đến / từ MongoDB.
[Chỉnh sửa] Tôi đã thêm thông tin về cách lưu trữ dữ liệu. Đôi khi, điều quan trọng là phải biết bạn có thể làm được bao nhiêu công việc trong quá trình phát triển và thử nghiệm nếu bạn phải điều chỉnh và kiểm tra dữ liệu.
Chỉnh sửa 2/2019 Tôi đã thử nghiệm một vài trong số các tùy chọn này khi thiết kế một dự án đồng thời cao trong năm qua (2018). Một số trong số họ đề cập đến các giới hạn đồng thời cứng và mềm trong tài liệu của họ (Firebase có một kết nối cứng với 10.000 kết nối, tôi tin, trong khi Twilio là giới hạn mềm có thể bị phá vỡ, theo các cuộc thảo luận với cả hai nhóm tại AltConf).
Nếu bạn đang thiết kế một ứng dụng cho hàng chục đến hàng trăm nghìn người dùng, hãy chuẩn bị để mở rộng quy mô phụ trợ dữ liệu cho phù hợp.