40W并发处理方案

以前都是采用csdn和google的博客,最近看到朋友都在用博客园,索性申请了一个,本人是菜鸟不喜勿喷。希望大家多多指点。

本文是和另外一个好友处理一个项目时候写的解决方案。

说老实话40W数据不大,但是处理的方法差不多类似吧。废话不多说直接上解决方法。

一、数据库结构的设计

首先设计一个合理的数据库模型,不仅会减少客户端和服务器段程序的编程和维护的难度,而且将会大大增加系统实际运行的性能。所以,在一个系统开始实施之前,必须完备的数据库模型的设计。

二、查询的优化

保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的数据的。

在没有建索引的情况下,数据库查找某一条数据,就必须进行全表扫描了,对所有数据进行一次遍历,查找出符合条件的记录。

三、算法的优化

尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。与临时表一样,游标并不是不可使用。对小型数据集使用FAST_FORWARD游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

  游标提供了对特定集合中逐行扫描的手段,一般使用游标逐行遍历数据,根据取出的数据不同条件进行不同的操作。尤其对多表和大表定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等特甚至死机。

 在有些场合,有时也非得使用游标,此时也可考虑将符合条件的数据行转入临时表中,再对临时表定义游标进行操作,可时性能得到明显提高。封装存储过程

四、建立高效的索引

 创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。大型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆结构存储数据,所有的数据均添加在表的尾部,而建立了簇索引的表,其数据在物理上会按照簇索引键的顺序存储,一个表只允许有一个簇索引,因此,根据B树结构,可以理解添加任何一种索引均能提高按索引列查询的速度,但会降低插入、更新、删除操作的性能,尤其是当填充因子(Fill Factor)较大时。所以对索引较多的表进行频繁的插入、更新、删除操作,建表和索引时因设置较小的填充因子,以便在各数据页中留下较多的自由空间,减少页分割及重新组织的工作。

索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。你得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。

其他注意事项

“水可载舟,亦可覆舟”,索引也一样。索引有助于提高检索性能,但过多或不当的索引也会导致系统低效。因为用户在表中每加进一个索引,数据库就要做更多的工作。过多的索引甚至会导致索引碎片。

所以说,我们要建立一个“适当”的索引体系,特别是对聚合索引的创建,更应精益求精,以使您的数据库能得到高性能的发挥

解决方案:建立中间表,通过DTS调度每天共步数据。

中间表设计原则

记录数同原表一样,减少多表连接,保存运算好的值,如果记录修改,根据修改日志,重新计算中间值

增量同步数据(DTS)

直接从每天的数据库更改日志读取记录,更新中间表,根据服务器空间程度合理调度DTS,减少数据同步时间。

对中间数据进行运算

查询不作字段运行,所以运算在生成中间表的过程中已经计算

根据查询,优化索引设计

根据数据查询特性,对where,GROUP BY等操作字段进行索引设计,提高查询速度

优化数据类型

大量采用Int提高查询、统计速度

优化中间表关键字

采用Int,提高插入速度

数据文件优化设计,一个主要业务,一个数据文件,建数据文件时,估计数据量,一次建一个比较大的文件,这样所分配的文件就是一个连续文件块。

五、JVM调优

系统采用的是Java+Tomcat+Mysql,可以对Java虚拟机JVM进行配置优化。JVM一般现在的垃圾回收都是采用的分代回收的方式实现的。配置Java –Xmx3800m –Xms3800m –Xmn2g –Xss128k –XX:+UseParallelGC –XX:ParallelGCThreads=20配置内存和并发能力。详细配置不做描述了。JVM调优要现场运维测试调优。

六、缓冲池技术

好好的管教你自己,不要管别人。

40W并发处理方案

相关文章:

你感兴趣的文章:

标签云: