首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存的mysql插入-保留数据完整性

问缓存的mysql插入-保留数据完整性
EN

Stack Overflow用户
提问于 2011-03-29 05:38:11
回答 2查看 235关注 0票数 0

我想做很多插入,但能否在一段时间后更新mysql。

例如,如果有一个查询,如

代码语言:javascript
复制
Update views_table SET views = views + 1 WHERE id = 12;

有没有可能在视图增加到100次之前存储这个查询,然后运行以下命令,而不是从100次以上运行查询。

代码语言:javascript
复制
Update views_table SET views = views + 100 WHERE id = 12;

现在,假设已经完成了,那么数据完整性问题就来了。假设打开了100个php文件,它们都将运行相同的查询。现在,除非存在增加缓存视图的锁定机制,否则多个文件可能具有相同的缓存视图值,因此假设进程1可能有25个缓存视图,php进程2可能有25个视图,进程3可能有来自文件的27个视图。现在,假设进程3完成,并将计数器递增到28。然后假设php进程即将结束,它在进程3之后刚刚结束,这意味着计数器将返回到26。

你们有没有什么既快又安全的解决方案。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-29 05:55:46

只要您的查询使用relative values views=views+5,就应该有no problems。

只有将值存储在脚本中的某个地方,然后自己计算新值,才可能遇到麻烦。但是你为什么要这样做呢?实际上,您首先为什么要做所有这些?:)

如果不想使数据库过载,可以使用UPDATE LOW_PRIORITY table set ...,LOW_PRIORITY keyword将把更新操作放入队列中,并等待表不再被读取或插入使用。

票数 2
EN

Stack Overflow用户

发布于 2011-03-29 06:00:43

首先:使用这些查询:无论进程何时启动,UPDATE .. SET col = col + 1都是一个安全的操作,因此它永远不会“减少”计数器。

关于‘存储这个查询,直到视图达到100次,然后运行以下命令,而不是从超过100次运行查询’:不是这样的。您可以将计数器存储在更快的内存中(想到了memcached),通过一个进程将其偶尔传输到数据库中,或者使用AFTER UPDATE触发器将其存储在另一个表中,但我真的看不到这样做的意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5465384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档