2011-04-11 51 views
2

我有一个网站,当用户做出一个动作时,我想补充一下这个人曾经做过多少动作。当然我会说“每次更新用户表!”但我不觉得这是一个很好的解决方案,而且我很想看看是否有办法做到这一点。排队更新请求的巨型更新?

基本上用户会登录并开始使用动作,每次他们做出动作时我都会做[无论]什么,然后在一天结束时,我将所有[无论] s并进行查询,保存每项行动的资源。如果该网站增长到1,000个用户,那么这些小问题就会开始累积起来!只有一种类型的“行动”,因为这个问题只是假定每个页面加载都是一个行为。

+1

我已经通过这样做来减轻负载。 考虑“负载低时,我会采取这种行动”,而不是“在一天结束时”。第二:这些行动必须独立于24小时左右的时间。 否则,您会通过排队“旧”/“已经”初始化的操作来阻止您的网站的进一步“行动”和功能。 在延迟或分离线程方面的思考在网络开发中并不是一个很好的方法,因为大部分事情发生得非常快。 “添加朋友”,QUERY DB UPDATE“聊天给这个朋友”,QUERY DB SELECT等尝试使用缓存来减少负载 – 2011-04-11 20:45:18

回答

1

如果它的单个会话在会话/全局变量中存储(队列)“所有更新”。会议结束时更新。

如果它是一个多会话系统,我会建议在每个会话结束时执行上述操作并更新表。

:(向上几百KB的,这不是一个好主意):

你会希望做一个简码endcoing /解码库,将其存储到会话瓦尔。如果我们在谈论巨大的数据。例如,如果您有一个拖放系统,则中间状态可能是密钥对结构的关键字<。 例如:LOC_A = WIDGET_1; LOC_B = WIDGET_88 ..等等等等。

这是否有意义?

+0

伟大的解决方案!谢谢!我会坚持看看有没有人有更好的建议,我一定会检查缓存。 – 2011-04-11 20:59:40

0

不要打折保留一个行动事件表。除非你有很高的用户操作速度,否则查询和计数动作事件而不是累积总计可能是合理的。通过合理的设计,索引可以提供对数百或数千个事件的单块读取访问。开发人员经常会因为这种实际上非常合理的东西而被桌子大小吓倒。只要表是只写的,对于MYSQL,IME表格大小为几GB不是问题。

像往常一样,测试几个选项是最好的主意,并期望会感到惊讶。