是否可以在同一台具有不同进程的计算机(没有服务器)上同时使用嵌入式数据库(读/写)。那么,在一个多线程进程中并发读写又如何呢?
我试图找出在HSQL、H2、Apache和SQLite (通过xerial )中如何解决并发问题,但我不太明白那些锁定机制(MVCC、OCC等),所以我需要有人纠正我发现的内容。
发布于 2015-05-28 22:20:15
HSQLDB支持它所支持的所有三个事务模型(MVCC、LOCKS和MVLOCKS,即具有表级锁的MVCC )中的完全多线程操作。
如果HSQLDB是在没有服务器的情况下运行的,根据定义,它是嵌入它的进程的一部分。该进程可以使用多个线程同时访问数据库(例如嵌入HSQLDB的web服务器,如TOMEE )。在没有数据库服务器的嵌入式部署中,没有其他进程可以看到数据库.
在所有的模式中,N作者和M读者可以同时工作。锁模式锁定表以进行读和写,但MVCC模式只锁定已更新的行。
还可以在嵌入HSQLDB的进程中运行服务器。这样的服务器允许与嵌入数据库的进程同时访问其他进程。
发布于 2015-05-29 11:41:12
还有MySQL嵌入式系统,人们通常认为它的读写工作负载比大规模OLTP目标服务器更轻--通常是写的--而不是典型的工作负载。
https://github.com/vorburger/MariaDB4j
我不知道这个项目或其他Java化是否好。
发布于 2015-05-29 00:37:54
Firebird 2.5可能是单进程多线程方法的一种选择
Is Firebird good embedded DB for ASP.NET? Which else?
但是您必须建立几个连接(每个线程一个)。
更新:在Firebird 3中,嵌入式(进程内)服务器(或多个,如果有多个OS进程使用嵌入式服务器DLL/LIB.SO)和经典模式独立服务器(基本上现在是嵌入式dll的OS进程加载器)可以与同一个数据库文件同时工作。超级服务器模式的独立FB3虽然锁定了数据库文件以进行独占访问.
https://stackoverflow.com/questions/30511616
复制相似问题