介绍
- 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对象,然后再映射回去,从而使过程更容易。
- 例:
结构体:
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;
}
}
翻译自: https://www.javacodegeeks.com/2013/08/couchdb-relax.html