2012-07-05 38 views
11

Một số tùy chọn gọn nhẹ cho sự bền bỉ trong Groovy là gì? Tôi đã xem xét serialization và XML cho đến nay nhưng tôi muốn một cái gì đó một chút mạnh mẽ hơn so với những người, ít nhất là vì vậy tôi không phải viết lại toàn bộ tập tin mỗi lần. Lý tưởng nhất, nó sẽ:Tính ổn định của Groovy nhẹ

  • Yêu cầu không có lọ trong classpath, sử dụng Nho thay
  • Yêu cầu không ngoài quy trình, quản lý, hoặc xác thực (vì vậy tất cả nhúng)
  • Hỗ trợ khóa

tôi có kế hoạch về cách sử dụng nó để lưu trữ một số thông tin giữa các lần chạy của một tập lệnh Groovy độc lập. Tôi tưởng tượng các phản hồi sẽ tập trung xung quanh cơ sở dữ liệu SQL và NoSQL. Các liên kết đến các trang thể hiện cách sử dụng này sẽ được đánh giá cao. Cảm ơn!

Trả lời

17

Full Database SQL

Các h2 trong quá trình cơ sở dữ liệu SQL là rất dễ sử dụng. Đây là grails cùng cơ sở dữ liệu sử dụng theo mặc định, nhưng nó đơn giản để sử dụng trong một kịch bản hấp dẫn cũng như:

@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") 

Trong trường hợp này cơ sở dữ liệu sẽ được lưu vào một tập tin gọi hello.h2.db.

Simple Maps dai dẳng

lựa chọn khác là jdbm, cung cấp bản đồ dai dẳng đĩa hậu thuẫn. Bên trong, nó sử dụng serialization của Java. Giao diện lập trình đơn giản hơn nhiều, nhưng nó cũng kém mạnh hơn nhiều so với một db SQL đầy đủ. Không có hỗ trợ cho truy cập đồng thời, nhưng nó được đồng bộ hóa và an toàn luồng, có thể là đủ tùy thuộc vào yêu cầu khóa của bạn. Dưới đây là ví dụ đơn giản:

@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 

Thao tác này sẽ lưu bản đồ vào một nhóm tệp.

7

chỉ cần cập nhật một chút về sự kiên trì đơn giản khi sử dụng JDBM. Truy cập đồng thời được hỗ trợ ngay bây giờ. Tên đã thay đổi từ JDBM4 thành 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() 
0

Chronicle Map là một tồn ConcurrentMap thực hiện cho JVM.

Ví dụ sử dụng:

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() 
Các vấn đề liên quan