文档章节

Schema设计

a
 aall
发布于 2017/02/28 13:26
字数 950
阅读 2
收藏 0
点赞 0
评论 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设计与前瞻性

© 著作权归作者所有

共有 人打赏支持
a
粉丝 0
博文 11
码字总数 5981
作品 0
东城
ERDesigner NG

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

匿名
2008/09/24
6.8K
0
Redis 容量及使用规划

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

红薯
2011/04/03
1K
1
Groovy在Spring中的简单使用

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

訫犫
2016/01/26
179
1
star schema[转帖]

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

刘小兵2014
2011/07/29
0
0
网易这样用sys schema优雅提升MySQL易用性

本文详细地介绍了MySQL 5.7新引入的sys schema。首先,本文概要地介绍了sys schema的作用和定位;其次,分别介绍了sys schema中的视图、函数和存储过程;接下来,通过两个例子来演示sys sch...

赖明星
2016/05/03
0
0
XML Schema 简介

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

小步2013
2008/03/29
0
0
spring源码学习之:xml标签扩展配置例子

在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙。一般的做法会用原生态的方式...

无信不立
2016/08/19
0
0
通用 Schema 语言--Piqi

Piqi 是一种通用 Schema 语言,也是围绕 Schema 构建的一系列工具合集。 Piqi 语言可用于定义 JSON、XML、Google Protocol Buffers 及其他数据格式的 Schema 。 Piqi 的部分子项目包括: 用于...

匿名
2017/07/06
57
0
SOA服务设计与实现的几个语言无关的原则速记

一、SOA定义 SOA即面向服务架构Service-Oriented Architecture。在SOA中一切皆服务。一个服务是通过消息交换来调用的程序一个信息系统是共同完成一个特定任务的一组服务SOA可以概述为一种由一...

嗯哼9925
2017/11/14
0
0
mondrian schema形成的xml文件,有什么软件可以快速编辑?

kylin已经搭建完毕了,准备和Saiku进行集成。但是mondrian schema是必须进行设计和编辑的,但是这个东东手工维护的效率太差了,有好用的工具吗?通过定义或者拖拽方式直接生成mondrian sche...

南城爷们
04/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
1
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部