2012-07-05 17 views
11

ग्रोवी में दृढ़ता के लिए कुछ हल्के विकल्प क्या हैं? मैंने अब तक क्रमबद्धता और एक्सएमएल पर विचार किया है, लेकिन मुझे उनसे थोड़ा अधिक मजबूत चाहिए, कम से कम इसलिए मुझे हर बार पूरी फाइल को फिर से लिखना नहीं है। आदर्श रूप में, यह होगा:लाइटवेट ग्रोवी दृढ़ता

  • classpath में कोई जार आवश्यकता होती है, अंगूर उपयोग करने के बजाय
  • कोई बाहरी प्रक्रियाओं, प्रशासन, या प्रमाणीकरण (ताकि सभी एम्बेडेड)
  • समर्थन ताला लगा आवश्यकता

मैं की योजना एक स्टैंडअलोन ग्रोवी लिपि के रनों के बीच कुछ जानकारी कैश करने के लिए इसका उपयोग करने पर। मुझे लगता है कि प्रतिक्रिया एसक्यूएल और नोएसक्यूएल डेटाबेस के आसपास केंद्रित होगी। इस उपयोग को प्रदर्शित करने वाले पृष्ठों के लिंक की सराहना की जाएगी। धन्यवाद!

उत्तर

17

पूर्ण एसक्यूएल डाटाबेस

h2 प्रक्रिया में SQL डेटाबेस का उपयोग करने के बहुत आसान है।

@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 नामक एक फ़ाइल में सहेजा जाएगा: यह एक ही डेटाबेस इंजन grails डिफ़ॉल्ट रूप से उपयोग करता है, लेकिन यह भी एक ग्रूवी लिपि में उपयोग करने के लिए आसान है।

सरल लगातार मैप्स

एक अन्य विकल्प jdbm है, जो डिस्क समर्थित लगातार नक्शे प्रदान करता है। आंतरिक रूप से, यह जावा के क्रमिकरण का उपयोग करता है। प्रोग्रामिंग इंटरफेस बहुत आसान है, लेकिन यह एक पूर्ण उड़ा एसक्यूएल डीबी से भी कम शक्तिशाली है। समवर्ती पहुंच के लिए कोई समर्थन नहीं है, लेकिन यह सिंक्रनाइज़ और थ्रेड सुरक्षित है, जो आपकी लॉकिंग आवश्यकताओं के आधार पर पर्याप्त हो सकता है। यहां एक साधारण उदाहरण दिया गया है:

@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 

यह मानचित्र को फ़ाइलों के एक समूह में सहेज देगा।

7

जेडीबीएम का उपयोग करके सरल दृढ़ता पर बस थोड़ा सा गड़बड़ अपडेट। समवर्ती पहुंच अब समर्थित है। नाम जेडीबीएम 4 से मैपडीबी में बदल गया है।

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