虽然总和一般规模的站点打交道,但需求总是千变万化的,当前某个客户的数据库已经达到数千万条记录(10M条规模),虽然离大规模数据处理(G条记录)还差了老远,但已经可以勉强在实际项目中看到点这样的感觉了。
前台访问量没有上来,因此当前的索引状况应付前端访问并无问题,所谓分表、分库现在也完全没用上。
主要的问题在于数据插入,客户需要每次提交一个csv文本,约一万至数万条记录,而.NET组的同事在处理这些记录时,采用的方案是按某字段验证是否存在,若不存在则插入。此字段当然已经有了索引。
但最后的结果是过万条记录至少需要一刻钟时间来处理这些数据,客户认为这个时长不可接受。
因为以前有处理过数百万条记录的经验,因此被抓去给方案。
三种方案:
1. 用户提交数据后,数据进入任务队列,即用户不用盯着浏览器观查页面刷新什么的,关闭浏览器亦可行,这是最基本的。
2.提交的数据先行去重,然后一并放到库里查重,然后使用单一事务一次性插入。
3.若库里面仅以单一字段验证是否重复的话,直接在库里面将此字段设为唯一索引,然后insert插入,返回错误值的则为重复,不重复的则能正常插入。
最后结果,同时采用2和3,在远低于服务器配置的普通PC测试环境下,一万条数据插入可以在1XX秒搞定。

关注WEB应用系统架构,侧重效能、可用性研究。欢迎访问treeber.com查看本站整理自网络的非原创精华(筹建中)。
wrestsoft
July 5th, 2009 at 11:39 pm
Good!
很好的思路总结,谢了!