-
Apache CouchDB
™ is a database -
that uses JSON for documents,
-
JavaScript for MapReduce queries,
-
and regular HTTP for an API
CouchDB - Cluster of unreliable commodity hardware database
Lotus Notes的后代. 开发者来自IBM所有数据以文档的方式组织, 使用JSON持久化数据. Append方式修改数据, 视图方式查询修改数据. 视图作为特殊的文档.
文档可以引用其他文档,但不保证有效性和一致性. 文档不可以嵌套文档.
可以带附件,拥有128位唯一标识符. 是半结构化文档. 没有schema也就无效schema迁移.
每个database具有扁平的非层次化的名字空间,
文档索引通过B树算法计算id和版本号得到.
视图以javascript函数定义,不会修改数据,
定义视图的javascript函数叫做map和reduce,
为了效率, 对数据库的写操作不会生成视图. 视图builder负责对视图进行更新.
更新数据不会有锁操作.版本冲突被当作正常场景. 并发版本数没有限制,客户端负责解决冲突.
CouchDB设计之初即考虑了分布式配置.
分布式场景包括集群,离线和远程三种方式, 后两种方式可以在CouchDB实例失去联接情况下进行数据操作
数据备份通过增量方式以文档为单位进行. 既可以备份整个数据库,
CouchDB以REST形式的HTTP请求进行数据操作. 提供了不同语言的接口库. 这种方式易于集成.
CouchDB保证ACID, 但不是强一致性.
CouchDB不会覆盖数据,因此可以保证一致性.即使宕机,
更新文档和数据库头分两步提交. CouchDB启动时校验数据保证数据一致性
CouchDB需要定期压缩数据以便节省磁盘空间.
CouchDB使用文档授权列表实现访问控制.
管理员权限
文档写入磁盘前要经过安全评估.
之前CouchDB使用c++实现,
使用shared-nothing集群方案.