Schema设计

 
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设计与前瞻性
 
 

schema设计的更多相关文章

  1. 数据库schema设计与优化

    原文地址 1. 前言 对于数据库而言,在日常开发中我们主要的关注点有两块,一个是schema的结构设计,另一个就是索引的优化,这两块是影响我们最终系统结构和性能的关键部分,自然也是我们花费精力最多的部 ...

  2. Solr:Schema设计

    本文已挪至  http://www.zhoujingen.cn/blog/8546.html Solr将数据以结构化的方式存入系统中,存储的过程中可以对数据建立索引,这个结构的定义就是通过schema ...

  3. BizTalk开发系列(十二) Schema设计之Group与Order

    开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...

  4. 第 9 章 MySQL数据库Schema设计的性能优化

    前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就已经产生了的,后期的优化很多时候所能够带来的改善都只 ...

  5. 6.4 Schema 设计对系统的性能影响

    前面两节中,我们已经分析了在一个数据库应用系统的软环境中应用系统的架构实现和系统中与数据库交互的SQL 语句对系统性能的影响.在这一节我们再分析一下系统的数据模型设计实现对系统的性能影响,更通俗一点就 ...

  6. MySql(九):MySQL性能调优——Schema设计的性能优化

    一.高效的模型设计 先了解下数据库设计的三大范式 第一范式:要求有主键,并且要求每一个字段原子性不可再分 第二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖 第三范式:所有非主键字段和主键字段 ...

  7. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  8. 树形结构的数据库表Schema设计-基于左右值编码

    树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的 ...

  9. 实战:考虑性能--Solr索引的schema设计

    从 high level 的角度来看,schema.xml 结果如下,这个例子虽然不是一个真实的XML,但是简洁明了的传达了shema的概念. <schema> <types> ...

随机推荐

  1. Win7系统安装MySQL5.5.21图解

    Win7系统安装MySQL5.5.21图解 大家都知道MySQL是一款中.小型关系型数据库管理系统,很具有实用性,对于我们学习很多技术都有帮助,前几天我分别装了SQL Server 2008和Orac ...

  2. 二维数组的动态分配(new)、初始化(memset)和撤销(delete)

    来自http://blog.csdn.net/maverick1990/article/details/22829135 一维数组 动态分配,int *array = new int[10] 初始化, ...

  3. 12小时制时间&&24小时制时间

    今天在获取时间的时候发现,插入到数据库中的时间,其中下午的时间直接显示01,02的样子...查了下资料发现了端倪, java.text.SimpleDateFormat f=new java.text ...

  4. linux删除大量文件

    1.建立一个空目录 mkdir -p /tmp/rsync_blank 2.确立需要清空的目标目录 /data/web/vip/htdocs/tuan 3.使用rsync同步删除(注意目录后面的“/” ...

  5. Codeforces Round #362 (Div. 2) B 模拟

    B. Barnicle time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  6. docker 集群 kubernetes 1.8 构建

    1.环境说明:操作系统:CentOS7Kubernetes 版本:v1.8.3Docker 版本:v17.06-ce master  192.168.10.220  etcd  kube-apiser ...

  7. LESS CSS使用方法 , CSS也能跟JS一样玩

    本文转自  http://blog.csdn.net/xuyonghong1122/article/details/51986472 在使用CSS的时候,总会有这个想法 这个属性值老是重复写好烦 这个 ...

  8. (一) Spring基础概述

    1.历史 第一阶段:xml配置 在Spring1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件分布放到不同配置文件中,需要频繁的在开发的类和配置文 ...

  9. 一些汇编中的 trick

    1. PC 总是指向下一条将要被执行的指令,而不是指向正在被执行的指令,这是有道理的,因为执行指令不是一个 atom 过程,而是分成了好多步骤,在执行指令的过程中 cpu 完全有可能将下一条将要执行的 ...

  10. [区别]APPlication,Session,Cookie,ViewState和Cache

    原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewS ...