我正在使用伯克利数据库......
通常在这种类型的数据库中,您打开一个环境,这是一堆文件来控制锁定和事务等,然后在这个环境中打开您的数据库......
问题是有很多数据库要打开....
打开数据库的方法是opendatabase()
但是,打开和关闭数据库总是很慢......文档说
打开数据库是相对的 昂贵的操作,并维持一个 一组开放数据库通常是 优选反复打开和 关闭每个新数据库 查询。
问题是如何保持那套?????? 我认为一个简单的解决方案是延迟加载
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);
但这有双重检查锁定的问题..对吗?
另一个问题是我想要一个默认文件名或一个用户指定的文件名。当然,创建一个DatabaseManager很容易,但总会发生双重检查锁定问题。
任何想法如何维护一组数据库句柄??
答案 0 :(得分:2)
使用基本的Java同步技术和线程安全的数据结构(如ConcurrentHashMap)来存储数据库句柄。你可能应该阅读this book,如果你还没有,因为它涵盖了你需要解决的这类问题。