📜  CouchDB面试问题

📅  最后修改于: 2020-11-22 09:55:38             🧑  作者: Mango

CouchDB面试问题

1)什么是CouchDB?

CouchDB是记录在案的数据库服务器,可通过RESTful JSON API访问。它是双向的分布式健壮增量复制。它是无模式的,具有平坦的地址空间。

CouchDB是专注于易用性的开源NoSQL数据库。它是由Apache开发的。它与网络完全兼容。 CouchDB使用JSON存储数据,使用JavaScript作为查询语言来转换文档,使用MapReduce和使用HTTP作为API。

CouchDB功能如下:

  • CouchDB可以在多个服务器实例之间复制。
  • CouchDB有各种库供您选择的语言使用。
  • 它具有快速索引和检索
  • 它具有类似于REST的界面,用于文档插入,更新,恢复和删除。
  • CouchDB支持基于JSON的文档格式,即可以轻松地跨不同语言进行翻译。

最新版本:2018年8月8日的2.2.0版

2)CouchDB用哪种语言编写?

CouchDB用Erlang编写。它是一种并发的功能性编程语言,主要侧重于容错(Erlang编程语言也用于构建对高可用性有要求的可大规模扩展的软实时系统)。

它的某些部分也是用C语言编写的。我们知道CouchDB支持视图服务器,并且视图(表单映射或化简)默认情况下是用JavaScript编写的(但也可以用Erlang编写)。因此,CouchDB需要JavaScript引擎SpiderMonkey(用C语言编写)。

3)CouchDB的早期工作是以哪种语言开始的?

CouchDB的早期工作始于C++。但是后来,它被Erlang OTP平台取代。

事实证明,Erlang是该项目的绝佳之选。

4)CouchDB与其他SQL数据库有何不同?

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数据库的结构:

5)CouchDB是否在软件行业中使用?

CouchDB现在非常流行,许多公司正在使用CouchDB。

这些是CouchDB的基本功能:

  • CouchDB可以在多个服务器实例之间复制。
  • CouchDB有各种库供您选择的语言使用。
  • 它具有快速索引和检索
  • 它具有类似于REST的界面,用于文档插入,更新,恢复和删除。
  • CouchDB支持基于JSON的文档格式,即可以轻松地跨不同语言进行翻译。

这就是软件公司使用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

6)CouchDB和MongoDB有什么区别?

这些是以下差异:

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更好,可以快速增长。

7)MongoDB和CouchDB有何相似之处?

MongoDB和CouchDB之间的相似之处是:

  • MongoDB和CouchDB都是面向文档的数据库。
  • MongoDB和CouchDB都是开源NoSQL数据库的最佳示例。即,两者都是无架构的。
  • MongoDB和CouchDB都支持JavaScript,可以在查询中使用,支持诸如MapReduce的聚合功能,并发送数据库来执行它。
  • MongoDB和CouchDB都支持通用编程语言C,C#,Erlang,Java,JavaScript,Ruby, Python,Haskell,PHP,Perl,Smalltalk等。

这些是CouchDB和MongoDB的一些常见功能。

8)CouchDB的主要功能是什么?

  • JSON文档:CouchDB将数据存储在JSON文档中。
  • RESTful接口:CouchDB通过HTTP执行所有任务,例如复制,数据插入等。
  • N-主复制:CouchDB可以帮助您利用无限数量的“主”,从而形成一些非常有趣的复制拓扑。
  • 专为离线构建:CouchDB可以复制到设备(例如Android手机),这些设备可以脱机并在设备重新联机时为您处理数据同步。
  • 复制过滤器:CouchDB可以帮助您精确过滤要复制到不同节点的数据。
  • ACID语义:CouchDB文件布局遵循ACID属性的所有功能。一旦将数据输入光盘,就不会被覆盖。文档更新(添加,编辑,删除)遵循原子性,即它们将被完全保存或根本不保存。该数据库将没有任何部分保存或编辑的文档。几乎所有这些更新都是序列化的,并且任何数量的客户端都可以读取文档,而无需等待且不会被中断。
  • 文档存储:CouchDB是遵循文档存储的NoSQL数据库。文档是数据的主要单位,每个字段都有唯一的名称,并包含各种数据类型的值,例如文本,数字,布尔值,列表等。文档对文本大小或元素数没有设置限制。
  • 最终的一致性:CouchDB保证提供可用性和分区容限。
  • 身份验证和会话支持:CouchDB可以帮助您通过会话cookie(如Web应用程序)保持身份验证打开。
  • 安全性:CouchDB还提供数据库级安全性。每个数据库的权限分为阅读者和管理员。读者可以读取和写入数据库。
  • 验证:您可以通过结合身份验证来验证插入到数据库中的数据,以确保文档的创建者是登录的人。
  • Map / Reduce列表和显示:MongoDB和CouchDB受欢迎的主要原因是Map / reduce系统。

9)为什么CouchDB不使用Mnesia?

CouchDB不使用Mnesia的原因很多:

  • 它提供了每个文件2个演出的存储限制。
  • 崩溃或断电后,它需要验证和修复周期,因此,即使解除了大小限制,大型文件的修复时间也无法实现。
  • Mnesia具有一些有用的功能,但是Mnesia的功能对于CouchDB并不是真正有用。
  • Mnesia不是通用的大型数据库。它最适合作为配置类型数据库。
  • Mnesia最适合作为配置类型数据库。正常操作是必要的。数据不是应用程序函数的中心,而是其正常运行所必需的类型。
  • 需要更新,配置和经常重新配置的事物,例如网络路由器,HTTP代理等,其配置数据很少。

10)您将如何在CouchDB中使用事务?

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进行事务处理可能会大大减少冲突的更新,并减少响应新更新的冲突的需求。在这种模型中,您不会有多个用户试图更改主要产品条目中的数据。如果一个票证有多个用户,则必须根据视图确定要重新获取该票证的那些用户,忽略这些用户,然后移至下一张票证,然后重试。

11)由于CouchDB是用Erlang编写的,因此Erlang被认为采用Unicode的速度较慢。那么,是否对CouchDB造成了问题?

CouchDB在内部使用Erlang二进制文件。因此,进入CouchDB的数据始终是UTF-8编码的。没有发生任何问题。

12)CouchDB的用途是什么?

CouchDB有助于开发人员编写客户端应用程序,该应用程序直接与Couch交互,而无需服务器端中间层。它减少了开发和处理复制的时间。它的数据库存储在本地,因此应用程序几乎没有延迟运行。 CouchDB的主要目标是在Internet应用程序和我们用来访问Internet的连接设备上运行。

  • CouchDB具有基于HTTP的REST API,这使得与数据库的通信非常容易。
  • CouchDB具有HTTP资源和方法(GET,PUT和DELETE)的简单结构,易于理解和使用。
  • 在CouchDB中,数据存储在基于文档的灵活结构中,因此无需担心数据的结构。
  • CouchDB通过强大的数据映射为用户提供便利,该数据映射允许查询,合并和过滤信息。
  • CouchDB提供易于使用的复制,您可以使用该复制在数据库和计算机之间复制,共享和同步数据。

13)您对couchdbKit了解多少?

couchdbKit为您的Python应用程序提供了一个框架来访问和管理Python应用程序。它提供的功能可让客户端轻松访问和管理CouchDB,允许管理数据库,Couch数据库服务器,文档管理以及查看访问权限。

对象主要反映服务的Python对象。例如,可以使用服务器和数据对象。

安装ouchdbkit的步骤:

安装或升级到最新版本的ouchdbkit

$ pip安装ouchdbkit

14)View是否可以更新文档或数据库?

否。对于数据库及其文档,视图始终是只读的。

视图用于以下目的:

  • 它从数据库中筛选文档,以查找特定过程的相关数据。
  • 从文档中提取数据并按特定顺序显示。
  • 建立索引以通过驻留在其中的任何值或结构查找文档,并使用这些索引来表示文档之间的关系。
  • 最后,通过视图,您可以对文档中的数据进行各种计算

例如:

如果文档代表您公司的财务交易,则视图可以回答最近一周,一个月或一年中支出的问题。

15)CouchDB支持哪些平台?

支持大多数POSIX系统,例如GNU / Linux和OSX。不正式支持Window,但是应该可以使用。

16)序列的用途是什么?你如何做序列?

序列通常用于确保数据库表中每一行的唯一标识符。复制很难实现序列。 CouchDB从其自身生成唯一的ID,并且您也可以指定自己的ID,因此此处不需要序列。如果将序列用于其他内容,则可能会找到另一种在CouchDB中表达的方式。

17)如何进行复制?

复制:复制将同步同一数据库的两个副本。这些数据库位于同一服务器上,也可以位于两个不同的服务器上。如果更改数据库的一个副本,则复制会将详细信息发送到另一副本。

为了进行复制,首先必须将HTTP请求与源一起发送到CouchDB,然后目标数据库和CouchDB将更改从源发送到目标。

让我们看看复制的样子:

POST /_replicate with a post body of   
{"source":"$source_database" 
, 
"target":"$target_database"}

$ source_database和$ target_database可以是本地数据库的名称,也可以是远程数据库的完整URI。必须先创建两个数据库,然后才能在数据库之间进行复制。

18)是否可以不通过HTTP / API与CouchDB通信?

CouchDB的数据模型和内部API以非常简单的方式映射REST / HTTP模型,其他任何API都将继承HTTP的某些功能。但是,有计划使CouchDB的内部结构不完整,以提供文档化的Erlang API。