Groovyの永続性のための軽量オプションは何ですか?私はシリアライゼーションとXMLをこれまでのところ考えてきましたが、少なくともこれらのものよりも堅牢なものを欲しかったので、毎回ファイル全体を書き直す必要はありません。理想的には、それがあろう:軽量Groovy永続性
- 代わり
- のブドウを用いて、クラスパスにはJARファイルを必要としない私は計画外部プロセス、投与、又は
ロック認証(SOすべての埋め込み)
Groovyの永続性のための軽量オプションは何ですか?私はシリアライゼーションとXMLをこれまでのところ考えてきましたが、少なくともこれらのものよりも堅牢なものを欲しかったので、毎回ファイル全体を書き直す必要はありません。理想的には、それがあろう:軽量Groovy永続性
ロック認証(SOすべての埋め込み)
h2インプロセスSQLデータベースは、非常に使いやすいです。これは、同じデータベースエンジンのGrailsがデフォルトで使用されるが、それは同様にグルーヴィースクリプトで使用するために簡単です:この場合
@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を使用した単純な永続性の更新について少し面白い更新です。同時アクセスは現在サポートされています。名前が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 JVMのための持続ConcurrentMap
実装です。
使用例:
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()