Design patterns 创建防弹计数器的最佳方法

Design patterns 创建防弹计数器的最佳方法,design-patterns,database-design,architecture,Design Patterns,Database Design,Architecture,我正在建立一个游戏系统,许多玩家可以一起玩某种桌面游戏。同时可能有数百张游戏桌。该系统由几个组件组成,其中主要组件是游戏服务器和DBworker,中间是rabbitMQ。DBWorker是负责数据库的组件 所以,我需要确保每个游戏都有唯一的ID来正确跟踪游戏的结果。我希望有某种自动递增的解决方案。当然,我可以在PostgreSQL数据库中进行某种排序,并每次提取新ID,但对我来说,这似乎是一个明显的瓶颈(我不想一直链接到数据库。万一数据库宕机,我们的工程师恢复数据库时,显示必须继续) 那么,有没

我正在建立一个游戏系统,许多玩家可以一起玩某种桌面游戏。同时可能有数百张游戏桌。该系统由几个组件组成,其中主要组件是游戏服务器和DBworker,中间是rabbitMQ。DBWorker是负责数据库的组件

所以,我需要确保每个游戏都有唯一的ID来正确跟踪游戏的结果。我希望有某种自动递增的解决方案。当然,我可以在PostgreSQL数据库中进行某种排序,并每次提取新ID,但对我来说,这似乎是一个明显的瓶颈(我不想一直链接到数据库。万一数据库宕机,我们的工程师恢复数据库时,显示必须继续)

那么,有没有实施类似项目的想法或个人经验

p、 我想时间戳作为ID,但真实ID会更好。我不知道我为什么这么想-如果我错了,请纠正我


提前感谢大家

是否要求ID为整数?如果不是,那么为什么不直接使用UUID(RFC4122)?我想,随机UUID应该足以满足您的需要。

  • 你需要确保所有游戏ID都是在一个地方创建的——某种“工厂”
  • 给定一个初始值(最后知道/记录的ID),工厂将生成下一个逻辑值(一个普通的旧递增整数即可)
  • 如果工厂在内存中(以及其他逻辑),那么它在管理唯一ID的生成方面应该没有问题。让它在运行时工作,在内存中作为应用程序的另一部分,意味着你不会每次都回到数据库
  • 在某些情况下,数据(包括ID)将被持久化-这是下次启动时“最后一个已知ID”的来源。唯一的风险是确保在工厂再次需要该ID之前,您永远不会完全无法保存该ID
我对我为个人使用而构建的一个简单桌面应用程序做了类似的事情,每当我保存一个对象时,应用程序都会生成一个新的唯一ID——这是一个基于上一个值(+1)的简单int。在运行应用程序的生命周期中的某些时刻,我会将状态保存到磁盘(序列化XML)。唯一失败的情况是,如果我无法在启动时打开以前保存的XML,也就是当应用程序获得递增关闭的起始值时


我不知道它是防弹的还是“最好的”,但它对我所需要的很有效。

获取随机字符串/数字/md5(随机)或者其他任何东西都不是问题-我现在使用时间戳。看,我在上面写了关于时间戳的内容。时间戳更好-你可以根据它对游戏进行排序。UUID是服务器端的好东西,但如果我告诉玩家游戏id是:550e8400-e29b-41d4-a716-446655440000,我打赌他们会哭的…经过一些考虑,我不会hink UUID是一个正确的选择。玩家应该玩游戏而不是记忆UUID。就是这样。