“ 木桶水量取决于最短的那块木板 ” — 数据库设计、优化与大批量数据处理 张志翔 中国科学技术大学 - 瑞士弗里堡大学 信息物理联合实验室
本次培训介绍的内容 数据库设计 需求分析 E-R 图 表和字段的设计 选择键和索引 数据完整性设计 数据库优化 优化数据库结构 优化查询语句 大批量数据处理 NoSQL 介绍 2015/7/14 PHP & Web2.0 | Page 2
关系型数据库与 SQL 关系型数据库 RDBMS 就是由二维表及其之间的联系组 成的一个数据组织。 SQL(Structured Query Language) 结构化查询语言由 IBM 公司 1981 年推出,是用于存取数据以及查询、更 新和管理关系数据库系统的语言。 SQL 语言包含 4 个部分: 数据定义语言 (DDL) ,例如: CREATE 、 DROP 、 ALTER 等语句。 数据操作语言 (DML) ,例如: INSERT (插入)、 UPDATE (修改)、 DELETE (删除)语句。 数据查询语言 (DQL) ,例如: SELECT 语句。 数据控制语言 (DCL) ,例如: GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 等语句。 2015/7/14 PHP & Web2.0 | Page 3
数据库设计 数据库设计 (Database Design) 是指对于一个给定的应 用环境,构造最优的数据库模式,建立数据库及其应 用系统,使之能够有效地存储数据,满足各种用户的 应用需求(信息要求和处理要求)。 需求分析阶段:综合各个用户的应用需求 概念设计阶段:形成独立于机器特点,独立于各个 DBMS 产品的概念模式 (E-R 图 ) 逻辑设计阶段:首先将 E-R 图转换成具体的数据库产品 支持的数据模型,如关系模型,形成数据库逻辑模式; 然后根据用户处理的要求、安全性的考虑,在基本表的 基础上再建立必要的视图 (View) 物理设计阶段:根据 DBMS 特点和处理的需要,进行物 理存储安排,建立索引 2015/7/14 PHP & Web2.0 | Page 4
数据库设计 - 需求分析 根据用户需求抽象出实体 (Entity) ,明确实体所具有的属性 (Attribute) ,理解各实体之间的联系 (Relationship) 。 了解输入输出需求以设计表结构、报表、查询和视图。 实例 - 简单网络书签系统: 需求:用户收藏不同的网址重新命名并加上标签形成自己的书签 实体:网址 (Url) 、用户 (User) 、书签 (Bookmark) 、标签 (Tag) 属性: Url: url_id 、 url 、 url_hash User: user_id 、 username 、 Bookmark: bm_id 、 bm_title 、 tags Tag: tag_id 、 tag_name 联系:上述实体两两之间都存在联系 2015/7/14 PHP & Web2.0 | Page 5
数据库设计 -E-R 图 E-R 图也称实体 - 联系图 (Entity Relationship Diagram) ,提供 了表示实体类型、属性和联系的方法,用来描述现实世界的概 念模型。 传统 E-R 图:矩形代表着实体性,椭圆代表着实体的属性,菱 形代表实体间的关系。下图为不包含 tag 实体的示例: 2015/7/14 PHP & Web2.0 | Page 6 User Url save user_id username url_id url url_hash own has Bookmark bm_idbm_titletags
数据库设计 - 表和字段的设计 标准化和规范化:数据的标准化有助于消除数据库中 的数据冗余。 第三范式 Third Normal Form ( 3NF ) 通常被认为在性能、扩展性和数据完整性方面达到了 最好平衡 第三范式 数据驱动:常用属性与非常用属性分离、读取数据与 查询数据分离 选择数字类型和文本类型尽量充足,也不要太大 便于查询的临时表与计数字段、自动计时字段等 2015/7/14 PHP & Web2.0 | Page 7
数据库设计 - 选择键和索引 键是唯一性的索引 为实体属性表建立自增长的主键 为关联字段创建外键 索引是从数据库中获取数据的最高效方式之一。 95% 的数据库性能问题都可以采用索引技术得到解决。 为组合查询建立多字段索引 不要索引 memo/note 字段,不要索引大型字段(有很多字 符),这样作会让索引占用太多的存储空间。 不要索引常用的小型表 2015/7/14 PHP & Web2.0 | Page 8
数据库设计 - 数据完整性设计 外键关联: 浅谈 MySQL 外键 浅谈 MySQL 外键 触发器关联 教你快速掌握 MySQL 数据库中触发器的应用 教你快速掌握 MySQL 数据库中触发器的应用 2015/7/14 PHP & Web2.0 | Page 9
数据库优化 数据库优化的目标是加快查询速度、避免磁盘 I/O 瓶 颈、减少 CPU 利用率和减少资源竞争。 MySQL 手册第七章(重点:优化数据库结构、优 化查询语句) 数据库优化设计方案 数据库优化设计方案 2015/7/14 PHP & Web2.0 | Page 10
大批量数据处理 插入大量数据前禁用索引 高效的 LOAD DATA INFILE 语句 需要复杂计算的数据交给高级语言或脚本来做 2015/7/14 PHP & Web2.0 | Page 11
非关系型数据库 NoSQL NoSQL 是非关系型数据存储的广义定义, NoSQL 数据 存储不需要固定的表结构,通常也不存在连接操作。 随着互联网 web2.0 网站的兴起,传统的关系数据库在 应付 web2.0 网站,特别是超大规模和高并发的 SNS 类 型的 web2.0 纯动态网站已经显得力不从心 : High performance - 对数据库高并发读写的需求 Huge Storage - 对海量数据的高效率存储和访问的需求 High Scalability && High Availability- 对数据库的高可扩展性 和高可用性的需求 Google 的 BigTable 、 Amazon 的 Dynamo 、 Apache Cassandra (Facebook 开发, Twitter 、 Digg 使用 ) Cassandra 了解 NoSQL 的必读资料 了解 NoSQL 的必读资料 NoSQL 数据库笔谈 NoSQL 数据库笔谈 2015/7/14 PHP & Web2.0 | Page 12
2015/7/14 PHP & Web2.0 | Page 13
Thanks! zxzhang5 AT mail.ustc.edu.cn BBS id: howdy webclub ftp: ftp:// zxzhang5 AT mail.ustc.edu.cn 用户名、密码 : webclub