gpt4 book ai didi

android - 使用 React Native 时,我有哪些存储数据的选项? (iOS 和安卓)

转载 作者:行者123 更新时间:2023-12-01 16:28:18 25 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

2年前关闭。



Improve this question




我还是 React Native 世界的新手,通常在移动/原生世界也是如此,我发现文档在数据持久性方面有点缺乏。

我有哪些在 React Native 中存储数据的选项以及每种类型的含义?例如,我看到有本地存储和异步存储,但后来我也看到了 Realm 之类的东西,我很困惑所有这些如何与外部数据库一起工作。

我特别想知道:

  • 数据持久化有哪些不同的选项?
  • 对于每个,持久性的限制是什么(即,数据何时不再可用)?例如:关闭应用程序、重启手机等时
  • 对于每个,在 iOS 和 Android 中实现之间是否存在差异(除了一般设置)?
  • 与离线访问数据的选项相比如何? (或者通常如何处理离线访问?)
  • 还有什么我应该记住的注意事项吗?

  • 谢谢你的帮助!

    最佳答案

    这是我在确定推进我当前的几个应用程序项目的最佳方式时学到的东西。
    异步存储 (以前“内置”到 React Native,现在自行移动)
    我将 AsyncStorage 用于生产中的应用程序。存储保持在设备本地,未加密(如另一个答案中所述),如果您删除应用程序就会消失,但应作为设备备份的一部分保存并在升级期间保持不变( native 升级 ala TestFlight 和通过 CodePush 的代码升级)。
    结论:本地存储;您提供自己的同步/备份解决方案。
    SQLite
    我参与过的其他项目使用 sqlite3 进行应用程序存储。这为您提供了类似于 SQL 的体验,可压缩的数据库也可以在设备之间传输。我没有将它们同步到后端的任何经验,但我认为存在各种库。有用于连接到 SQLite 的 RN 库。
    数据以传统数据库格式存储,数据库、表、键、索引等都以二进制格式保存到磁盘。可以通过命令行或具有 SQLite 驱动程序的应用程序直接访问数据。
    结论:本地存储;您提供同步和备份。
    Firebase
    Firebase 提供实时 noSQL 数据库以及 JSON 文档存储(如 MongoDB),用于保持 1 到 n 个客户端同步。文档讨论了离线持久性,但仅适用于 native 代码(Swift/Obj-C、Java)。 React Native 使用的 Google 自己的 JavaScript 选项(“Web”)不提供缓存存储选项(请参阅下面的 2/18 更新)。该库是在假设 Web 浏览器将要连接的情况下编写的,因此将存在半持久连接。您可能会编写一个本地缓存机制来补充 Firebase 存储调用,或者您可以编写 native 库和 React Native 之间的桥梁。
    2018 年 2 月更新
    我已经找到了 React Native Firebase它为原生 iOS 和 Android 库提供了一个兼容的 JavaScript 接口(interface)(做 Google 可能/应该做的事情),为您提供原生库的所有好处以及 React Native 支持。随着 Google 在实时数据库旁边引入了 JSON 文档存储,我对 Firebase 重新审视了我计划构建的一些实时应用程序。
    实时数据库存储为类似 JSON 的树,您可以在网站上对其进行编辑并非常简单地导入/导出。
    结论:使用 react-native-firebase,RN 获得了与 Swift 和 Java 相同的好处。 [/update] 适用于联网设备。低利用率的低成本。与其他 Google 云产品完美结合。数据很容易从他们的界面中看到和编辑。
    境界
    2020 年 4 月更新
    MongoDB 已收购 Realm 并计划将其与 MongoDB Stitch(下文讨论)合并。 This looks very exciting .
    更新 9/2020
    使用过 Realm 与 Stitch:
    Stitch API 本质上允许 JS 应用程序(React Native 或 Web)直接与 Mongo 数据库对话,而不是通过您自己构建的 API 服务器。
    Realm 旨在在进行更改时同步数据库的各个部分。
    两者的结合会让人有些困惑。以前称为 Stitch API 的仍然像传统的 Mongo 查询和更新调用一样工作,而较新的 Realm 内容附加到代码中的对象并全部自行处理同步......主要是。我仍在通过正确的方式在一个使用 SwiftUI 的项目中做事情,所以它有点跑题了。但仍然充满希望和整洁。

    也是具有自动网络同步功能的实时对象存储。他们自诩为“设备优先”,演示视频展示了设备如何处理零星或有损网络连接。
    他们提供免费版本的对象存储,您可以将其托管在自己的服务器或 AWS 或 Azure 等云解决方案中。您还可以创建不与设备保持同步的内存存储、不与服务器同步的仅设备存储、只读服务器存储以及用于跨一台或多台设备同步的完整读写选项。他们有专业和企业选项,每月的预付费用比 Firebase 高。
    与 Firebase 不同,React Native 和 Xamarin 支持所有 Realm 功能,就像它们在 Swift/ObjC/Java( native )应用程序中一样。
    您的数据与代码中的对象相关联。因为它们是已定义的对象,所以您确实有一个架构,并且版本控制是代码完整性的必要条件。通过 Realm 提供的 GUI 工具可以直接访问。设备上的数据文件是跨平台兼容的。
    结论:设备优先,可选与免费和付费计划同步。 React Native 支持的所有功能。横向扩展比 Firebase 更昂贵。
    iCloud
    老实说,我还没有玩过很多游戏,但在不久的将来会这样做。
    如果您有使用 CloudKit 的 native 应用程序,则可以使用 CloudKit JS 从 Web 应用程序(或在我们的示例中为 React Native)连接到您应用程序的容器。在这种情况下,您可能有一个原生 iOS 应用程序和一个 React Native Android 应用程序。
    与 Realm 一样,它在本地存储数据并在可能的情况下将其同步到 iCloud。您的应用程序有公共(public)商店,每个客户都有私有(private)商店。客户甚至可以选择与其他用户共享他们的一些商店或物品。
    我不知道访问原始数据有多容易;可以在 Apple 的网站上设置架构。
    结论:非常适合面向 Apple 的应用程序。
    沙发底座
    大牌,背后有很多大公司。有标准支持费用的社区版和企业版。
    他们在他们的网站上有一个教程,用于将东西连接到 React Native。我也没有在这个上花太多时间,但就功能而言,它看起来是 Realm 的可行替代品。我不知道在您的应用程序或您构建的任何 API 之外获取数据有多容易。
    [编辑:找到了一个讨论 Couchbase 和 CouchDB 的旧链接,CouchDB 可能是另一个需要考虑的选择。两者在历史上是相关的,但目前是完全不同的产品。见 this comparison .]
    结论:看起来具有与 Realm 相似的功能。可以仅限设备或同步。我需要试一试。
    MongoDB
    2020 年 4 月更新
    Mongo 收购了 Realm 和 plans to combine MongoDB Stitch (下面讨论)与 Realm(上面讨论)。

    我将此服务器端用于本地使用 AsyncStorage 的应用程序的一部分。我喜欢一切都存储为 JSON 对象,这使得到客户端设备的传输非常简单。在我的用例中,它用作电视指南数据的上游提供商和我的客户端设备之间的缓存。
    数据没有硬结构,比如模式,所以每个对象都存储为一个“文档”,可以轻松搜索、过滤等。类似的 JSON 对象可以有额外的(但不同的)属性或子对象,允许在如何构建对象/数据方面具有很大的灵活性。
    我没有尝试任何客户端到服务器同步功能,也没有使用它嵌入。 MongoDB 的 React Native 代码确实存在。
    结论:仅限本地的 NoSQL 解决方案,没有像 Realm 或 Firebase 那样明显的同步选项。
    2019 年 2 月更新
    MongoDB 有一个名为 Stitch 的“产品”(或服务)。由于客户端(在 Web 浏览器和电话的意义上)不应该直接与 MongoDB 对话(这是由服务器上的代码完成的),因此他们创建了一个无服务器前端,您的应用程序可以与之交互,如果您选择使用他们的托管解决方案 (Atlas)。他们的文档表明存在可能的同步选项。
    2018 年 12 月的这篇文章讨论了在示例应用程序中使用 React Native、Stitch 和 MongoDB,文档中链接了其他示例 (https://www.mongodb.com/blog/post/building-ios-and-android-apps-with-the-mongodb-stitch-react-native-sdk)。
    Twilio 同步
    另一个用于同步的 NoSQL 选项是 Twilio 的 Sync。从他们的网站:
    “同步让您可以大规模实时管理任意数量的设备的状态,而无需处理任何后端基础设施。”
    对于上述项目之一,我将其视为 Firebase 的替代方案,尤其是在与两个团队交谈之后。我也喜欢他们的其他通信工具,并使用它们从一个简单的网络应用程序发送短信更新。

    [编辑] 自从我最初写这篇文章以来,我已经花了一些时间在 Realm 上。我喜欢我不必编写 API 来同步应用程序和服务器之间的数据,类似于 Firebase。无服务器功能看起来对这两个功能也很有帮助,限制了我必须编写的后端代码量。
    我喜欢 MongoDB 数据存储的灵活性,因此它正在成为基于 Web 和其他需要连接的应用程序的服务器端的选择。
    我找到了 RESTHeart ,它为 MongoDB 创建了一个非常简单、可扩展的 RESTful API。构建一个 React (Native) 组件来读取和写入 JSON 对象到 RESTHeart,然后将它们传递到/从 MongoDB 应该不会太难。

    [编辑] 我添加了有关如何存储数据的信息。有时,如果您必须调整和测试数据,那么了解在开发和测试期间可能需要进行多少工作是很重要的。

    编辑 2/2019 去年(2018 年)设计高并发项目时,我尝试了其中的几个选项。他们中的一些人在他们的文档中提到了硬并发限制和软并发限制(根据与 AltConf 两个团队的讨论,我相信 Firebase 的硬限制是 10,000 个连接,而 Twilio 是一个可以被突破的软限制)。
    如果您正在为数万到数十万用户设计应用程序,请准备好相应地扩展数据后端。

    关于android - 使用 React Native 时,我有哪些存储数据的选项? (iOS 和安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44376002/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com