开发者如何为React Native选择合适的数据库
译者 | 陈峻
策划 | 云昭
如今,程序员们可以选用多种编程语言,来创建在线平台、网站和应用程序。其中,在编程社区中,广受不同开发背景的人员所推崇的一种流行语言,便是React Native。它是由Facebook的JavaScript工具包所构建,适合为移动平台、而非Web,设计和创建独特的用户界面。目前,React Native已被广泛地运用在采用JavaScript的框架,并为iOS和Android平台构建移动应用的项目中。
可以说,该领域的开发者不但需要了解JavaScript和API服务、而且要能够构建前端的UI,维护跨平台的兼容性、以及整合基础架构与其他应用。下图展示了历年来,时下各种编程语言,在项目中被使用的占比分布。
目前,适合React Native应用的数据库有:Async Storage、SQLite、Realm、以及PouchDB等。下面,我将和大家一起深入讨论各种数据库的特性和优缺点,并最终给出为React Native应用进行选择时的建议。
MMKV存储
由C++开发的MMKV存储具有快速高效的特点,可方便您在React Native应用中快速地保存数据。同时,该数据库非常轻巧。它在Android上仅占50K空间,而在iOS上只有30K。如果被打包的话,其体积会更小。此外,MMKV不但支持redux-persist(持久化),而且允许用户保存任何形式(无论是否加密)的数据。
特征如下:
- 支持加密(安全存储)。
- 支持多实例(将用户数据与全局数据分开)。
- 自定义存储位置。
- 由于一切都是用C++编写的,因此具有高性能。
- 比Async Storage快大约30倍。
- 使用JSI框架,而不是旧的“桥”模式。
- 支持iOS、Android和Web。
- 易于使用React Hooks的API。
Realm数据库
由于可以使用动态映射到完整且专有的数据库引擎,基于SQLite的Realm能够处理各种原生的JavaScript对象,并在保持性能的同时,提供一套简单的API。同时,Realm允许开发者创建各种高级搜索、复杂的数据表示、以及在图表中的事物链接。
Realm在Android中属于轻量级数据库。与下文将讨论的SQLite相比,Realm不但使用的内存更少,而且在读写数据等常见操作上的速度更快。此外,它还具有极其丰富的功能集。
特征如下:
- 由于Realm属于对象存储,因此对象之间的关系可以通过各种“链接”来实现。
- 每个“链接”都能够创建一个与链接到当前对象的“反向链接”映射。
- Realm可以更新其实例版本。
- Realm带有零拷贝(zero-copy)架构,以及延迟加载(lazy-loaded)式的数据访问。
SQLite
作为C语言数据存储库的SQLite,在移动应用程序中,特别适用于离线应用。许多平台都以简便的设置方式,提供了开箱即用的SQLite支持。而作为最著名的免费Android开发数据库之一,它不但具有开源的显著特点,而且可以满足开发人员广泛的项目需求。
特征
- 能够在iOS和Android上提供相同JavaScript API。
- 在各种Java和Native模式下,以及Android中都可以被使用。
- 其简单的回调(callback)和Promises可以被用于连接JavaScript里的SQL事务。
- 可以从应用程序包和沙箱中,导入预填充的SQLite数据库。
- Windows能够像在iOS和Android上一样,支持回调API。
Firebase
Firebase实时数据库是一个由Google支持的应用开发平台,可允许开发人员为iOS、Android和web创建各种应用。而作为一种基于云端的NoSQL数据库,Firebase可以通过提供分析跟踪、报告、应用问题修复、以及市场和产品实验功能(experimentation capabilities)等服务,在用户之间实现实时存储和数据同步。
特征
- 即使应用处于离线状态,数据也能在所有客户端之间实时同步。
- 可以让开发人员更专注于打造出色的用户体验,而无需管理服务器。
- Firebase为您准备好了通用的服务器、API和数据存储,您只需按照实际需求进行修改即可,而不需重新编写。
- 按照云托管数据库的需求,Firebase可以将数据以JSON格式进行存储,并进一步持续同步到每个关联的客户端上。
- 作为基于云服务的数据库,它可被用于管理应用程序的数据,并提供快速的数据结果。
WatermelonDB
在React Native和React的在线项目中,WatermelonDB提供了一种管理用户数据的新方法。它是专为创建复杂的React Native应用而设计的,且十分重视应用的实际性能。简单而言,由于Watermelon的架构与数据库无关,因此开发者可以横跨多个平台使用它,并能达到快速启动软件的效果。此外,作为一个高级数据管理层,Watermelon还可以根据平台的要求,连接到任何React原生的数据库层面上。
特征
- 由于使用延迟加载,Watermelon DB可以只在被请求时才加载数据。据此,应用程序的可扩展性可以得到大幅增强。
- 由于所有的查询都是在其不同的线程上完成的,因此大多数查询只需不到1毫秒的时间。
- 无论后端的数据体量有多大,您都可以立即启动应用程序。
- 它能够与iOS、Android和web相兼容。
- 它使用JavaScript的静态类型检查器,通过Flow的方式进行静态类型转化。
- 它具有快速、异步、多线程和高度缓存等特性,也可与同步引擎协同工作,以保持原生本地数据库与远程数据库的同步。
PouchDB
PouchDB是一个基于Apache CouchDB的开源JavaScript类型的数据库。它针对在浏览器中的各种使用场景进行了优化。PouchDB在浏览器中会使用IndexedDB和WebSQL在本地存储数据,并且持续实现本地和远程数据库的交互。据此,PouchDB可以帮助Web开发人员创建具有离线和在线等效功能的应用。也就是说,它允许应用在离线时,将数据保存在本地,而在应用重新上线后,再与CouchDB和其他兼容的服务器相同步,以确保用户的数据始终为最新。
特征
- 由于PouchDB提供的API在所有浏览器中都是相同的,因此它可以在各种浏览器中被流畅地使用。
- 如果您对编程语言有所了解,那么学习和理解PouchDB并非难事。
- 作为一种轻量级的API,我们可以方便地使用script标签来包含它。
Vasern
Vasern是一种基于链接一致性的键-值存储式React Native数据存储系统。其目标是提供一个开源、且对开发人员友好的端到端数据库系统。而且,由于其数据引擎是从头开始创建的,因此Vasern提供了原生的性能。
特征
- 它通过UTF-8编码来支持各种语言。
- 能够支持字符串、整数、双精度、日期时间、以及引用等基本数据类型。
- 可以通过schema来创建、更新、查询和删除各种记录。
MySQL、MongoDB和DynamoDB
一些小型组织往往会使用MySQL、MongoDB和DynamoDB等服务器端数据库,进行React Native的应用开发。三者的比较如下:
开发人员在选择数据库之前需要考虑什么?
众所周知,在中小型软件运行的过程时,数据往往是被保存在变量之中的。不过,当程序重启时,变量则会因为恢复初始值,而导致数据的丢失。对此,我们需要数据库在能够起到很好的数据存储、保持、以及在程序重启后的持续检索等作用。通常,我们可以在为React Native应用选择数据库之前,考虑如下方面:
- 应确保数据库具有足够的内存,可供软件的执行。
- 选择可以处理复杂数据结构(如整篇文档或对象)的数据库。
- 当用户从离线恢复为在线状态时,应能够通过集成来实现数据库中数据的同步。
- 容易实现应用与数据库的集成。
小结
上述介绍的各种数据库分别有着自己的一组特性和优缺点。因此,在为React Native应用选择合适的数据库时,开发人员应当清楚地了解自己的项目目标和应用需求,通过试用、比较和深入研究,从中选择最符合要求的数据库。
原文链接:https://dzone.com/articles/how-developers-need-to-choose-the-right-database-f
译者介绍
陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验;持续以博文、专题和译文等形式,分享前沿技术与新知;经常以线上、线下等方式,开展信息安全类培训与授课。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341