java开放式数据库管理句柄
我在使用伯克利的数据库
一般来说,在这种类型的数据库中,你打开一个由一堆文件组成的环境来控制锁定和事务等,然后在这个环境中打开你的数据库
问题是有很多数据库要打开
打开数据库的方法是opendatabase()
然而,打开和关闭数据库总是很慢。。。文件上说
Opening a database is a relatively expensive operation, and maintaining a set of open databases will normally be preferable to repeatedly opening and closing the database for each new query.
问题是如何保持这种状态
我认为一个简单的解决方案是延迟加载
private static Database db;
public CustomerDAO() {
if (db == null) {
try {
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
dbConfig.setType(DatabaseType.BTREE);
db = BDBEnvironment.DEFAULT.getEnvironment().openDatabase(null, "C:\\xxxx\\CUSTOMERS",
null, dbConfig);
但这有一个双重检查锁定的问题。。对吧
另一个问题是,我想要一个默认文件名或用户指定的文件名。。当然,创建数据库管理器很容易,但总是会出现双重检查锁定问题
你知道如何维护一组数据库句柄吗
# 1 楼答案
使用基本的Java同步技术和线程安全的数据结构(如ConcurrentHashMap)来存储数据库句柄。如果你还没有读过this book,你可能应该读一读,因为它涵盖了这类问题所需要的很多内容