数据库性能

新兵训练营系列课程——海量数据存储基础

Deadly 提交于 2019-11-30 10:40:15
新兵训练营系列课程——海量数据存储基础 2015年8月12日 09:24 阅读 16831 微博平台研发作为微博的底层数据及业务支撑部门,已经经历了 5 年的发展历程。伴随着从数据及业务暴发式增长,我们在海量数据存储方面遭遇了诸多挑战,与此同时也伴随着丰富经验的积累。 本次新兵训练营,受众在于应届毕业生,目的在于让新同学系统化并且有针对性的了解平台的核心技术及核心业务,以使新同学在新兵训练营结束后,能够对平台的底层架构与业务有一定的了解。 本文主要面向新同学介绍平台的核心技术之一——海量数据存储,主要介绍在海量数据存储在大规模分布式系统下的架构变迁与设计。 课程大纲: 1. 课程目标 2. 存储服务概述 3. MySQL 与 MySQL 分布式架构设计 4. Redis 与 Redis 分布式架构设计 5. 思考与讨论 一、课程目标 1. 了解存储服务概况,以及RDBMS及NoSQL的差异 2. 理解MySQL、Redis、HBase基本实现机制、特性、适用场景 3. 理解几种存储产品的大规模分布式服务方案 4. 学会使用平台的MySQL、 Redis client组件 5. 理解对于MySQL、Redis分布式系统设计想要注意的问题 6. 了解平台几种典型案例 7. 理解几种存储产品在平台的定制修改与名词术语 二、存储服务概述 1. 关系型数据库是基于 实体关系模型(Entity

正确理解“读写分离”

こ雲淡風輕ζ 提交于 2019-11-30 08:41:30
很多人都把“读写分离”当做数据库性能优化的代名词。其实不然,“读写分离”并不是万能的,它只能解决某一部分性能问题。下面我写写我的理解笔记。 我们要优化数据库,提升性能,首先要对数据库的瓶颈进行分析。然后做出正确的优化方式。 那么什么是“读写分离”呢? 其实就是数据库集群,分成 主库 和 从库。 主库作为写操作的数据库,多个从库作为读操作的数据库。主库和从库通过同步机制进行同步,这样的集群叫做“分组”。 “读写分离”大法解决什么性能瓶颈呢?当然是读数据库的瓶颈咯!因为锁的从在,如果在单一数据库上,就会出现写的时候不能读,读的时候不能写。那这样就会存在阻塞,对于一些场景来说这是灾难性的。为了解决这个问题,还能提升性能,我们都需要这样一个“分组框架”。 集群分组存在几个问题我们需要考量: 主从同步的问题 读线程池和写线程池独立(想想都觉得难,太难了) 还有要是线程池故障了怎么办 要是数据量太大呢,那成本就... 既然如此之“南”,那么问题来了,有没有更优秀的办法解决这个瓶颈呢?当然有了,骚年你何不用缓存啊?、 由于缓存是缓存在内存中的,你读的性能肯定要比存在磁盘里强的多吧。 而且开发起来容易很多吧 成本肯定要比你多个数据库少的多吧 当然缓存也有瓶颈; 数据量太大怎么办? 万一坏掉了怎么办? 咋办?用分布式啊! 来源: CSDN 作者: Stephen_轩 链接: https://blog

快速了解MongoDB

落花浮王杯 提交于 2019-11-30 05:54:08
简介 MongoDB是一款为广泛的现代应用程序设计的高性能、可扩展、分布式数据库系统。MongoDB可用于不同规模大小的组织,为那些对系统低延迟、高吞吐量以及可持续性有很高要求的应用提供稳定关键的服务。 尽管MongoDB与传统的关系型数据库的有些特性不一样,但是对于之前部署和操作其他数据库系统的人员来说,MongoDB的很多概念,比如操作、策略、存储过程还是很相似的。公司的DBA和运营团队可以在保持现有系统的前提下,直接把MongoDB集成到生产环境中,并且不需要定制操作流程和工具 本文档为部署和管理MongoDB提供了最佳实践的指导。看本文档的前提需要你熟悉MongoDB的基本架构并理解企业软件部署的相关知识。 关于文档中的涉及到有些话题的更多详情,可以访问MongoDB的在线文档:mongodb.com。本文档也提供了相应的链接。 角色和职责 与其他数据库系统一样,部署在MongoDB的应用需要精心规划以及公司IT团队每个角色的协力合作才能保证稳定的部署。传统数据库中相关的角色以及角色的定位同样适用于MongoDB:数据库管理员、系统管理员、应用开发人员、网络管理员、需求分析人员以及数据架构师。 一般小公司中一个人员可能会担当多个角色,而大公司中,每个角色都是由一个人或者一个团队专门负责的。比如,在大的投资银行中,DBA的职责和系统管理员的职责差别就很大。 DBA

mysql之表结构对性能的影响

五迷三道 提交于 2019-11-30 05:49:11
1.冗余数据的处理 1.1关系数据库的三范式 1.第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库, 是指数据库表中的每一列都是不可分割的基本数据项,同一列中不能出现多个值; 2.第二范式(2NF ) 要求数据库表中每一行或者每一条记录必须可以被唯一的区分. 3.第三范式(3NF) 要求一个数据库表中不包含已在其他表中包含的非主键信息,也就是不能出现冗余数据. 2.适当的冗余数据可以提高数据库的整体查询性能 2.大表小表,有大数据的列单独拆分成小表; 1.在一个数据库中,一般不会设计属性过多的表;(拆分表,纵向拆分) 2.在一个数据库中,一般不会超过500/1000万条数据的表(拆分表,横向拆分,按照逻辑或者业务拆分) 3.有大数据的列单独拆分成小表 3.根据需求的展示设置合理的表结构 4.把常用属性分离成小表 1.减少查询常用属性需要查询的列; 2.便于常用属性的集中缓存; 来源: https://www.cnblogs.com/sxf20/p/11564119.html

MySQL数据库初识

非 Y 不嫁゛ 提交于 2019-11-30 02:13:01
一 数据库概述 1. 数据库???   什么是数据库呢?   先来看看百度怎么说的 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。   百度的貌似不好理解啊,让我说啊,数据库是存储数据的地方,超哥,你这不是废话么?这位同学,你你你你你说的对,哈哈,存数据的地方是存在哪里呢,存在硬盘上,为什么不是存在内存里面,因为内存无法永久保存。之前我们存数据都是使用的文件,在一个word文档里面写一些羞羞的网址,然后保存,就存储到硬盘上了。有同学就会说了,超哥,我这通过文件不是也将数据保存上了吗?是的,没毛病,但是你想,通过文件来操作数据,效率是不是很低,首先打开关闭就比较慢,其次是我们操作起来也比较麻烦,对不对,如果我想记录一条关于我个人信息的数据,我使用文档来存,是不是很不友好,并且我们要查数据的时候,看图1:图1是一个word里面记录的信息,如果我想查询出所有人的名字,这个操作是不是就很难搞定了,来来来,配合起来~~,你应该说是的,那我就接着说,有同学可能就会说了,老师我用excel啊,看图2,一列就搞定了,没毛病,但是你想打开操作excel效率低不低。并且通过你自己写的程序来操作这些文件是不是很麻烦

MySQL数据库优化技巧

青春壹個敷衍的年華 提交于 2019-11-30 00:35:51
一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 阶段一:数据库表设计 项目立项后,开发部门根据产品部门需求开发项目。 开发工程师在开发项目初期会对表结构设计。对于数据库来说,表结构设计很重要,如果设计不当,会直接影响到用户访问网站速度,用户体验不好!这种情况具体影响因素有很多,例如慢查询(低效的查询语句)、没有适当建立索引、数据库堵塞(锁)等。当然,有测试部门的团队,会做产品测试,找Bug。 由于开发工程师重视点不同,初期不会考虑太多数据库设计是否合理,而是尽快完成功能实现和交付。等项目上线有一定访问量后,隐藏的问题就会暴露,这时再去修改就不是这么容易的事了! 阶段二:数据库部署 是时候运维工程师出场了,项目上线。 项目初期访问量一般是寥寥无几,此阶段Web+数据库单台部署足以应对在1000左右的QPS(每秒查询率)。考虑到单点故障,应做到高可用性,可采用MySQL主从复制+Keepalived实现双机热备。主流HA软件有:Keepalived(推荐)、Heartbeat。 阶段三:数据库性能优化 如果将MySQL部署到普通的X86服务器上,在不经过任何优化情况下,MySQL理论值正常可以处理1500左右QPS

web网页测试用例(非常实用)

╄→尐↘猪︶ㄣ 提交于 2019-11-29 19:47:57
Web测试中,各类web控件测试点总结 一 、界面检查   进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验   1、页面名称title是否正确   2、当前位置是否可见 您的位置:xxx>xxxx   3、文字格式统一性   4、排版是否整齐   5、列表项显示字段是否齐全,列表项字段名称是否跟表单统一   6、同一页面,是否出现 字段名称相同、值取不同的问题。   7、数据加载情况:除了文本框的值,还要注意:   复选框,是否保存打√,或者保存不打√   下拉框,是否保存选择的值   多文本框,值是否都被保存,空格,换行是否保存 二、单文本框(type=text)   边界:字段长度   判空:是否可以为空   唯一性:是否唯一 (小归结:边界、判空、唯一性、特殊字符、正确性)   考虑语言,操作环境   特殊符号测试输入:   ' or 1<>'1   ' or '1'='1  ' or '1'<>'2  "|?><   where a='xxx'   下划线是否允许  输入全部空格 输入 单引号   ><script>alert(“123”);</script>>   特殊字段输入限定:   框内容是否合法(tel,ip,url,email)序号等,直接限制输入数字,其他过滤掉   输入金额文本框,整数首位为0,过滤掉,小数点后面

sql优化问题

最后都变了- 提交于 2019-11-29 19:03:33
数据库的优化问题 一、问题的提出  在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优 化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的 SQL语句,提高系统的可用性。   在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的 SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种 原则来删除索引,这有助于写出高性能的SQL语句。  二、SQL语句编写注意问题   下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低。   1. IS NULL 与 IS NOT NULL   不能用null作索引

Mysql高性能优化规范建议

拥有回忆 提交于 2019-11-29 18:28:33
阅读目录(Content) 数据库命令规范 数据库基本设计规范 1. 所有表必须使用Innodb存储引擎 2. 数据库和表的字符集统一使用UTF8 3. 所有表和字段都需要添加注释 4. 尽量控制单表数据量的大小,建议控制在500万以内 5. 谨慎使用Mysql分区表 6. 尽量做到冷热数据分离,减小表的宽度 7. 禁止在表中建立预留字段 8. 禁止在数据库中存储图片,文件等大的二进制数据 9. 禁止在线上做数据库压力测试 10. 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 1. 优先选择符合存储需要的最小的数据类型 2. 避免使用TEXT、BLOB数据类型,最常见的TEXT类型可以存储64k的数据 3. 避免使用ENUM类型 4. 尽可能把所有列定义为NOT NULL 5. 使用TIMESTAMP(4个字节)或DATETIME类型(8个字节)存储时间 6. 同财务相关的金额类数据必须使用decimal类型 索引设计规范 1. 限制每张表上的索引数量,建议单张表索引不超过5个 2. 禁止给表中的每一列都建立单独的索引 3. 每个Innodb表必须有个主键 常见索引列建议 如何选择索引列的顺序 避免建立冗余索引和重复索引(增加了查询优化器生成执行计划的时间) 对于频繁的查询优先考虑使用覆盖索引 索引SET规范 尽量避免使用外键约束 数据库SQL开发规范 1.

面向程序员的数据库访问性能优化法则

允我心安 提交于 2019-11-29 13:59:50
特别说明: 1、 本文只是面对数据库应用开发的程序员,不适合专业 DBA , DBA 在数据库性能优化方面需要了解更多的知识; 2、 本文许多示例及概念是基于 Oracle 数据库描述,对于其它关系型数据库也可以参考,但许多观点不适合于 KV 数据库或内存数据库或者是基于 SSD 技术的数据库; 3、 本文未深入数据库优化中最核心的执行计划分析技术。 读者对像: 开发人员: 如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化。 架构师: 如果你已经是数据库应用的架构师,那本文的知识你应该清楚 90% ,否则你可能是一个喜欢折腾的架构师。 DBA (数据库管理员): 大型数据库优化的知识非常复杂,本文只是从程序员的角度来谈性能优化, DBA 除了需要了解这些知识外,还需要深入数据库的内部体系架构来解决问题。 引言 在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多介绍只是对一些特定的场景优化的,所以反而有时会产生误导或让程序员感觉不明白其中的奥妙而对数据库优化感觉很神秘。 很多程序员总是问如何学习数据库优化,有没有好的教材之类的问题。在书店也看到了许多数据库优化的专业书籍,但是感觉更多是面向 DBA 或者是 PL/SQL 开 发方面的知识