当前位置:嗨网首页>书籍在线阅读

02-数据持久性的重要性

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.1 数据持久性的重要性

“有时候,优雅的实现只是一个函数。不是一种方法、一个类或者一个框架,只是一个函数。”

——John Carmack

如今的应用程序的数据量都非常大。正如很多人所说的,数据是一种新的能源。数据库支持的服务无处不在,从社交游戏到云存储,再到电子商务,医疗保健,等等。所有这些服务都需要正确地存储和检索数据。它们存储的数据必须易于检索,并且要保证一致性和耐用性。

数据库是构建以数据为中心的应用程序的最佳解决方案,并为满足用户的需求提供了坚实的基础。在使用Rust构建与数据库有关的任何内容之前,我们需要了解一些基础知识。通常,数据库是数据表的集合,数据表是数据组织的单位。

164.png 注意

组织成表的数据仅适用于关系数据库。其他数据库,例如NoSQL和基于图形的数据库,使用更灵活的文档模型来存储和组织数据。

数据被组成称为数据表的逻辑实体。数据表通常是现实世界某些实体的表示。这些实体可以具有各种属性以代替这些数据表中的列,也可以与其他实体有关联。一个数据表中的列可以引用另一个列。使用称为结构化查询语言(Structured Query Language,SQL)的特定DSL执行任何对数据库的访问。SQL查询还允许你使用查询子句(例如JOIN)在多个数据表之间传递查询指令。这些都是基础知识,用户与数据支持的应用程序交互常见模式是CRUD模式,它是新增(Create)、读取(Read)、更新(Update)及删除(Delete)的缩写。在大多数情况下,这是用户通过应用程序在数据库上执行的常规操作。

SQL是一种在数据库上执行事务的声明性方法。事务是对数据库的一组修改,必须以原子方式发生或不发生,以防止中途出现任何异常。在应用程序中编写数据库事务的简单方法是构造原始的SQL查询。但是,有一种更好的方法可以做到这一点,它被称为对象关系映射(Object Relational Mapping,ORM)。这是一种使用原生语言抽象和类型访问数据库的技术,它们几乎与SQL语法和语义一一对应。语言为构造SQL提供了更高级的库,允许用户使用原生语言编写查询,然后将其转换为原始的SQL查询。在传统的面向对象语言中,你的对象就是SQL对象。这些库被称为对象关系映射器。主流语言中存在很多这样的库,例如Java的Hibernate、Ruby的Active Record及Python的SQLAlchemy的。使用ORM可以降低在使用原始SQL查询时发生错误的可能性。

但是ORM还无法使用数据库模型将自己完全映射到语言的对象模型中。因此,ORM库应该尝试限制它们为与数据库交互提供的抽象数量,并将一部分留给原始的SQL查询处理。

Rust生态系统提供了许多高质量的解决方案来管理和构建持久性应用程序。我们将在后文介绍其中的几个。