繁体   English   中英

用Java非阻塞MySQL更新?

[英]Non-blocking MySQL updates with java?

对于我正在开发的多人游戏,我想在不阻止游戏更新线程的情况下将事件记录到mysql数据库中,以便在数据库繁忙或表被锁定的情况下,游戏在等待更新时不会停止运行写。

做到这一点的最佳方法是什么?

我正在使用c3p0来管理数据库连接池。 到目前为止,我最好的主意是将查询更新字符串添加到同步列表中,并使用一个独立的线程每100毫秒检查一次列表并执行在该列表中找到的查询。

将更新放在BlockingQueue 让一个单独的线程使用take()在队列上等待,然后使用drainTo()使用所有待处理的更新并将它们一次性推送到服务器。 使用单个多行INSERT可获得最高效率。

这种方法可确保更新在轮询服务器时不会因轮询频率而造成任何不必要的延迟,同时随着卷的增加而发出更块状的请求,从而提高了请求的效率。

到目前为止,我最好的主意是将查询更新字符串添加到同步列表中,并使用一个独立的线程每100毫秒检查一次列表并执行在该列表中找到的查询。

如果您不想阻塞主线程,那对我来说听起来不错,除了不使用同步列表和100ms轮询,而是使用某些BlockingQueue实现。 LinkedBlockingQueue应该可以完成这项工作,如果使它不受限制,它将永远不会阻塞主线程。

我认为您可能正在寻找“ INSERT DELAYED”,因为INSERT立即返回,而MySQL将为您处理所有线程问题。 但是,没有等效的UPDATE语句,因此您需要重写代码,以便仅使用INSERT或REPLACE。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM