数据库优化

数据库优化最主要的目标是减少IO,采用的方法为分布式存储,合理优化表结构设计

缓存redis,用内存替代IO,适合对一致性要求不高的任务

数据库优化
大数据切分的核心:把一个数据库切分成多个放到不同的数据库(表)上,缓解数据库压力

根据数据的特性,把一堆的数据进行切分,避免从硬盘频繁读无效的数据
一个数据库有几百张表,好查找,在同一个库中,问题是表多寻址就慢
方式:垂直切分(表多)在dao层改变,库名.表名,在底层只需要修改库名
规则避免数据重复,杂乱,适合耦合度低,相互影响小,业务逻辑清晰,拆分规则简单
按表的相关性划分,关系紧密表(比如某个模块的表)放在一起进入一个库,把一个数据库切分成几个小库(把数据库分类,把表分类,把类似的表放到同一个库,表量少,查询快,几个库没有关联,耦合度低,对应用层影响不大减少IO)

水平且分(单表数据多)
      ID散列,id求余,1000件衣服找1件,要难于100件找1件
      切完方便程序的调用

某个字段的某种规则分散到多个表中,每个表包含一部分数据,规则简单,表不要太散
      适合数据量巨大,变动不大的表
      同一个表的数据,切分到不同的数据库或表中,对于应用程序,拆分规则本身和后期的数据维护有些复杂
      表中有时间或日期字段,用日期归档适用于日增长量比较大
      常用方法:
      ID散列,日期归档

垂直切分和水平切分柔和在一起,将数据库切成分布式矩阵,先垂直在水平
      大数据只是库中某几个表数据量大,如果所有表数据量都大,那数据库设计有问题      
      切分带来的常见问题      
      进行切分,跨库(节点)的join(要尽量避免)
      解决办法,把join拆分两个子查询,第一次查询的结果,作为第二次查询的的条件      
      跨节点count,order by,group by(后两者耗内存,在内存排序)
      分别在各个节点查询结果后,在内存中进行合并,切分好,join少,减少大量的跨节点操作,设计好切分规则      
      
      分布式存储的思想,切完后存放即解决方案    
      
      不会影响数据库性能,软解析越多越好,缓存命中率高,sql执行率高


     

问题
     
      如何针对websocket如何加压?
在http协议上做了个性化添加,从客户端在webhttp协议上添加了一些其他协议,http是无状态,短连接的
当页面不停的往服务器请求,socket是长连接有状态的,在web的协议上开放一个socket端口,方便与服务器轮回的交互

      吞吐量
      每s中从服务器网卡经过的流量,包含上行和下行的,二者之和,带宽和吞吐量的关系,吞吐量用B
      电信或移动宣传效果,网卡是b,10M的网,下载速度是准带宽的1/8

      性能测试过程中持续并发导致数据库连接数不足,是测试方案不对(不应该持续应的并发)还是数据库的io占用的太多频繁呢
连接数不足,数据库连接池配置等问题,占用资源没有释放等

posted on 2015-05-18 16:07  叶子的分享  阅读(227)  评论(0编辑  收藏  举报