关于数据库大数据处理的方案,有很多不错的Blog,提出很多的解决方案,所以呢自己也想整理一下关于这方面的内容,如果只是把别人整理的总结Copy到这就没什么意思了,甚至在面试的时候会经常被问到怎么样来处理大数据和高并发的解决方案,再说了网上也有很多重复的内容,把一篇文章Copy来Copy去的!来点个人见解吧!
现在的做的Java WEB项目有几个算得上是大数据的,很少的,基本上整个数据库加起来也就几十万条的数据量,像那些数据量相当大的网站或是系统基本上都是有很多服务器或是配置很高的服务器来支持的,最近做了一个项目数据量在千万级别,数据库表空间实际用到的也就3GB左右,这种数据量算不上是什么大数据,但是在开发的过程自己花了不少的功夫,根据自己的经验分享一下关于这种大数据处理的方案,这只是个人经验!
第一、首先解决SQL的问题
首先不考虑使用什么其它的第三方的,就单纯的SQL,写出查询效率高的SQL语句,一个数据库报表,可以使用不同的关键字和不同的SQL来实现,写出不同的SQL比较一下,哪一种查询效率高、哪一种查询效率快,这种是最直接的!
第二、建立分区表或是历史数据表
对于数据量特别大的表建立分区表或是历史数据表,比如像订单表、交易流水录表等等,这个可能根据数据量的大小来定,比如我在做上一个项目的时候,一天的交易流水最多也就不到1万条,按照这种数据量的增加,按一年建立一张分区表,一年下来差不多一张表的数据量也就在300万左右。或者是再加上一个查询历史交易的功能,还或者是限定查询的时间,比如只能查询一个月或是一个季度内的数据,许多大网站都是这么干的!
第三、通过建立定时任务或是跑批做出统计数据,即建立数据统计表
以前,在项目里增加定时任务,比如在夜里1点左右通过定时任务对当天的交易做出统计并将数据单独存储在一张表,统计的数据如当天消费有多少笔,消费的总金额是多少,当天退货有多少笔和当天退货的总金额是多少;做出月统计表、季度统计表、年统计表;这样的话,一张表的数据量也就相当的少了,这其实就是静态数据!同时这种方式也会解决所谓高并发带来的服务器压力和访问慢的问题!
但是这种方式会有问题,问题不在于统计的数据,而是在于定时任务,曾经因为定时任务也