Chinaunix首页 | 论坛 | 博客
  • 博客访问: 510716
  • 博文数量: 65
  • 博客积分: 2925
  • 博客等级: 上尉
  • 技术积分: 1306
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-01 10:56
个人简介

2013

文章分类

全部博文(65)

分类: Mysql/postgreSQL

2013-04-27 16:35:35

需求:有张业务表table,里面有很多字段,若里面的某一行记录更新了,则将这行记录重新加载到应用实现的索引缓存中。


Table表的架构类似:

id

colA

……

status

1

kkk

……

123456

2

test

……

123457

3

kkk

……

123458


目前的做法:

    若里面的某一行记录更新了,则更新那行记录的字段status(这个字段始终是一个增长的值),然后通过:select * from table where status>xxx 将数据加载到索引缓存中。

    问题在于当需要更新table表中某一类的数据时,如一次性更新100万行,按照现有的方法,需要每行去更新status字段的值,然后通过select * from table where status>xxx 将数据加载到索引缓存中?每行更新效率也比较低,而且批量load数据时,可能对IO有点压力。


改进:

这个需求可以用类似分批load的方式,可以批量更新记录,分批load数据到索引缓存。如:

Update table set colB=’xxx’ ,status=’1363229614’  where colA=’kkk’;(假设这里更新了100万行数据)

id

colA

……

status

1

kkk

……

1363229614

2

test

……

1363229612

3

kkk

……

1363229614


Load数据到索引缓存时,采用:

Select * from table where status>=’1363229614’ and id>1000 order by status,id asc limit 5000;(load 下一批数据是将statusid传递过去即可)

阅读(4203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~