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