可能重复:
Java: TaskExecutor for Asynchronous Database Writes?
我在内存中有一个数据对象的映射,需要能够很快地读写。我希望这些对象在进程重新启动时是持久的,所以我希望将它们存储在一个数据库中。
因为我不想让任何数据库插入或更新减慢我的运行时间,所以我想让它们立即在内存中执行,然后异步地执行到数据库。(如果进程崩溃并丢失一点数据,我甚至可以接受。)
有没有一个Java工具(最好是开源的)具有这种“开箱即用”的能力?用hibernate很容易做到吗?
最佳答案
如我在评论中所述,如果您需要异步写入,并且不想使用hibernate或ehcache:
runnable:在java中实现异步处理的唯一方法是通过扩展runnable的简单类:
public class AsyncDatabaseWriter implements Runnable {
private LinkedBlockingQueue<Data> queue = ....
private volatile boolean terminate = false;
public void run() {
while(!terminate) {
Data data = queue.take();
// write to database
}
}
public void ScheduleWrite(Data data) {
queue.add(data);
}
}
此处还声明:Java: TaskExecutor for Asynchronous Database Writes?
分布式工作线程:如果您想在系统中引入更多的移动部件,那么您可以尝试java替代分布式任务队列,比如celery:hazelcast或octobot。这将需要一个消息层,其中将充当队列,工人将为您完成写入数据库的任务。这看起来有点过头了,但这又取决于你的用例和你想使用你的应用的规模。
我做了一些非常类似的事情,在那里我有一个用例要以异步方式写入数据库,所以我选择了芹菜(python)。示例实现可以在这里找到:artemis
关于java - Java-如何将对象异步保存到数据库? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12772819/