2012-04-27 3 views
6

में लाइटकच एपीआई का उपयोग करके कॉचडब में थोक दस्तावेज़ों को कैसे सहेजना है I जावा के माध्यम से कॉचडब से कनेक्ट करने के लिए lightcouch API का उपयोग कर रहा हूं। मैं dbclient.save (ऑब्जेक्ट) विधि का उपयोग कर एक दस्तावेज़ को सहेजने में सक्षम हूं। हालांकि, मेरी आवश्यकता एक समय में थोक दस्तावेजों को बचाने के लिए है। मैं लाइटकॉच एपीआई का उपयोग करके थोक दस्तावेज़ों को सहेजने से संबंधित कोई भी तरीका नहीं ढूंढ पा रहा हूं। कृपया किसी भी संभावित समाधान का सुझाव दें।जावा

अग्रिम धन्यवाद!

+0

लाइटकॉच एपीआई में बचत बल्क समर्थित नहीं है, हालांकि यह अगली रिलीज में योजनाबद्ध है। – ahmedyha

+0

यदि यह एक शो स्टॉपर है तो आप एक निबंध लिखने के लिए – skipy

उत्तर

3

मैंने इसे जाने का फैसला किया। मेरे पास डेटाबेस रखने वाले दस्तावेज़ हैं जो किसी व्यक्ति का वर्णन करते हैं।

public class Person extends Document { 

    private String firstname = ""; 
    private String lastname = ""; 
    private int age = -1; 

    public Person(String firstname, String lastname, int age) { 
     super(); 
     this.setFirstname(firstname); 
     this.setLastname(lastname); 
     this.setAge(age); 
    } 

    // setters and getters omitted for brevity 

} 

एल्गोरिथ्म सरल है:

यहाँ मेरी Person वर्ग जो DocumentLightCouch फैली हुई है।

  1. प्रकार Document
  2. की एक सरणी बनाएँ परिवर्तित अनुरोध शरीर में सरणी
  3. यह
भेजें सरणी
  • एक HTTP पोस्ट अनुरोध
  • रखो JSON बनाएं में अपने दस्तावेज़ों रखो

    यहां मोटे तौर पर कोड कैसा दिख सकता है।

    नोट: ब्रेवटी के लिए छोड़े गए/प्रयास करें! बेशक आप उन्हें उपयोग करने की उम्मीद है।

    public static void main(String[] args) { 
    
        // You could also use a List and then convert it to an array 
        Document[] docs = new Document[2]; 
        docs[0] = new Person("John", "Smith", 34); 
        docs[1] = new Person("Jane", "Smith", 30); 
    
        DefaultHttpClient httpClient = new DefaultHttpClient(); 
    
        // Note the _bulk_docs 
        HttpPost post = new HttpPost("http://127.0.0.1:5984/persons/_bulk_docs"); 
    
        Gson gson = new Gson(); 
        StringEntity data = 
         new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}"); 
        data.setContentType("application/json"); 
        post.setEntity(data); 
    
        HttpResponse response = httpClient.execute(post); 
    
        if (response.getStatusLine().getStatusCode() != 201) { 
         throw new RuntimeException("Failed. HTTP error code: " 
          + response.getStatusLine().getStatusCode()); 
        } 
        BufferedReader br = new BufferedReader(
         new InputStreamReader((response.getEntity().getContent()))); 
        String output; 
        while ((output = br.readLine()) != null) { 
         System.out.println(output); 
        } 
        httpClient.getConnectionManager().shutdown(); 
    } 
    

    मैं इस उदाहरण में दो उल्लेखनीय भागों का वर्णन करेंगे।

    पहला दस्तावेज संग्रह का संग्रह है। इस मामले में मैंने उदाहरण के लिए List के बजाय एक सरणी का उपयोग किया था।

    Document[] docs = new Document[2]; 
    docs[0] = new Person("John", "Smith", 34); 
    docs[1] = new Person("Jane", "Smith", 30); 
    

    साथ ही आप एक List का उपयोग करें और बाद में इसे एक सरणी में बदलने जावा की उपयोगिता तरीकों का उपयोग कर सकता है।

    दूसरा एक StringEntity है। एक अनुरोध के साथ कई दस्तावेजों को संशोधित करने के लिए HTTP Bulk Document API पर कॉच डीबी के दस्तावेज के अनुसार आपके अनुरोध निकाय की जेएसओएन संरचना इस तरह दिखनी चाहिए।

    { 
        "docs": [ 
        DOCUMENT, 
        DOCUMENT, 
        DOCUMENT 
        ] 
    } 
    

    यह कुछ हद तक बदसूरत StringEntity परिभाषा का कारण है।

    StringEntity data = new StringEntity("{ \"docs\": " + gson.toJson(docs) + "}"); 
    

    एक प्रतिक्रिया आप वस्तुओं जिसका क्षेत्रों * _ id * प्रतिनिधित्व करते हैं और एक सौदे स्थिति संकेतक के साथ डाला दस्तावेज़ के * _rev * युक्त एक JSON सारणी मिल जाएगा के रूप में।

  • +1

    +1 को सोफे करने के लिए अपना थोक कॉल करने के लिए अपाचे हेट्स्क्लिएंट और जैक्सन जैसे कॉल का उपयोग कर सकते हैं। –

    0

    मैंने वही किया लेकिन स्प्रिंग रेस्ट टेम्पलेट के साथ मैंने एक कक्षा बनाई जो दस्तावेज़ों को अद्यतन करने के लिए उसे अद्यतन करने के लिए रखेगा।

    public class BulkUpdateDocument { 
    
        private List<Object> docs; 
        }  
    

    मेरा आराम कोड इस तरह दिखता है।

    BulkUpdateDocument doc = new BulkUpdateDocument(ListOfObjects); 
    
        Gson gson = new Gson(); 
        RestTemplate restTemplate = new RestTemplate(); 
    
        HttpHeaders header = new HttpHeaders(); 
        header.setContentType(MediaType.APPLICATION_JSON_UTF8); 
        HttpEntity<?> requestObject = new HttpEntity<Object>(gson.toJson(doc), header); 
    
        ResponseEntity<Object> postForEntity = restTemplate.postForEntity(path + "/_bulk_docs", requestObject, Object.class);