我正在开发一个微型服务,可以将选票保存到关系数据库中。我有一个用例,它有一个实体,它代表选票的聚合。我收到来自投票者的事件,他们投票赞成或反对X。这将增加给定实体上的值,并且这些更改需要在某个时候持续到DB中。
鉴于投票者的数量可能很高(~1k),选票几乎同时发生(在20秒内),我如何处理实体上的一些更新,并定期将它们的积累保存到DB中,这样做比将它们全部刷新DB更有效。
是否可以选择hibernate二级缓存?
编辑系统还需要每秒钟处理3-4次新的投票,并且这个投票号码适用于所有的投票。
发布于 2023-03-17 20:36:42
虽然每分钟更新的频率似乎并不过高,而且您的数据库处理它应该没有任何困难,但可能值得考虑实现内存中的缓冲区,以跟踪新的选票并定期将其刷新到数据库,例如每100次新投票之后。虽然这将使数据库的压力降到最低,但在服务中断的情况下,数据可能会丢失。
如果您没有绑定到特定的数据库,您可能还需要探索其他选项,比如Redis,它内置了对增量操作的支持(INCR )。但是,考虑到所期望的更新数量相对较少,直接将每次投票写入数据库可能就足够了。
发布于 2023-03-17 22:12:29
为每个投票事件滚动一个新的GUID,并在一个投票文本文件中附加一行条目,也许是CSV格式。要么立即写fsync()
,要么每K毫秒发出一个后台线程问题fsync,这样就会对每一次投票活动进行分批处理,从而将几张紧密间隔的选票保持在一起。(甲骨文持有这方面的专利。它被称为“组提交”。
现在,您的文本文件(S),每个线程/进程/主机/任何东西,都是您的真理之源,描述了所发生的历史事件。如你所愿,张贴处理它们。把他们送到Redis那里。将这些行插入到关系数据库表中,并进行计数。一旦事件到达持久存储层,就不会再发生弹跳服务器的风险了。
https://softwareengineering.stackexchange.com/questions/444556
复制相似问题