Loading AI tools
来自维基百科,自由的百科全书
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"[2]。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的面向文档的NoSQL数据库。其中一个显著的功能就是多主复制。CouchDB的第一个版本发布在2005年,在2008年成为了Apache的项目。
不同于关系型数据库,CouchDB没有将数据和关系存储在表格里。替代的,每个数据库是一个独立的文档集合。每一个文档维护其自己独立的数据和自包涵的schema。一个应用程序可能会访问多个数据库,比如其中一个位于用户的手机上,另一个位于在远程的服务器上。文档的元数据包含版本信息,让其能够合并可能因为数据库链接丢失导致的任何差异。
CouchDB实现了一个多版本并发控制(MVCC)形式,用来避免在数据库写操作的时候对文件进行加锁。冲突留给应用程序去解决。解决一个冲突的通用操作的是首先合并数据到其中一个文档,然后删除旧的数据[3]。
其他功能包括文档级别的ACID语义和最终一致性,MapReduce,复制(Replication)。它还支持通过一个做Futon的内置web应用程序来进行数据库管理。
CouchDB(Couch是 cluster of unreliable commodity hardware的首字母缩写)[4]是前IBM的Lotus Notes开发者Damien Katz创建于2005年的一个项目。Damien Katz将其定义为“面向大规模可扩展对象数据库的存储系统”。他对该数据库的目标是让其成为互联网的数据库,其从底层的设计就支持部署web应用程序。他自己通过将近两年的时间创建了该项目同时将其作为开源项目在GNU General Public License下发布。
在2008年2月,其成为Apache Incubator项目,同时其许可协议变更为Apache License。几个月后,其升级为顶级项目。这促使了其第一个稳定版在2010年7月发布。
在2012年初期,Damien Katz离开了项目专注于Couchbase Server。不过该项目还在继续进行中,在2012年4月发布了1.2版本,2013年4月发布了1.3版本。
CouchDB内置了一个的叫做Futon的通过web访问的管理接口。
CouchDB的复制和同步强大功能让其能够使用在无法保证网络链接但是应用程序必须继续在离线模式工作的移动设备。
一些使用CouchDB的企业示例:
CoucbDB管理JSON文档的集合。文档通过视图进行组织。视图通过Aggregate函数进行定义,过滤查询的时候并行计算,类似MapReduce。
应用程序通过HTTP与CouchDB进行交互。下面是一些通过cURL进行演示的示例。这些示例假设CouchDB运行在本地localhost(127.0.0.1)的5984端口。
Action | Request | Response |
---|---|---|
获取服务器基本信息 | curl http://127.0.0.1:5984/
|
{
"couchdb": "Welcome",
"version":"1.1.0"
}
|
创建一个名为wiki的数据库 | curl -X PUT http://127.0.0.1:5984/wiki
|
{"ok": true}
|
尝试创建第一个名为 wiki的数据库 | curl -X PUT http://127.0.0.1:5984/wiki
|
{
"error":"file_exists",
"reason":"The database could not be created, the file already exists."
}
|
获取关于wiki数据库的信息 | curl http://127.0.0.1:5984/wiki
|
{
"db_name": "wiki",
"doc_count": 0,
"doc_del_count": 0,
"update_seq": 0,
"purge_seq": 0,
"compact_running": false,
"disk_size": 79,
"instance_start_time": "1272453873691070",
"disk_format_version": 5
}
|
删除数据库 wiki | curl -X DELETE http://127.0.0.1:5984/wiki
|
{"ok": true}
|
创建一个文档,请求CoudbDB来生成一个document id | curl -X POST -H "Content-Type: application/json" --data \
'{ "text" : "Wikipedia on CouchDB", "rating": 5 }' \
http://127.0.0.1:5984/wiki
|
{
"ok": true,
"id": "123BAC",
"rev": "946B7D1C"
}
|
CouchDB包含了一些其他的开源项目作为其自己的内置包。
元件 | 描述 | 许可证 |
---|---|---|
SpiderMonkey | SpiderMonkey是一个JavaScript引擎。 | Mozilla公共许可协议 |
jQuery | jQuery是一个轻量级的浏览器函式庫。 | GNU通用公共许可证和MIT许可证 |
ICU | ICU是成熟的开源项目。 | MIT许可证 |
OpenSSL | OpenSSL是一个开源协议。实现了基本的密码功能,并提供各种实用功能。 | Apache许可证 |
Erlang | Erlang是一种通用的并发编程语言和运行系统。Erlang的连续子集是函数式语言,与严格评测,单分配和动态类型。 | Mozilla公共许可协议 |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.