我正在尝试设计一个帖子表,用户可以在其中使用任何表情符号对帖子做出反应。我需要记录使用的每个独特表情符号的数量。
如果我使用单独的计数器表,对于我收到的每个帖子,我都必须查询计数。因此,拉取 12 条消息意味着 1 次消息查询,如果我使用单独的表,则 + 12 次计数。
还有另一种更常见的方法吗?我无法将计数器列直接烘焙到帖子表中,因为表情符号/反应是随机的。
我不确定你所说的“拉取 12 条消息意味着 1 次消息查询,+ 12 次计数”是什么意思。如果您确实可以在一个查询中读取这 12 条消息,则意味着您拥有某种分区键或允许您一起 SELECT 所有 12 条消息的东西。如果是这种情况,您也可以在计数器表中拥有相同的分区键。
如果您只想使用一张表或使用物化视图,则不应使用“计数器”,而可以使用常规整数列,您可以使用轻量级事务 (LWT) 来增加该列。这将使读取非常高效(您只需读取帖子记录,其中包含反应计数器),但越不频繁的反应效率就会越低。
对于相对较少的非常受欢迎的帖子,将收到大量的交互,这些 LWT 事务可能会很昂贵,您也许可以考虑一种替代方案,甚至可能是一个额外的计数器列(即,在一个整数列和一个计数器上都有一个整数列)单独的表,当常规列达到 1000 时,您还将也从单独的计数器列中读取,并递增它 - 而不是常规列)。然而,可以说,即使对于一个非常受欢迎的帖子,它的阅读频率也比交互频率高得多 - 想象该帖子被点赞一百万次 - 但阅读了 1000 万次 - 所以即使是 LWT 事务也可能没问题,因为它们仍然是少数数据库的活动。