大数据时代,互联网中每天数以亿计的数据在产生和流转。那么,有用的数据如何被保存下来?如何用于归纳总结?如何用于支撑生产?这就需要大数据存储空间---数据库来完成。
数据库是应用系统中非常重要的一个组成部分,数据库的性能是否高效直接影响到应用系统的性能。在数字化时代,客户对应用系统的交互速度、整体性能的要求越来越高,这就对数据库整体设计提出较高的要求。
所以,数据库设计必须遵循一定的规则,良好的数据库设计与其系统应用设计是相辅相成的。好的数据库设计能够合理利用数据的存储空间、保证数据的完整性、减少数据冗余、方便进行数据库应用系统的开发、以及提高系统的使用性能。
大数据时代的数据库需要满足以下要求:
1.支持高并发
根据实际应用的需要,数据库需要满足大数据量交互需求,估算使用接口压力和数据库并发需求。
2.支持负载均衡
根据实际使用,制定数据库部署架构与负载均衡策略,制定超过支撑能力的快速扩容机制。
3.实现数据读写分享
制定读写分离策略,确定写功能节点和读功能结点,设计读写功能的切换流程,保证数据库功能的正常使用。
4.实现数据库的高可用
利用大数据集群技术、负载均衡策略和容灾计划,确保数据库读写无故障运行。
综上所述,数据库的设计规范是多方面的,其中特别需要注意的有三方面:表设计规范、索引设计规范、SQL语句规范。
一、表设计规范
数据库表是存放数据的地方,遵循一定规律设计的数据库表,才能进行快速有效的数据读取,方便数据管理,提高系统可维护性、可理解性。否则数据存储就会杂乱无章,存储和读取都会非常混乱。
数据库表主要指标项的要求:
• 命名: 库名、表名、字段名均小写,下划线风格
• 引擎: 存储引擎尽量使用 InnoDB
• 字符集:使用 utf8mb4 字符集
• 列数: 建议40个以内
• 必要字段:主键、添加时间、更新时间
数据库表设计的注意事项:
• 尽量不使用外键,如果有外键完整性约束,需要应用程序控制
• 不用保留字,如 DESC、RANGE、MARCH 等
• 把字段定义为 NOT NULL 并且提供默认值
• 如果存储的字符串长度几乎相等,使用 CHAR 定长字符串类型
• 在一些场景下,考虑使用 TIMESTAMP 代替 DATETIME
二、索引设计规范
数据库的索引,是指在一定范围内对数据进行排序,使之能对检索应用做出快速响应。索引是影响数据库应用性能的主要原因之一。
数据库索引设计细节:
索引数:表的索引数建议不要超过6个
索引类型选择
• Normal 普通索引
• Unique 唯一索引
• Full Text 全文索引
• SPATIAL 空间索引
索引方法
• BTREE
• HASH (=”,”IN”和”<=>)
索引原则
• 尽量选择唯一性索引
• 为经常排序、分组、联合操作的字段建立索引
• 区分度底的类型,不宜建立单独索引
• VARCHAR 类型,尽量考虑索引长度,不进行全文建索引
• 联合索引,将区分度更高的字段放在左边
三、SQL语句规范
使用标准化的SQL语言,使数据库的针对性操作更容易,并且学习成本是较低的。使用统一的SQL语言,能极大地减轻维护人员的工作量,也能辅助提高开发人员的开发效率,增加代码的复用性。SQL语句规范设计是数据库性能主要原因之一,同时也是数据安全使用的基础。
SQL语句规范细节要求:
减少面向数据库编程:减少使用自定义函数、存储函数、用户变量
• Select * :在查询中指定所需的列,而不是直接使用“ *”返回所有的列
• ORDER BY:要利用索引的有序性
• JOIN :数据类型必须绝对一致(字段类型、字段长度、字符集、Collection ) 最多五个以内
• Where :
• 索引列是表达式一部分,不能使用索引
• 不要使用属性隐式转换
• 应尽量避免在 WHERE 子句中使用 or 作为连接条件,UNION ALL
• 减少使用 % 开头的模糊查询,可以最左前缀匹配原则
• 减少 != 、not in 操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN, IN,以及某些时候的LIKE
数据库设计是软件应用系统的根基,必须受到高度重视。培养良好的数据库设计习惯,是一个合格软件工程师应该必备的基本素质。