从网上查询关于数据库大数据处理的方案,有很多不错的Blog,提出很多的解决方案,所以呢自己也想整理一下关于这方面的内容,如果只是把别人整理的总结Copy到这就没什么意思了,甚至在面试的时候会经常被问到怎么样来处理大数据和高并发的解决方案,再说了网上也有很多重复的内容,把一篇文章Copy来Copy去的!来点个人见解吧!
现在的做的Java WEB项目有几个算得上是大数据的,很少的,基本上整个数据库加起来也就几十万条的数据量,像那些数据量相当大的网站或是系统基本上都是有很多服务器或是配置很高的服务器来支持的,最近做了一个项目数据量在千万级别,数据库表空间实际用到的也就3GB左右,这种数据量算不上是什么大数据,但是在开发的过程自己花了不少的功夫,根据自己的经验分享一下关于这种大数据处理的方案,这只是个人经验!
第一、首先解决SQL的问题
首先不考虑使用什么其它的第三方的,就单纯的SQL,写出查询效率高的SQL语句,一个数据库报表,可以使用不同的关键字和不同的SQL来实现,写出不同的SQL比较一下,哪一种查询效率高、哪一种查询效率快,这种是最直接的!
第二、建立分区表或是历史数据表
对于数据量特别大的表建立分区表或是历史数据表,比如像订单表、交易流水录表等等,这个可能根据数据量的大小来定,比如我在做上一个项目的时候,一天的交易流水最多也就不到1万条,按照这种数据量的增加,按一年建立一张分区表,一年下来差不多一张表的数据量也就在300万左右。或者是再加上一个查询历史交易的功能,还或者是限定查询的时间,比如只能查询一个月或是一个季度内的数据,许多大网站都是这么干的!
第三、通过建立定时任务或是跑批做出统计数据,即建立数据统计表
以前,在项目里增加定时任务,比如在夜里1点左右通过定时任务对当天的交易做出统计并将数据单独存储在一张表,统计的数据如当天消费有多少笔,消费的总金额是多少,当天退货有多少笔和当天退货的总金额是多少;做出月统计表、季度统计表、年统计表;这样的话,一张表的数据量也就相当的少了,这其实就是静态数据!同时这种方式也会解决所谓高并发带来的服务器压力和访问慢的问题!
但是这种方式会有问题,问题不在于统计的数据,而是在于定时任务,曾经因为定时任务也的过多、执行的过多导致对事个系统的影响,那时不得不重启服务器;所以有一个很好的方式就是将定时任务独立出来,写一个jar包,然后在Linux上写一个定时执行jar包的SHELL脚本,把这个jar包部署到Linux服务器上就可以;而且使用Linux SHELL写一个定时任务是很简单的,不过我觉得这种方式相对来说比较好一点,不过呢一定要做好日志的处理;我做的方式就是在jar包里通过Log4j日志跟踪,同时又建立一张跑批的历史表来记录是否跑批成功,如果跑批失败,我又在jar写了一个邮件处理功能,即会像指定的邮箱里发送邮件通知!
第四、建立静态的HTML页面
可以使用这种方式,比如像按年度统计的这种数据基本上来说就是不会变的,然后把年度数据直接写在HTML中,直接访问HTML静态页面,也就是按年做每一年数据的静态页面,做出每一年每一个季度甚至是每一个月的静态数据,而且这种方式会减轻服务器和数据库很大的压力。
只不过这种方式是手动建立静态页面,其实也可以通过一些模板技术来像FreeMarker和Velocity建立静态页面;
不过,在我的项目中我没有采用这种方式来处理,原因肯定是有的:1、统计表的数据量很小,而且这些数据都已经是处理好的,直接的一个简单查询就可以完成,没有必要再去建立一个静态页面;2、不想采用两种方式做一样的事情,就是很多历史数据我是需要作对比的,比如同比,即今年的某一月份和去年同时期的消费对比,今年的营业总额和去或是前年的总额的对比;3、系统的访问量也不是很大就几十个,没必要那么做。综合一下,没有采用种方式!
第五、不要过于依赖于JavaWEB框架
像这种大数据量,不要过于依赖于,甚至可以说不要使用Struts、Hibernate、Spring MVC、Spring、IBatis等JavaWEB框架,真的,我觉得使用这些框架也真不比使用纯的JDBC强到哪去,除非你有很好的例子来证明这些框架在处理大数据来说一个很好的工具,之前,我在上家公司做的外包项目,使用使用Spring MVC、Spring、Hibernate,区区50万条的数据量,系统运营起来就有那么点吃力了,压力测试就更是个问题了!
当然在这个项目中没有使用SSH框架,是使用我们公司一个牛人写的一个简单易懂的框架!
除了以上这五种方式外,还有其它很多细节上的,简单的再说几个:1、可以建立表的索引字段、但不能建立太多的索引,太多的话就没什么效果了;2、不使用Oracle的Sequence方式建立主键;3、主键使用CHAR类型比使用VARCHAR2类型查询效率要高等等。
以上我所说的几点是不需要使用任何其它第三方面的技术就可以解决的,以下这几种方式不是那么简单的啦,不过这几种都没有在我的项目中使用到:
第六、使用第三方的大数据处理工具
关于大数据处理工具,应该有很多的
第七、分布式应用
这个目前正在学习研究中
第八、服务器集群
这个也一样,之前没有使用过这种方式处理
第九、买好的服务器
这个就是看老板的意思了。
以上是个人在处理大数据(谈不上是大数据,请见谅啊)时常用的方式,如果有什么好的意见或是有什么不妥的地方,我们可以相互交流学习。
【猜你喜欢】
1.大数据处理技术——python
2.大数据处理技术的趋势-五种开源技术介绍
3.大数据处理技术方向