文档章节

Schema设计

a
 aall
发布于 2017/02/28 13:26
字数 950
阅读 2
收藏 0

Schema:表的模式;
 
设计数据的表,索引,以及表和表的关系

  1. 在数据建模的基础上将关系模型转为数据库表
  2. 满足业务模型需要基础上根据数据库和应用特点优化表结构

 
关系模型图:

 

 


Schema关系到应用程序功能与性能

  • 满足业务功能需求
  • 同性能密切相关
  • 数据库扩展性
  • 满足周边需求(统计,迁移等)

 
关系型数据库修改Schema经常是高危操作
     Schema设计要体现一定的前瞻性
 
完全由开发者主导的Schema设计

  • 着眼于实现当前功能
  • 完全基于功能的设计可能存在一些隐患
    •    不合理的表结构或索引设计造成性能问题
    •    没有合理评估到数据量的增长造成空间紧张而且难以维护
    •    需求频繁修改造成表结构经常变更
    •    业务重大调整导致数据经常需要重构订正

 
基于性能的表设计

  • 根据查询需要设计好索引
  • 根据核心查询需求, 适当调整表结构
  • 基于一些特殊业务需求,调整实现方式

 
索引

  • 正确使用索引
  • 更新尽可能使用主键或唯一索引
  • 主键尽可能使用自增ID字段
  • 核心查询使用覆盖索引
    •           用户登录需要根据用户名返回密码用于验证
    •           create index idx_uname_passwd on tb_user (username,passwd);
    •           建立联合索引避免回表取数据

 
 
设计举例
 
1 反范式,冗余必要字段


2 拆分大字段

 


3 避免过多字段或过长行
 
 
4 分页查询:

 
 
 5  热点读数据特殊处理


 
 
 6 热点写数据特殊处理

 

 


7 准实时统计

 


实时统计改进1--触发器实时统计

 


实时统计改进2-缓存实时统计

 



实时统计改进3-最大自增ID获取总数

 

 
8  可扩展性设计

 


9 分区表与数据淘汰
range分区

 



list分区

 


hash分区


 
10 满足周边需求


统计和后台需求


11 自动更新时间戳

 
Schema设计与前瞻性

  • 基于历史经验教训,预防和解决同类问题
  • 把折腾DBA够呛的索引Schema改造的原因记录并分析总结

例子:
业务为了用户信息加密做了大改造

  •  数据库结果大量改动,增加了加密字段,验证策略表,所有表重新订正数据等等
  •  是否所有用到用户信息管理的应用都要去上线就用密文?

 


 总结

 

  •  schema设计关系性能
  •  反范式,冗余必要字段
  •  拆分大字段
  •  避免过多字段或过长字段
  •  分页查询
  •  热点读数据特殊处理:置顶表与普通表分开
  •  热点写数据特殊处理:
    • 微博普通用户发消息,则写入关注他的人的消息列表中;微博大V发消息,则关注他的人都去读他的消息列表;
  •  准实时统计:
    • 定时统计表,更据上次更新时间统计全表中增量sum值,每分钟更新统计表;
  •  实时统计:
    • 触发器实时统计,在用户插入时,更新统计表;
    • 缓存实时统计,应用将用户新增写在内存缓存中,业务平时从缓存中读,缓存失效,从数据库做一次查询,接着写在缓存;
  • 分区表与数据淘汰
  • 满足周边需求:
    • 如后台统计任务而增加特殊索引,
    • 为数据迁移或统计增加时间戳
  • 自动更新时间戳
  • schema设计与前瞻性

© 著作权归作者所有

共有 人打赏支持
上一篇: 归并排序
下一篇: Debug基础
a
粉丝 0
博文 11
码字总数 5981
作品 0
东城
私信 提问
ERDesigner NG

Mogwai ERDesigner NG是一个实体关系建模工具类似于ERWin。它设计成让数据库建模变得尽可能简易并为整个开发过程提供支持,从数据库设计到模式 (schema)和代码生成。此外ERDesigner还提供一个...

匿名
2008/09/24
6.8K
0
Groovy在Spring中的简单使用

Groovy 是 “用于 Java 虚拟机的一种敏捷的动态语言”,它 “以 Java 的强大功能 为基础,同时又包含由 Python、Ruby 和 Smalltalk 等语言带来的强大附加功能 ”,例如动态类 型转换、闭包和...

訫犫
2016/01/26
179
1
XML Schema 简介

XML Schema 与DTD(DTD语法概述)一样,也是对一类XML文档进行约束、确定其结构,元素、属性、及数据类型。及XML文档中所使用的元素,实体,元素的属性,元素与实体之间的关系的约束。XML S...

小步2013
2008/03/29
0
0
Redis 容量及使用规划

本文转自 http://timyang.net/data/redis-capacity/ 在使用Redis过程中,我们发现了不少Redis不同于Memcached,也不同于MySQL的特征。 (本文主要讨论Redis未启用VM支持情况) 1. Schema MySQL...

红薯
2011/04/03
1K
1
star schema[转帖]

数据仓库这么多年来发展的成果,我认为恐怕最重要的要算star schema了,可以说它是整个数据仓库的基石。 star schema主要的思想在于将我们关心的数据和用于描述数据的属性分隔开来。实际的数...

刘小兵2014
2011/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
27分钟前
0
0
OSChina 周日乱弹 —— 没时间 没头发 但有钱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @开源中国总经办主任 :分享齐一的单曲《这个年纪》 《这个年纪》- 齐一 手机党少年们想听歌,请使劲儿戳(这里) @肿肿卷 :我真的可以睡一天...

小小编辑
今天
30
4
Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
3
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部