MapDB初探

mahui_1980發表於2020-12-01

MapDB是一個開源,最快的Java資料庫,效能可與java.util 集合相當。
Maven依賴

<dependency>
    <groupId>org.mapdb</groupId>
    <artifactId>mapdb</artifactId>
    <version>VERSION</version>
</dependency>


快照庫

<repositories>
    <repository>
    <id>sonatype-snapshots</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.mapdb</groupId>
        <artifactId>mapdb</artifactId>
        <version>VERSION</version>
    </dependency>
</dependencies>

maven hello world

//import org.mapdb.*
DB db = DBMaker.memoryDB().make();
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");


DB db = DBMaker.fileDB("file.db").make(); 
ConcurrentMap map = db.hashMap("map").createOrOpen();
map.put("something", "here");
db.close();


MapDB使用泛型序列化

DB db = DBMaker.fileDB("file.db").fileMmapEnable().make(); 
ConcurrentMap<String,Long> map = 
    db.hashMap("map", Serializer.STRING, Serializer.LONG)
        .createOrOpen(); 
map.put("something", 111L);
db.close();


DBMaker‌使用
可以使用許多*DB 靜態方法,例如DBMaker.fileDB()。MapDB具有很多格式和模式,每個xxxDB()使用不同的模式:memoryDB()開啟一個由byte [] 陣列支援的記憶體資料庫,
appendFileDB()開啟一個使追加的日誌檔案等。

DB db = DBMaker.fileDB("/some/file")
//TODO encryption API
//.encryptionEnable("password")
.make();

開啟並建立集合
create() 建立新的集合。 如果集合存在,將扔出異常。
open() 開啟存在的集合。 如果集合不存在,將扔出異常。
createOrOpen() 如果存在就開啟, 否則建立。

NavigableSet<String> treeSet = 
    db.treeSet("treeSet").maxNodeSize(112).
        createOrOpen();


        
        
事務
DB具有處理事務生命週期的方法: commit() , rollback() and close() .        

ConcurrentNavigableMap<Integer,String> map = 
    db.treeMap("collectionName", Serializer.INTEGER, Serializer.STRING).
        createOrOpen();
map.put(1,"one");
map.put(2,"two");
//map.keySet() is now [1,2] even before commit
db.commit(); //persist changes into disk map.put(3,"three");
//map.keySet() is now [1,2,3] db.rollback(); //revert recent changes
//map.keySet() is now [1,2]
db.close();