CouchDB –放松

介绍

  • Apache CouchDB,通常称为CouchDB,是一个开放源代码数据库,着重于易用性和“完全包含Web的数据库”。
  • 它是一个NoSQL数据库,使用JSON来存储数据,使用MapReduce和HTTP作为API来将JavaScript作为查询语言来存储数据。
  • 它的独特功能之一是多​​主复制。
  • Couch是不可靠的商品硬件集群的首字母缩写
  • CouchDB数据库缺少模式或严格的预定义数据结构(例如表)。 存储在CouchDB中的数据是一个JSON文档。
  • 数据或文档的结构可以动态更改,以适应不断变化的需求。
  • CouchDB还提供了一个内置管理界面,可通过名为Futon的Web进行访问。

主要特点

  • 文件储存:
    • CouchDB将数据存储为“文档”,作为一个或多个以JSON表示的字段/值对。
  • 酸性语义:
    • CouchDB提供ACID语义。
  • 映射/缩小视图和索引:
    • 使用视图来构造存储的数据。
  • 带有复制的分布式体系结构:
    • CouchDB在设计时考虑了双向复制(或同步)和脱机操作。
  • REST API:
    • 所有项目均具有通过HTTP公开的唯一URI。
  • 最终一致性:
    • CouchDB保证最终的一致性,以便能够提供可用性和分区容限。
  • 专为离线制作:
    • CouchDB可以复制到可以脱机的设备(例如智能手机),并在设备重新联机时为您处理数据同步。
  • 无架构:
    • 与旨在存储和报告高度结构化,相互关联的数据的SQL数据库不同,CouchDB旨在存储和报告大量面向文档的半结构化数据。

安装(Ubuntu)

  • 打开终端并执行
sudo apt-get install couchdb -y
  • 如果aptitude / apt-get安装给出错误消息,则ouchdb可能无法访问其pid文件。
  • 固定:
sudo chown -R couchdb /var/run/couchdb
  • 需要重新运行安装脚本:
sudo dpkg --configure couchdb

对于验证CouchDB,请检查Futon: http : //127.0.0.1 : 5984/ _utils/ index.html

*要在其他操作系统上进行安装-http: //wiki.apache.org/couchdb/Installation

CouchDB Java客户端

  • 埃克托普
  • 杰拉克斯
  • jcouchdb
  • DroidCouch
  • CouchDB4J
  • LightCouch

CouchDB4J示例

  • CouchDB4J是CouchDB的更新的Java库。
  • 它在后台处理对CouchDB服务器的REST样式调用,并直接为您提供JSON对象的句柄。
  • CouchDB4J使用JSON-lib处理与JSON对象之间的映射,这使得在对象上获取/设置属性非常容易。
  • 您甚至可以将Java对象映射到JSON对象,然后再映射回去,从而使过程更容易。
  • 例:

Selection_013

结构体:

CouchDBCompleteDemo.java

package com.couchdb.demo;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.List;

import java.util.Map;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.json.simple.JSONValue;

import com.fourspaces.couchdb.Database;

import com.fourspaces.couchdb.Document;

import com.fourspaces.couchdb.Session;

import com.fourspaces.couchdb.ViewResults;

public class CouchDBCompleteDemo {

   static Session dbSession ;

   static Database db;

   public static void main(String[] args) {

       String dbName = "foodb";

       createDatabase(dbName);

       saveDocument(getDocument("1", "Willian", "J2EECOE", "TL", "Android"));

       saveDocument(getDocument("2", "Joanne", "J2EECOE", "Developer", "Java"));

       saveDocument(getDocument("3", "suzzane", "J2EECOE", "Sr. Developer", "Java"));

       saveDocument(getDocument("4", "Harley", "J2EECOE", "Sr. Developer", "Java"));

       saveDocument(getDocument("5", "Julian", "J2EECOE", "Developer", "Java"));

       saveDocument(getDocument("6", "Peter", "J2EECOE", "Developer", "Java"));

       getTotalDocumentCount();

       viewAllDocuments();

       viewsDemo();

//        deleteDocument("6");

//        getTotalDocumentCount();

//        deleteDatabase(dbName);

   }

   public static void createDatabase(String dbName){

       dbSession = new Session("localhost", 5984);

       db = dbSession.createDatabase(dbName);

       if(db==null)

           db = dbSession.getDatabase(dbName);

   }

   public static Document getDocument(String id,String name,String group,String designation,String language){

       Document doc = new Document();

       doc.setId(id);

       doc.put("EmpNO", id);

       doc.put("Name", name);

       doc.put("Group", group);

       doc.put("Designation", designation);

       doc.put("Language", language);

       return doc;

   }

   public static void saveDocument(Document doc){

       try {

           db.saveDocument(doc);

       } catch (Exception e) {

       }

   }

   public static int getTotalDocumentCount(){

       int count = db.getDocumentCount();

       System.out.println("Total Documents: " + count);

       return count;

   }

   public static void deleteDocument(String id){

       Document d = db.getDocument(id);

       System.out.println("Document 1: " + d);

       db.deleteDocument(d);

   }

   public static void deleteDatabase(String dbName){

       dbSession.deleteDatabase(dbName);

   }

   public static void viewAllDocuments(){

       ViewResults results = db.getAllDocuments();

       List<Document> documentsList = results.getResults();

       if(documentsList!=null)

       {

           for(Document doc : documentsList)

           {

               System.out.println(doc.get("id") + " : " +  doc);

           }

       }

   }

   public static void viewsDemo(){

       if(db!=null)

       {

Document doc = null;

           try {

               doc = db.getDocument("_design/couchview");

           } catch (Exception e1) {

               doc = null;

           }

           try {

               if(doc==null)

               {

                   doc = new Document();

                   doc.setId("_design/couchview");

                   String str = "{\"javalanguage\": {\"map\": \"function(doc) { if (doc.Language == 'Java')  emit(null, doc) } \"}, \"java_and_se\": {\"map\": \"function(doc) { if (doc.Language == 'Java' & doc.Designation == 'SE')  emit(null, doc) } \"}}";

                   doc.put("views", str);

                   db.saveDocument(doc);

               }

           } catch (Exception e) {

           }

       }

       try {

           DefaultHttpClient httpclient = new DefaultHttpClient();

           HttpGet get = new HttpGet("http://localhost:5984/foodb/_design/couchview/_view/javalanguage");

           HttpResponse response = httpclient.execute(get);

           HttpEntity entity=response.getEntity();

           InputStream instream = entity.getContent();

           BufferedReader reader = new BufferedReader(new InputStreamReader(instream));

           String strdata = null;

           String jsonString = "" ;

           while( (strdata =reader.readLine())!=null)

           {

//                   System.out.println(strdata);

                  jsonString += strdata;

           }

           System.out.println("Json String: " + jsonString);

           Map<String, Object> jsonMap = getMapFromJsonString(jsonString);

           if(jsonMap!=null)

           {

               System.out.println("total_rows: " + jsonMap.get("total_rows"));

               System.out.println("offset: " + jsonMap.get("offset"));

               List<Map> rowsList = (List<Map>) jsonMap.get("rows");

               if(rowsList!=null)

               {

                   for(Map row: rowsList)

                   {

                       System.out.println("----------------");

                       System.out.println("Id: " + row.get("id"));

                       System.out.println("Value: " + row.get("value"));

                       System.out.println("Name: " + ((Map)row.get("value")).get("Name"));

                       System.out.println("_id: " + ((Map)row.get("value")).get("_id"));

                       System.out.println("Language: " + ((Map)row.get("value")).get("Language"));

                       System.out.println("EmpNO: " + ((Map)row.get("value")).get("EmpNO"));

                       System.out.println("Designation: " + ((Map)row.get("value")).get("Designation"));

                       System.out.println("Group: " + ((Map)row.get("value")).get("Group"));

                   }

               }

           }

       } catch (ClientProtocolException e) {

           e.printStackTrace();

       } catch (IllegalStateException e) {

           e.printStackTrace();

       } catch (IOException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }    

   }

   public static Map<String, Object> getMapFromJsonString(String jsonString){

       Map<String, Object> jsonMap = (Map<String, Object>) JSONValue.parse(jsonString);

       System.out.println("Json Map: " + jsonMap);

       return jsonMap;

   }
}

参考: CouchDB –Sunil Gulabani博客的JCG合作伙伴 Sunil Gulabani 放松

翻译自: https://www.javacodegeeks.com/2013/08/couchdb-relax.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值