c++ - 多个应用程序之间的数据库状态

标签 c++ sql-server performance transactions

我有一个使用 SQL 数据库存储/检索玩家数据的游戏服务器。游戏服务器有一个待处理的数据库请求/查询队列,以避免阻塞网络线程轮询。如果有太多玩家在玩,数据库就会承受压力并开始减慢查询速度。

如果我有多个服务器在运行,我担心一个玩家可能会断开连接,并且在其信息被保存到数据库之前,同一个玩家连接到另一个游戏服务器(多个房间)并加载旧信息(使他失去游戏进度)。

我想知道是否有任何方法可以管理多个应用程序实例(游戏服务器)之间的这种类型的同步。

我考虑过事务,但如果队列没有足够快地出队(查询在服务器内存上挂起 - 而不是在数据库服务器上挂起),这仍然会导致问题。

创建一个所有游戏服务器都连接并请求数据库操作(从而避免多个队列)的“数据库服务器”不是一个选项

假设数据库已完美优化,解决方案必须在应用程序本身上制定。

我有哪些选择?

最佳答案

当玩家连接时,在数据库中创建一个“打开”记录。当他断开连接时,创建一个“关闭”记录。

当玩家重新连接时,在所有现有“打开”记录都具有匹配的“关闭”记录之前,不允许创建新的“打开”记录。

关于c++ - 多个应用程序之间的数据库状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35087274/

相关文章:

java - 从 Java HashMap 中提取 ith 值的有效方法?

c++ - 全局变量的内存布局

SQL Server,将列表创建为 1 列

sql-server - T-SQL 中的临时函数或存储过程

arrays - 将哈希表转换为 O(log(k)*k + n) 中的排序数组

sql - 为什么 Oracle 使用 ORDER BY 忽略索引?

c++ - 可以在QML中的 map 上绘制带有孔的MapPolygon吗?

C++ std::string 构造函数

c++ - Qt4 - 从注册表访问 Windows Machine Guid

sql-server - SSRS 传递报告参数