Groovy中持久性的一些輕量級選項是什麼?到目前爲止,我已經考慮過序列化和XML,但我希望比這些更強健一些,至少我不必每次都重寫整個文件。理想情況下,它會:輕量Groovy持久性
- 需要在類路徑中沒有JAR文件,用葡萄代替
- 不需要外部流程,管理或認證(所以所有的嵌入式)
- 支持鎖定
我計劃使用它來緩存獨立Groovy腳本運行之間的一些信息。我想應該將重點放在SQL和NoSQL數據庫上。鏈接到頁面展示這種用法將不勝感激。謝謝!
Groovy中持久性的一些輕量級選項是什麼?到目前爲止,我已經考慮過序列化和XML,但我希望比這些更強健一些,至少我不必每次都重寫整個文件。理想情況下,它會:輕量Groovy持久性
我計劃使用它來緩存獨立Groovy腳本運行之間的一些信息。我想應該將重點放在SQL和NoSQL數據庫上。鏈接到頁面展示這種用法將不勝感激。謝謝!
的h2進程SQL數據庫是非常容易使用。這是同一個數據庫引擎的Grails默認使用,但它是簡單的Groovy腳本中使用,以及:
@GrabConfig(systemClassLoader=true)
@Grab(group='com.h2database', module='h2', version='1.3.167')
import groovy.sql.Sql
def sql = Sql.newInstance("jdbc:h2:hello", "sa", "sa", "org.h2.Driver")
sql.execute("create table test (id int, value text)")
sql.execute("insert into test values(:id, :value)", [id: 1, value: 'hello'])
println sql.rows("select * from test")
在這種情況下,數據庫將被保存到一個名爲hello.h2.db
文件。
另一個替代方案是jdbm,它提供了磁盤備份持久地圖。在內部,它使用Java的序列化。編程接口要簡單得多,但它的功能也不如完整的SQL數據庫。不支持併發訪問,但它是同步的並且是線程安全的,這可能足夠取決於您的鎖定要求。這裏有一個簡單的例子:
@Grab(group='org.fusesource.jdbm', module='jdbm', version='2.0.1')
import jdbm.*
def recMan = RecordManagerFactory.createRecordManager('hello')
def treeMap = recMan.treeMap("test")
treeMap[1] = 'hello'
treeMap[100] = 'goodbye'
recMan.commit()
println treeMap
這會將地圖保存爲一組文件。
只是一個簡單的持久性使用JDBM小Groovy更新。現在支持併發訪問。名稱已從JDBM4更改爲MapDB。
@Grab(group='org.mapdb', module='mapdb', version='0.9.3')
import java.util.concurrent.ConcurrentNavigableMap
import org.mapdb.*
DB db = DBMaker.newFileDB(new File("myDB.file"))
.closeOnJvmShutdown()
.make()
ConcurrentNavigableMap<String,String> map = db.getTreeMap("myMap")
map.put("1", "one")
map.put("2", "two")
db.commit()
println "keySet "+map.keySet()
assert map.get("1") == "one"
assert map.get("2") == "two"
db.close()
Chronicle Map是堅持ConcurrentMap
實施JVM。
用例:
ConcurrentMap<String, String> store = ChronicleMap
.of(String.class, String.class)
.averageKey("cachedKey").averageValue("cachedValue")
.entries(10_000)
.createPersistedTo(new File("cacheFile"))
store.put("foo", "bar")
store.close()