嵌入式系统架构浅谈 数据库系统(二) - 数据库控制功能

169 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 数据库的控制功能

数据库系统运行的基本工作单位是事务,事务具备以下特性:

  1. 原子性:事务是数据库的逻辑工作单位,所有操作在数据库中要么全做,要么全部做。
  2. 一致性:事务的执行使数据库从一个一致性状态变成另一个一致性状态。
  3. 隔离性:各个事务之间的执行不能互相干扰。
  4. 持续性:一旦事务提交,对数据库的改变是永久的,即使系统出现故障时也是如此。

事务通常以BEGIN TRANSACTION语句开始,以COMMIT或ROLLBACK语句结束。COMMIT称为事务提交,表示事务执行结束,把事务对数据库的修改写入磁盘。ROLLBACK称为事务回滚,表示事务执行不保存结束,即事务对数据库的修改不写入磁盘。

1.1 并发控制

在多个用户系统中,多个事务可能同时对同一个数据进行操作,则称为并发操作。

1.1.1 并发操作的问题

并发操作带来的主要问题是:

  1. 丢失更新:T1事务的提交结果破坏了T2事务提交的结果,T2修改丢失。
  2. 读过时数据:事务T1读取某一数据,事务T2读取并修改了同一数据后,T1再次读取该数据,造成连续读取两次的结果不一致。
  3. 读脏数据:事务T1修改某一数据,事务T2读取同一数据,而T1突然撤销操作,导致T2读取的数据就是不正确的数据。

1.1.2 解决

  1. 常用的解决方法是加锁。封锁协议有简单的,复杂的。其中简单加锁方式对所有的读写操作都加锁。在对效率要求不高情况下,比较方便。复杂方式,如可以读写用不同的锁提高效率,有兴趣可自行查找资料。加锁注重粒度的大小,封锁粒度大则并发性低,但开销小;粒度小则并发性高,同时开销大。需综合考虑选取适当的封锁粒度。
  2. 在嵌入式产品中,并发操作较少,可采用其他方式避免并发操作。例如将事务操作压入队列,按顺序进行处理等。
  3. 程序线性处理,不使用并发操作,则无需对事务添加保护措施。

1.2 备份与恢复技术

嵌入式产品与硬件相关,极其容易出现硬件问题导致数据丢失现象。或者更换设备需进行数据库迁移。

1.2.1 数据备份

  1. 定期将数据库备份到另一个位置。(1)从一个磁盘复制到另一个磁盘保存;(2)定期将数据库上传到服务器;
  2. 日志文件。记录对数据库的任何操作,并将日志文件结果保存在独立的文件中。根据日志内容记录的操作,再次顺序执行即可恢复最新数据库。

2. 数据库性能

2.1 sql的性能优化

大部分数据库效率的问题都是由于sql语句编写不善引起的,所以sql优化十分重要。为了编写更好的sql语句,不仅应按照规范来编写,而且还要进行多次的性能测试,不断调整。

2.2 查询优化

  1. 把数据、日志、索引放在不同的存储设备上,增加硬件读取速度,减少同时访问硬件的可能。
  2. 分割表,减少表的尺寸。
  3. 建立索引,优化索引,限制查询结果的数据量。
  4. 注意使用 DISTINCT 和 UNION,它会使得查询变慢。
  5. 在 IN 后面值的列表中,根据出现的频率,从高频率到低频率依次排放。
  6. 不要在一句话里多次使用相同的函数,浪费资源,将结果放在变量里再调用。

等等,关于sql优化的方法太多,网上也有不少资料,各位可以自行查找资料,这里转一篇较为全面的文章: sql优化的N种方法_持续更新_王会举的博客-CSDN博客_sql优化