是否可以在具有不同进程的同一台计算机(无服务器)上同时使用嵌入式数据库(读/写)。那么在一个多线程进程中并发读/写呢?
Iam试图找出如何在HSQL,H2,Apache Derby和SQLite(通过xerial JDBC)中解决并发性,但我不太了解那些锁定机制(MVCC,OCC等),所以我需要有人纠正我所拥有的找到。
答案 0 :(得分:1)
HSQLDB支持它支持的所有三种事务模型中的完全多线程操作(MVCC,LOCKS和MVLOCKS,它是带有表级锁的MVCC)。
如果在没有服务器的情况下嵌入HSQLDB,根据定义,它是嵌入它的过程的一部分。此进程可以使用多个线程同时访问数据库(例如,嵌入HSQLDB的Web服务器,如TOMEE)。在嵌入式无数据库服务器部署中,没有其他进程可以看到数据库。
在所有模式中,N个写入器和M个读取器可以同时工作。 LOCKS模式锁定表以进行读写,但MVCC模式仅锁定已更新的行。
也可以在嵌入HSQLDB的过程中运行服务器。这样的服务器允许在嵌入数据库的过程的同时访问其他进程。
答案 1 :(得分:1)
还有嵌入式MySQL,通常它被认为对于读取行为更轻 - 通常写入几乎从不为WWW的工作负载而不是全面的OLTP目标服务器。
https://github.com/vorburger/MariaDB4j
我不知道这个项目或其他Java化是否好。
答案 2 :(得分:0)
Firebird 2.5可能是单进程多线程方法的选项
Is Firebird good embedded DB for ASP.NET? Which else?
但你必须建立几个连接(每个线程一个)
更新:在Firebird 3中嵌入式(进程中)服务器(或几个,如果有多个操作系统进程使用嵌入式服务器DLL / LIB.SO)和经典模式独立服务器(现在基本上是嵌入式dll的OS进程加载器可以与同一个数据库文件同时工作。 SuperServer模式独立FB3虽然锁定了数据库文件以进行垄断访问。