我想做很多插入,但能否在一段时间后更新mysql。
例如,如果有一个查询,如
Update views_table SET views = views + 1 WHERE id = 12;有没有可能在视图增加到100次之前存储这个查询,然后运行以下命令,而不是从100次以上运行查询。
Update views_table SET views = views + 100 WHERE id = 12;现在,假设已经完成了,那么数据完整性问题就来了。假设打开了100个php文件,它们都将运行相同的查询。现在,除非存在增加缓存视图的锁定机制,否则多个文件可能具有相同的缓存视图值,因此假设进程1可能有25个缓存视图,php进程2可能有25个视图,进程3可能有来自文件的27个视图。现在,假设进程3完成,并将计数器递增到28。然后假设php进程即将结束,它在进程3之后刚刚结束,这意味着计数器将返回到26。
你们有没有什么既快又安全的解决方案。
谢谢
发布于 2011-03-29 05:55:46
只要您的查询使用relative values views=views+5,就应该有no problems。
只有将值存储在脚本中的某个地方,然后自己计算新值,才可能遇到麻烦。但是你为什么要这样做呢?实际上,您首先为什么要做所有这些?:)
如果不想使数据库过载,可以使用UPDATE LOW_PRIORITY table set ...,LOW_PRIORITY keyword将把更新操作放入队列中,并等待表不再被读取或插入使用。
发布于 2011-03-29 06:00:43
首先:使用这些查询:无论进程何时启动,UPDATE .. SET col = col + 1都是一个安全的操作,因此它永远不会“减少”计数器。
关于‘存储这个查询,直到视图达到100次,然后运行以下命令,而不是从超过100次运行查询’:不是这样的。您可以将计数器存储在更快的内存中(想到了memcached),通过一个进程将其偶尔传输到数据库中,或者使用AFTER UPDATE触发器将其存储在另一个表中,但我真的看不到这样做的意义。
https://stackoverflow.com/questions/5465384
复制相似问题