{eval=Array;=+count(Array);}
谢邀,在BAT里曾经接手过一个公司级的平台开发,接手的时候,这个平台已经上线2年了,但是却经常收到用户投诉,说从网页端来操作页面的时候,响应实在是太慢了,非常影响用户体验。
接手的时候,经理就说了,一定要把用户反馈的这个事情列为P0级问题,尽快解决。
于是,我马上开始了分析。经过在日志里打点,得知时间主要消耗在数据库查询上。根据我们之前的理论知识,我根本想象不到数据库能被拖慢到这个地步。问题出现在一张存储历史任务的表格实在是太大了,新任务还在以每天百万级的速度增长,而这张表的体量已经达到了亿。这种情况下,就算有索引,在频繁写表(创建任务)的间隙去读表(查任务),其效率也是非常低的。
我当时想到的第一个优化方法是配置主从数据库。主从配置的好处有三点,分别是1)读写分离,也有人称之为负载均衡;2)数据异地备份,还有3)提高数据库的可用性。当时配置主从的主要目的是希望能够实现读写分离,从而提高数据库查询的效率。配置过后,查询效率确实有一定的提高,但是还远未达到解决问题的程度。
在查阅了很多信息之后,我看到了很多人推荐使用elastic search作为持久层。
它是一个轻量型的存储工具,虽然不是关系型数据库,也不支持基本SQL语句,但是它具有能够动态多节点部署,节点掉线后不影响全局数据的优点,最重要的一点,在面对海量数据查询时,它的表现要比MySQL优秀许多。根据我们的实际测试,一张几千万的表格,如果存储在MySQL中,利用非索引字段查询,可能消耗数秒到数十秒,但是同样的数据存储在ElasticSearch中,只需要毫秒级别就能查询到结果。简直就是为我们遇到的问题量身定做的解决方案。
综上,我们从两个方面提供了优化数据库的思路,分别是配置主从与引入ElasticSearch。
以上是我的浅见,欢迎各位在下方评论区点赞留言互动。
我是苏苏思量,来自BAT的java开发程序员,每天分享科技类见闻,欢迎关注我,与我共同进步。
1.最重要的调整数据表的架构,以提升效率。通过架构调整,减少关联查询,减少同步读写。用冗余字段,减少关联。
2 大小字段分离。尤其是大字段,最好独立表存储(当然是数据量极为庞大时)
3.使用链接(join)来代替子查询,速度将会快很多的。
4.合理索引!十分重要,必要时分表分库。好的索引,使查询提升1000倍,不是问题。
直接多PC SERVER搭建机群,把大数据库拆分吧。有钱你就直接上小型机+Oracle数据库
主要是多大的数据库?16台够了吧?MySQL
针对数据库优化基本在有以下的步骤:
一、硬件的优化
1)最粗放的方式就是提升硬件的配置,可以从CPU,内存和磁盘方面给予回答。
二、DBA的优化
1)最常用的方法是索引、索引、索引,加个索引可以将CPU的100%一下子降到10%左右
2)和开发沟通看看表里面的数据是否可以搬移或是删除
三、开发的优化
1)添加缓存,减少对数据库的访问,变相的减少数据库的压力
2)添加冗余字段,减少跨表查询,采用反三范式的方法去设计表
3)SQL语名要规范,不允许用seelct * ,where条件中不允许用函数、like,not in,<>等;
四、架构的优化
1)数据库设计要规范,避免存在大表,如表数据量过大,可以拆分成多个表
2)减少跨表查询,最好使用单表去查询数据
3)设计数据库的时候要采用水平或是垂直拆分的方式,将数据打散。
注:有时候数据库优化不是单靠一个点去完成的,如果想要治本的话,得从多方面去入手。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答