首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在关系数据库中优化对同一实体的写入

在关系数据库中优化对同一实体的写入
EN

Software Engineering用户
提问于 2023-03-17 17:54:49
回答 2查看 105关注 0票数 0

我正在开发一个微型服务,可以将选票保存到关系数据库中。我有一个用例,它有一个实体,它代表选票的聚合。我收到来自投票者的事件,他们投票赞成或反对X。这将增加给定实体上的值,并且这些更改需要在某个时候持续到DB中。

鉴于投票者的数量可能很高(~1k),选票几乎同时发生(在20秒内),我如何处理实体上的一些更新,并定期将它们的积累保存到DB中,这样做比将它们全部刷新DB更有效。

是否可以选择hibernate二级缓存?

编辑系统还需要每秒钟处理3-4次新的投票,并且这个投票号码适用于所有的投票。

EN

回答 2

Software Engineering用户

发布于 2023-03-17 20:36:42

虽然每分钟更新的频率似乎并不过高,而且您的数据库处理它应该没有任何困难,但可能值得考虑实现内存中的缓冲区,以跟踪新的选票并定期将其刷新到数据库,例如每100次新投票之后。虽然这将使数据库的压力降到最低,但在服务中断的情况下,数据可能会丢失。

如果您没有绑定到特定的数据库,您可能还需要探索其他选项,比如Redis,它内置了对增量操作的支持(INCR )。但是,考虑到所期望的更新数量相对较少,直接将每次投票写入数据库可能就足够了。

票数 2
EN

Software Engineering用户

发布于 2023-03-17 22:12:29

为每个投票事件滚动一个新的GUID,并在一个投票文本文件中附加一行条目,也许是CSV格式。要么立即写fsync(),要么每K毫秒发出一个后台线程问题fsync,这样就会对每一次投票活动进行分批处理,从而将几张紧密间隔的选票保持在一起。(甲骨文持有这方面的专利。它被称为“组提交”。

现在,您的文本文件(S),每个线程/进程/主机/任何东西,都是您的真理之源,描述了所发生的历史事件。如你所愿,张贴处理它们。把他们送到Redis那里。将这些行插入到关系数据库表中,并进行计数。一旦事件到达持久存储层,就不会再发生弹跳服务器的风险了。

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

https://softwareengineering.stackexchange.com/questions/444556

复制
相关文章

相似问题

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