用于异步保存和更新操作的 ORM/库? [关闭]
Posted
技术标签:
【中文标题】用于异步保存和更新操作的 ORM/库? [关闭]【英文标题】:ORM/Library for asynchron save & update operations? [closed] 【发布时间】:2020-11-08 12:42:36 【问题描述】:描述
我正在开发一个小型 Java 游戏服务器,我需要以异步方式保存和更新我的游戏实体,而不会阻塞主线程。直到现在我都在使用休眠,但由于某种原因休眠不喜欢多线程保存和更新操作并抛出几十个不同的异常(请参阅我的最后 10 个问题......这些都是休眠多线程相关的)。
我真的厌倦了那些休眠问题。我只想要一些 ORM 或库,让我能够以一种简单、异步的方式保存、加载和更新我的 pojo... 而无需在数周或数月内寻找解决方案。
问题
Java 游戏可以使用什么 ORM 或库来进行非阻塞保存、更新和加载操作?我更喜欢 SQL 数据库,但 nosql 应该也可以正常工作。
我很高兴能在这个话题上得到任何帮助:)
【问题讨论】:
抱歉,图书馆推荐离题了 @Michael 从什么时候开始?我确实看到了几十个类似的问题……库、框架、建议…… 哦,可能是过去 10 年。 @Michael Weird 为什么? ***.com/help/on-topic 项目 #4 【参考方案1】:Hibernate 对我在调度程序中执行的工作正常。它只是不喜欢当您加载实体并尝试在更晚的时间将更改保留在当前请求之外 - 这里还有很多不确定性需要处理,因为实体不再与数据库同步。
您不能在某种数据对象中收集您的更改,然后在持久化时执行整个循环:从存储库加载,使用数据对象中的数据进行更新,然后持久化?应该没有问题。
【讨论】:
谢谢!好吧,这可能会起作用,但它需要很多选择语句......我认为这叫做合并操作,对吧?不确定这里的 n+1 问题,尤其是关系 嗯,是的,您可能会有更多选择,但由于它们通常比更新便宜得多,我想说这不是什么大问题。收集数据后,您知道要更新哪些实体,因此您使用 repository.findAllById(listOfIds) 并一次捕获它们。然后合并您的更改并调用 repository.saveAll(listOfEntities)。不确定我是否会使用一些“魔术”合并的东西,你可能知道发生了什么变化,所以你可以将它们收集在一些 HashMap 中并一个一个地更新实体。 关系是一个单独的主题,对吧。我总是会使用 LAZY 初始化,并且可能还会做额外的循环。也许这篇文章可以帮助你vladmihalcea.com/jpa-hibernate-performance-issues以上是关于用于异步保存和更新操作的 ORM/库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
用于运行异步请求的 Python Celery 与线程库 [关闭]
doraemon的python ORM必会操作(国庆大更新)