虽然总和一般规模的站点打交道,但需求总是千变万化的,当前某个客户的数据库已经达到数千万条记录(10M条规模),虽然离大规模数据处理(G条记录)还差了老远,但已经可以勉强在实际项目中看到点这样的感觉了。

前台访问量没有上来,因此当前的索引状况应付前端访问并无问题,所谓分表、分库现在也完全没用上。

主要的问题在于数据插入,客户需要每次提交一个csv文本,约一万至数万条记录,而.NET组的同事在处理这些记录时,采用的方案是按某字段验证是否存在,若不存在则插入。此字段当然已经有了索引。

但最后的结果是过万条记录至少需要一刻钟时间来处理这些数据,客户认为这个时长不可接受。

因为以前有处理过数百万条记录的经验,因此被抓去给方案。

三种方案:

1. 用户提交数据后,数据进入任务队列,即用户不用盯着浏览器观查页面刷新什么的,关闭浏览器亦可行,这是最基本的。

2.提交的数据先行去重,然后一并放到库里查重,然后使用单一事务一次性插入。

3.若库里面仅以单一字段验证是否重复的话,直接在库里面将此字段设为唯一索引,然后insert插入,返回错误值的则为重复,不重复的则能正常插入。

最后结果,同时采用2和3,在远低于服务器配置的普通PC测试环境下,一万条数据插入可以在1XX秒搞定。