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数据库的结构:
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面试问题
评论前必须登录!
注册