个性化阅读
专注于IT技术分析

最全面的CouchDB面试题和答案解析

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数据库完全不同。它快速, 高效且具有容错能力。

沙发数据库 SQL数据库
它是开源的, 并使用RDBMS来存储数据。它是非常快速的多用户, 多线程和健壮的SQL(结构化查询语言)数据库服务器。 SQL数据库通常用于大型项目的大数据存储。
它是一个SQL数据库, 喜欢自动传输。
用C, C ++编程语言实现。

NoSQL数据库的结构:

CouchDB面试问题

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

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

这些是CouchDB的基本功能:

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

这就是软件公司使用CouchDB的原因。

这里我们列出了使用CouchDB的顶级公司:

Company Website Revenue Company size Country
grubhub.com 200M-1000M 1000-5000 United States
hotheadgames.com 10M-15M 50-200 Canada
Ultimatesoftware.com 200M-1000M 1000-5000 United States
Slalom.com 200M-1000M 5000-10000 美国
Credera.com 10M-50M 200-500 美国

6)CouchDB和MongoDB有什么区别?

这些是以下差异:

Criteria CouchDB MongoDB
REST/HTTP TCP / IP自定义协议
记录存储在数据库中的文档中。 记录存储在数据库的集合中。
它遵循主-主复制。 它遵循主从复制。
CouchDB遵循Map / Reduce查询方法。 (JavaScript +其他) MongoDB遵循Map / Reduce(JavaScript)创建集合+基于对象的查询语言。
它遵循面向文档的模型, 并且数据以JSON格式显示。 面向文档(BSON)
MVVC(多版本并发控制)。 Update-in-place
CouchDB支持可用性 MongoDB支持一致性
在CouchDB中, 数据比MongoDB更安全 在MongoDB中, 数据库包含集合, 集合包含文档, 它比CouchDB快。
它用Erlang编写。 它是用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使你可以通过Web应用程序之类的会话cookie保持身份验证处于打开状态。
  • 安全性: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件物品, 则可能会有带有密钥的文档, 例如Hammer-1, hammer-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的步骤:

  • Couchdbkit要求python 2.x优于2.6
  • 要使用pip安装Couchdbkit, 必须确保已安装Distributed的最新版本。

  • $ curl -0 http://python-distribute.org/distribute_setup.py
  • $ curl sudo python Distribution_setup.py
  • $ easy_install点

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

$ 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 </li>  
{"source":"$source_database" 
, "target":"$target_database"}

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


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

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


工作/人力资源面试问题
jQuery面试问题
Java OOP面试问题
JSP面试问题
休眠面试问题
SQL面试题
Android面试题
MySQL面试问题

在CouchDB中, 基于JSON的文档格式用于存储数据, 用于MapReduce索引的JavaScript以及其API的常规HTTP。

Couch数据库是一个将数据存储在JSON文档中的数据库。通过HTTP在Web浏览器的帮助下查询索引和文档。所有索引相互结合, 并借助JavaScript进行转换。

这是一个NoSQL数据库, 喜欢手动传输。

用Erlang编程语言实现

GrubHub Inc.

Hothead Games, Inc.

Ultimate Software Group Inc.

SLALOM, LLC

GenCorp技术

接口

对象存储

复写

查询方式

资料模型

并发

偏爱

性能一致性

写在

面试技巧

JavaScript面试问题

Java基础面试问题

Servlet面试问题

春季面试问题

PL / SQL面试问题

Oracle面试问题

SQL Server面试问题

赞(0) 打赏
未经允许不得转载:srcmini » 最全面的CouchDB面试题和答案解析
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏