📅  最后修改于: 2020-11-22 09:55:38             🧑  作者: Mango
CouchDB是记录在案的数据库服务器,可通过RESTful JSON API访问。它是双向的分布式健壮增量复制。它是无模式的,具有平坦的地址空间。
CouchDB是专注于易用性的开源NoSQL数据库。它是由Apache开发的。它与网络完全兼容。 CouchDB使用JSON存储数据,使用JavaScript作为查询语言来转换文档,使用MapReduce和使用HTTP作为API。
CouchDB功能如下:
最新版本:2018年8月8日的2.2.0版
CouchDB用Erlang编写。它是一种并发的功能性编程语言,主要侧重于容错(Erlang编程语言也用于构建对高可用性有要求的可大规模扩展的软实时系统)。
它的某些部分也是用C语言编写的。我们知道CouchDB支持视图服务器,并且视图(表单映射或化简)默认情况下是用JavaScript编写的(但也可以用Erlang编写)。因此,CouchDB需要JavaScript引擎SpiderMonkey(用C语言编写)。
CouchDB的早期工作始于C++。但是后来,它被Erlang OTP平台取代。
事实证明,Erlang是该项目的绝佳之选。
CouchDB不是关系数据库。有人认为它是关系数据库的替代品,但它与SQL数据库完全不同。它是快速,高效和容错的。
Couch database | SQL Databases |
---|---|
In CouchDB, JSON-based document format are used to store data, JavaScript for MapReduce indexes, and regular HTTP of its API. Couch database is a database which stores data in the JSON document. Query your index and documents with the help of web browser via HTTP. All the indexes are combining with each other and transform with the help of JavaScript. |
It is open source and uses RDBMS to store data. It is very fast, Multi-user, Multi-thread, and robust SQL (structured query language) database server. SQL database generally used for big data storage of a large project. |
It is a NoSQL database and likes manual transmission. | It is a SQL database and likes automatic transmission. |
Implemented in Erlang programming language | Implemented in C, C++ programming languages. |
NoSQL数据库的结构:
CouchDB现在非常流行,许多公司正在使用CouchDB。
这些是CouchDB的基本功能:
这就是软件公司使用CouchDB的原因。
这里我们列出了使用CouchDB的顶级公司:
Company | Website | Revenue | Company size | Country |
---|---|---|---|---|
GrubHub Inc. | grubhub.com | 200M-1000M | 1000-5000 | United States |
Hothead Games, Inc. | hotheadgames.com | 10M-15M | 50-200 | Canada |
Ultimate software group Inc. | Ultimatesoftware.com | 200M-1000M | 1000-5000 | United States |
SLALOM,LLC | Slalom.com | 200M-1000M | 5000-10000 | United States |
GenCorp technologies | Credera.com | 10M-50M | 200-500 | United States |
这些是以下差异:
Criteria | CouchDB | MongoDB |
---|---|---|
Interface | REST/HTTP | TCP/IP Custom Protocol |
Object Storage | Record is stored in documents in the database. | Record is stored in collections in the database. |
Replication | It follows Master-Master replication. | It follows Master-Slave replication. |
Query Method | CouchDB follows Map/Reduce query method. (JavaScript+others) | MongoDB follows Map/Reduce (JavaScript) creating collection + object-based query language. |
Data Model | It follows the document-oriented model and data is presented in JSON format. | Document-Oriented (BSON) |
Concurrency | MVVC (Multi-version concurrency control). | Update-in-place |
Preference | CouchDB favors availability | MongoDB favors Consistency |
Performance consistency | In CouchDB, data is safer than MongoDB | In MongoDB, the database contains collections and collection contains documents.It is faster than CouchDB. |
Written in | It is written in Erlang. | It is written in C++. |
MongoDB比CouchDB更快,可伸缩性也比MongoDB更好。
CouchDB可在Android,iOS平台等不同的操作系统上运行,但MongoDB不支持移动操作系统。如果从一开始就没有明确定义结构,则与CouchDB相比,Mongo DB更好,可以快速增长。
MongoDB和CouchDB之间的相似之处是:
这些是CouchDB和MongoDB的一些常见功能。
CouchDB不使用Mnesia的原因很多:
CouchDB使用“乐观并发”模型。在此模型中,如果您将文档版本与更新一起发送,则当当前文档版本与您发送的更新不匹配时,CouchDB将拒绝更改。
因此,您必须为CouchDB重新构建许多基于常规事务的方案。从更高层次解决问题很有帮助,而不是尝试将Couch塑造为基于SQL的世界。
如果您有描述该项目的文档,并且其中包含“可用数量”字段,则可以处理并发问题:
首先恢复文档,记下CouchDB与数据库一起发送的属性,然后,如果数量字段大于零,则减少数量字段。之后,使用_rev属性发送回更新的文档。检查,如果_rev与当前存储的号码匹配,则在_rev不匹配时发生冲突,否则,请执行其他操作,然后恢复最新的文档版本。
例如:
我想要一个(“主产品”)文档,其中包含所有数据信息,例如名称,图片描述,价格等。
在这里,我们必须通过添加新的文档库存票证来创建一个字段(产品密钥和Claimed-by),如果您正在拼装锤子模型并出售20件物品,则可能会有带有密钥的文档,例如锤子1,锤子2分别代表每个。
现在,我想创建一个提供可用锤子列表的视图
Map
Function (doc)
{
If(doc.type== 'inventory-ticket' && doc.claimed_by==null)
{
emit(doc.product_key, { 'inventory-ticket' :doc.id, '_rev' : doc._rev});
}
}
这提供了带有他们的product_key的可用票证的列表,当有人要购买锤子时,我可以抓住其中的一组票证,然后遍历发送的更新,直到我成功索取了一张票证。
降低
Function (keys, values, combine)
{
Return values.length();
}
这给了我一份无人认领的库存物品清单。
该示例表明,与CouchDB进行事务处理可能会大大减少冲突的更新,并减少响应新更新的冲突的需求。在这种模型中,您不会有多个用户试图更改主要产品条目中的数据。如果一个票证有多个用户,则必须根据视图确定要重新获取该票证的那些用户,忽略这些用户,然后移至下一张票证,然后重试。
CouchDB在内部使用Erlang二进制文件。因此,进入CouchDB的数据始终是UTF-8编码的。没有发生任何问题。
CouchDB有助于开发人员编写客户端应用程序,该应用程序直接与Couch交互,而无需服务器端中间层。它减少了开发和处理复制的时间。它的数据库存储在本地,因此应用程序几乎没有延迟运行。 CouchDB的主要目标是在Internet应用程序和我们用来访问Internet的连接设备上运行。
couchdbKit为您的Python应用程序提供了一个框架来访问和管理Python应用程序。它提供的功能可让客户端轻松访问和管理CouchDB,允许管理数据库,Couch数据库服务器,文档管理以及查看访问权限。
对象主要反映服务的Python对象。例如,可以使用服务器和数据对象。
安装ouchdbkit的步骤:
安装或升级到最新版本的ouchdbkit
$ pip安装ouchdbkit
否。对于数据库及其文档,视图始终是只读的。
视图用于以下目的:
例如:
如果文档代表您公司的财务交易,则视图可以回答最近一周,一个月或一年中支出的问题。
支持大多数POSIX系统,例如GNU / Linux和OSX。不正式支持Window,但是应该可以使用。
序列通常用于确保数据库表中每一行的唯一标识符。复制很难实现序列。 CouchDB从其自身生成唯一的ID,并且您也可以指定自己的ID,因此此处不需要序列。如果将序列用于其他内容,则可能会找到另一种在CouchDB中表达的方式。
复制:复制将同步同一数据库的两个副本。这些数据库位于同一服务器上,也可以位于两个不同的服务器上。如果更改数据库的一个副本,则复制会将详细信息发送到另一副本。
为了进行复制,首先必须将HTTP请求与源一起发送到CouchDB,然后目标数据库和CouchDB将更改从源发送到目标。
让我们看看复制的样子:
POST /_replicate with a post body of
{"source":"$source_database"
,
"target":"$target_database"}
$ source_database和$ target_database可以是本地数据库的名称,也可以是远程数据库的完整URI。必须先创建两个数据库,然后才能在数据库之间进行复制。
CouchDB的数据模型和内部API以非常简单的方式映射REST / HTTP模型,其他任何API都将继承HTTP的某些功能。但是,有计划使CouchDB的内部结构不完整,以提供文档化的Erlang API。