【发布时间】:2017-05-14 06:57:31
【问题描述】:
我正在经历这个Instagram engineering article,他们提到了非规范化计数器,我引用了
为了减少每个操作所需的资源,我们对帖子上的点赞计数器进行了非规范化处理。每当有新的赞出现时,数据库中的计数就会增加。因此,每次读取计数都只是一个简单的“选择”,效率要高得多。
在同一个文件中对计数器进行非规范化还有一个额外的好处 存储帖子点赞者的数据库。两个更新都可以 包含在一个事务中,使更新具有原子性和一致性 每时每刻。而在更改之前,缓存中的计数器可能是 由于超时而与数据库中存储的内容不一致, 重试等。
我尝试更新计数器表和一个普通表,其中有喜欢该帖子的用户批量使用,
BEGIN BATCH
UPDATE postlike_counter_counter
set likecount = likecount+1
where postid = c77b9e44-379b-11e7-93dc-dd4982fae088;
INSERT INTO postlikes (postid, likedtime, likedby) values(c77b9e44-379b-11e7-93dc-dd4982fae088, unixTimestampOf(now()),
{"firstname": 'fname', "lastname": 'lname', "profileimgurl":'img/pic'});
APPLY BATCH;
我看到了错误,计数器突变只允许在 COUNTER 个批次中 如果我将其作为反批次,我会得到,在 COUNTER 批次中只允许反突变
有什么方法可以让我完成这项工作吗?如果不是,那这篇文章在写上面引用的几行时究竟是什么意思?
【问题讨论】: