通天战队|「文档数据库之争」MongoDB和CouchDB的比较( 二 )
CouchDB架构
REST API用于编写和查询数据 。 它还提供文档读取、添加、编辑和删除功能 。 它通过MVCC实现使用ACID模型而不是BASE 。 就像MongoDB支持设备离线时的复制一样 。 它使用一种称为最终一致性的特殊复制模型 。 CouchDB在数据方面是高度可靠的 。 单节点数据库使用仅追加的抗崩溃数据结构 , 而多模式或集群数据库可以冗余地保存数据 , 以便在用户需要时提供数据 。 CouchDB可以根据大集群(如全球集群)扩展到小集群(如移动设备) 。 CouchDB能够在任何Android或iOS设备上运行 , 这使得它在其他数据库中脱颖而出 。
CouchDB体系结构是分布式的 , 支持双向同步 。 由于使用唯一id , 它不需要任何模式 。 尽管CouchDB遵循CAP模型的AP(可用性和分区容错)特性 , 但为了克服交易一致性 , 它在实际基础上遵循ACID模型 。
CouchDB和MongoDB的比较
CouchDB和MongoDB:截然不同的查询CouchDB和MongDB都是面向文档的数据存储 , 它们使用JSON文档 , 但是当涉及到查询时 , 这两个数据库就完全不同了 。 CouchDB需要预定义的视图(本质上是JavaScript的MapReduce函数) , MongoDB支持动态查询(基本上是我们习惯的常规RDBMS特别SQL查询) 。
例如 , 为了使用Groovy的RESTClient在CouchDB中插入一些数据 , 并发出一个RESTful post , 如下所示:
import static groovyx.net.http.ContentType.JSON
import groovyx.net.http.RESTClient
def client = new RESTClient("http://localhost:5498/")
response = client.put(path: "parking_tickets/1280002020",
contentType: JSON,
requestContentType: JSON,
body: [officer: "Micheal Jordan",
location: "189 Berkely Road",
vehicle_plate: "KL5800",
offense: "Parked in no parking zone",
date: "2020/02/01"])
示例代码查询任何官员财产为“Micheal Jordan”的文件的函数:
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
当我们发出一个HTTP GET请求到那个视图的名字 , 我们可以期望至少一个文档如下:
response = client.get(path: "parking_tickets/_view/by_name/officer_grey",
contentType: JSON, requestContentType: JSON)
assert response.data.total_rows == 1
response.data.rows.each{
assert it.value.officer == "Micheal Jordan"
}
MongoDB的工作方式很像我们习惯使用的普通数据库:我们可以在运行时查询我们内心想要的任何东西 。
使用MongoDB的本地Java驱动程序插入停车罚单的相同实例:
DBCollection coll = db.getCollection("parking_tickets");
BasicDBObject doc = new BasicDBObject();
doc.put("officer", "Micheal Jordan");
doc.put("location", "189 Berkely Road ");
doc.put("vehicle_plate", "KL5800");
//...
coll.insert(doc);
只需对警官的财产进行查询 , 即可查询警官Micheal Jordan从MongoDB发出的任何罚单:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
- 大河客户端|布局战队,导师各有妙招,《2020中国好声音》收视率蝉联第一
- 周到|“好声音”蝉联省级卫视综艺节目收视第一,首迎抢位战导师布局战队各有妙招
- 通天战队|A股最励志闻泰科技!给华为小米打工到半导体巨头,半年赚17亿
- |《街舞3》火舞台battle开启 钟汉良战队团魂之力势不可挡
- |《这!就是街舞》第三季火舞台热力喷发,队长领衔齐舞大秀燃炸战队之魂
- 巅峰战队|ConcurrentHashMap的部分源码分析
- 环球网|美海军陆战队一架CH-53E紧急迫降 未造成人员伤亡
- 碰碰战队|麒麟5nm芯片推迟,消息称华为正力催台积电交付订单
- 泰迪小公举|《好声音2020》开播三期后,“一对一PK”已来袭,李健战队仍最强
- 家族战队|涨价亏几百踩雷亏几千,下半年电视该怎么选?