是否可以在具有不同进程的同一台计算机(无服务器)上同时(读取/写入)使用嵌入式数据库。在一个多线程进程中进行并发读/写又如何呢?

我试图找出如何在HSQL,H2,Apache Derby和SQLite中(通过xerial JDBC)解决并发性,但是我不太了解那些锁定机制(MVCC,OCC等),所以我需要有人来纠正我发现的问题。


H2:只能将一个可能是多线程的进程连接到数据库。

表级锁定用于写读取操作不需要锁定,并且可以与写操作同时进行(N个读取器一个写入器)
MVCC-表或行级别的写入锁定(N个读取器一个写入器??)

Hsql:似乎与H2完全相同,但MVCC机制有所不同
Apache Derby(JavaDB):只有一个可能是多线程的进程可以连接到数据库。

表级锁定或行级锁定以进行写入。读操作不需要锁定,并且可以与写操作同时进行(N个读取器一个写入器)

SQLite(串行JDBC):多个进程可以同时连接,但是只有一个进程可以执行写操作。 (数据库锁定)。

有写锁时,其他进程或线程无法执行读写操作?

最佳答案

HSQLDB在它支持的所有三个事务模型(MVCC,LOCKS和MVLOCKS,即具有表级锁的MVCC)中都支持完全多线程操作。

如果HSQLDB是在没有服务器的情况下嵌入式运行的,那么根据定义,它是嵌入该过程的一部分。此过程可以使用多个线程同时访问数据库(例如,嵌入HSQLDB的Web服务器,例如TOMEE)。在没有数据库的嵌入式服务器部署中,没有其他进程可以看到该数据库。

在所有模式下,N个作者和M个读者可以同时工作。 LOCKS模式锁定表以进行读取和写入,但是MVCC模式仅锁定已更新的行。

也可以在嵌入HSQLDB的过程中运行服务器。这样的服务器允许与嵌入数据库的进程同时访问其他进程。

09-11 02:35
查看更多