问题:
怎么样能优化Update? 减少次数?内存中合并?应用程序池一崩溃岂不是直接丢失?
用类似memcached的东西无法保证多机写入时数据精准。
14 个解决方案
#1
如果是回写数据库,那么应该尽量减少和数据库的交互。
我觉得可以这样:
1、适当延长回写间隔(在你的业务允许的范围内)
2、把待回写数据批量导入(SqlBulkCopy)数据库某张表(为了区分数据来源,这张表需要有一个IP或者MAC地址的字段),不管重复与否,接下来拿这些原始数据更新数据库的工作交给服务器
memcached不能保证多机写入时数据精准,不知道你是怎么得出的?
fackbook用的就少共享内存,多机写入的并发量灰常大,人家怎么可以呢?
我觉得可以这样:
1、适当延长回写间隔(在你的业务允许的范围内)
2、把待回写数据批量导入(SqlBulkCopy)数据库某张表(为了区分数据来源,这张表需要有一个IP或者MAC地址的字段),不管重复与否,接下来拿这些原始数据更新数据库的工作交给服务器
memcached不能保证多机写入时数据精准,不知道你是怎么得出的?
fackbook用的就少共享内存,多机写入的并发量灰常大,人家怎么可以呢?
#2
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
#3
#4
memcached具体我没有深入研究,但是我看说明他比较适合读多写少的情况。 SQL通过主键去update有锁,memcached同时多点向他更新一个记录呢?
#5
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
#6
个人觉得如果对数据的实时性要求不高的话,可以按1楼说的那样把要更新的数据放到另外一个表中,然后隔一段时间后再进行更新,这个操作可以在数据库中使用作业任务或者另外写个windows service来做,还有就是update的速度问题,可以对update语句的作为where查询条件的字段加索引,这样可以提高update操作的效率
#7
放到另外一张表中还是一样的写入量啊。除非再架一台数据库定时同步。
#8
这是要干什么,这样做有意义?难道做投票软件?
字段=字段+1,加完了你知道是谁加上去的?
#9
建议还是从数据库设计基础开始看
不要老靠拍脑袋想
不要老靠拍脑袋想
#10
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
这是要干什么,这样做有意义?难道做投票软件?
字段=字段+1,加完了你知道是谁加上去的?
没意义就不会今天来发帖问了。每秒都执行好几十次了,再想有没有意义 更没意义。
可以理解为类似投票,张三 李四 王二 全世界再为他们投票。票数=票数+1 这种情况如何优化?
#11
个人觉得如果对数据的实时性要求不高的话,可以按1楼说的那样把要更新的数据放到另外一个表中,然后隔一段时间后再进行更新,这个操作可以在数据库中使用作业任务或者另外写个windows service来做,还有就是update的速度问题,可以对update语句的作为where查询条件的字段加索引,这样可以提高update操作的效率
放到另外一张表中还是一样的写入量啊。除非再架一台数据库定时同步。
量还是一样的不过,这样可以在服务器有空闲的时候进行update操作呀
#12
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
这是要干什么,这样做有意义?难道做投票软件?
字段=字段+1,加完了你知道是谁加上去的?
没意义就不会今天来发帖问了。每秒都执行好几十次了,再想有没有意义 更没意义。
可以理解为类似投票,张三 李四 王二 全世界再为他们投票。票数=票数+1 这种情况如何优化?
如果是投票,你必须insert一条,把投票人insert进去,防止重复投票,而不是无脑update
如果就是想update,也可以先缓存在数组中,定时update
比如
张三
李四
王五
建立个int[]数组,0,1,2位置分别存放3个人的票数
然后累计到几千了一次性执行:字段=字段+2543
#13
这种情况一般我会 分时间段,然后将这个时间段的 东西一起update。这样会快一些儿。不知道这方法有没有用。。
#14
如果像你的例子那么简单到只更新一个表的一个字段的话,那么就
1.使用SqlParameter,传递给服务器相同的SQL字符串。
2.不使用事物处理,也不需要Lock。程序端就是提交更新要求,等待更新结果,如果Update返回更新结果件数是0、或者超时等错误的话再重复提交。
3.信任数据库服务器,一秒钟几十次UPDATE没啥问题的。
4.配置数据库服务器,定期维护索引。
5.更新数据库服务器的硬件配置。
1.使用SqlParameter,传递给服务器相同的SQL字符串。
2.不使用事物处理,也不需要Lock。程序端就是提交更新要求,等待更新结果,如果Update返回更新结果件数是0、或者超时等错误的话再重复提交。
3.信任数据库服务器,一秒钟几十次UPDATE没啥问题的。
4.配置数据库服务器,定期维护索引。
5.更新数据库服务器的硬件配置。
#1
如果是回写数据库,那么应该尽量减少和数据库的交互。
我觉得可以这样:
1、适当延长回写间隔(在你的业务允许的范围内)
2、把待回写数据批量导入(SqlBulkCopy)数据库某张表(为了区分数据来源,这张表需要有一个IP或者MAC地址的字段),不管重复与否,接下来拿这些原始数据更新数据库的工作交给服务器
memcached不能保证多机写入时数据精准,不知道你是怎么得出的?
fackbook用的就少共享内存,多机写入的并发量灰常大,人家怎么可以呢?
我觉得可以这样:
1、适当延长回写间隔(在你的业务允许的范围内)
2、把待回写数据批量导入(SqlBulkCopy)数据库某张表(为了区分数据来源,这张表需要有一个IP或者MAC地址的字段),不管重复与否,接下来拿这些原始数据更新数据库的工作交给服务器
memcached不能保证多机写入时数据精准,不知道你是怎么得出的?
fackbook用的就少共享内存,多机写入的并发量灰常大,人家怎么可以呢?
#2
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
#3
#4
如果是回写数据库,那么应该尽量减少和数据库的交互。
我觉得可以这样:
1、适当延长回写间隔(在你的业务允许的范围内)
2、把待回写数据批量导入(SqlBulkCopy)数据库某张表(为了区分数据来源,这张表需要有一个IP或者MAC地址的字段),不管重复与否,接下来拿这些原始数据更新数据库的工作交给服务器
memcached不能保证多机写入时数据精准,不知道你是怎么得出的?
fackbook用的就少共享内存,多机写入的并发量灰常大,人家怎么可以呢?
memcached具体我没有深入研究,但是我看说明他比较适合读多写少的情况。 SQL通过主键去update有锁,memcached同时多点向他更新一个记录呢?
#5
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
#6
个人觉得如果对数据的实时性要求不高的话,可以按1楼说的那样把要更新的数据放到另外一个表中,然后隔一段时间后再进行更新,这个操作可以在数据库中使用作业任务或者另外写个windows service来做,还有就是update的速度问题,可以对update语句的作为where查询条件的字段加索引,这样可以提高update操作的效率
#7
个人觉得如果对数据的实时性要求不高的话,可以按1楼说的那样把要更新的数据放到另外一个表中,然后隔一段时间后再进行更新,这个操作可以在数据库中使用作业任务或者另外写个windows service来做,还有就是update的速度问题,可以对update语句的作为where查询条件的字段加索引,这样可以提高update操作的效率
放到另外一张表中还是一样的写入量啊。除非再架一台数据库定时同步。
#8
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
这是要干什么,这样做有意义?难道做投票软件?
字段=字段+1,加完了你知道是谁加上去的?
#9
建议还是从数据库设计基础开始看
不要老靠拍脑袋想
不要老靠拍脑袋想
#10
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
这是要干什么,这样做有意义?难道做投票软件?
字段=字段+1,加完了你知道是谁加上去的?
没意义就不会今天来发帖问了。每秒都执行好几十次了,再想有没有意义 更没意义。
可以理解为类似投票,张三 李四 王二 全世界再为他们投票。票数=票数+1 这种情况如何优化?
#11
个人觉得如果对数据的实时性要求不高的话,可以按1楼说的那样把要更新的数据放到另外一个表中,然后隔一段时间后再进行更新,这个操作可以在数据库中使用作业任务或者另外写个windows service来做,还有就是update的速度问题,可以对update语句的作为where查询条件的字段加索引,这样可以提高update操作的效率
放到另外一张表中还是一样的写入量啊。除非再架一台数据库定时同步。
量还是一样的不过,这样可以在服务器有空闲的时候进行update操作呀
#12
多机UPDATE同一条数据,而且数据重复?
我觉得你从设计层面就应该重新考虑了,为什么要这样设计
重复的都是 比如 字段=字段+1 字段2=字段2+10 前提我也不知道A机器 和B机器会重复执行。 应该怎么设计呢?我能力有限。
这是要干什么,这样做有意义?难道做投票软件?
字段=字段+1,加完了你知道是谁加上去的?
没意义就不会今天来发帖问了。每秒都执行好几十次了,再想有没有意义 更没意义。
可以理解为类似投票,张三 李四 王二 全世界再为他们投票。票数=票数+1 这种情况如何优化?
如果是投票,你必须insert一条,把投票人insert进去,防止重复投票,而不是无脑update
如果就是想update,也可以先缓存在数组中,定时update
比如
张三
李四
王五
建立个int[]数组,0,1,2位置分别存放3个人的票数
然后累计到几千了一次性执行:字段=字段+2543
#13
这种情况一般我会 分时间段,然后将这个时间段的 东西一起update。这样会快一些儿。不知道这方法有没有用。。
#14
如果像你的例子那么简单到只更新一个表的一个字段的话,那么就
1.使用SqlParameter,传递给服务器相同的SQL字符串。
2.不使用事物处理,也不需要Lock。程序端就是提交更新要求,等待更新结果,如果Update返回更新结果件数是0、或者超时等错误的话再重复提交。
3.信任数据库服务器,一秒钟几十次UPDATE没啥问题的。
4.配置数据库服务器,定期维护索引。
5.更新数据库服务器的硬件配置。
1.使用SqlParameter,传递给服务器相同的SQL字符串。
2.不使用事物处理,也不需要Lock。程序端就是提交更新要求,等待更新结果,如果Update返回更新结果件数是0、或者超时等错误的话再重复提交。
3.信任数据库服务器,一秒钟几十次UPDATE没啥问题的。
4.配置数据库服务器,定期维护索引。
5.更新数据库服务器的硬件配置。