每个大中型企业都需要一个数据库。 大型跨国企业通常需要全球分布的数据库,并且当将其数据库用于财务或库存应用程序时,它们需要高度的一致性。 很少有数据库可以满足这两种需求。
Couchbase Server是一个内存优先,分布式,灵活的JSON文档数据库,在本地集群中具有高度一致性。 Couchbase Server还支持跨数据中心复制,最终实现了跨集群的一致性。
Couchbase Lite是一个嵌入式移动数据库,可脱机工作并在联机时与Couchbase Sync Gateway同步。 Sync Gateway与Couchbase Server以及多个Couchbase Lite实例同步。
Couchbase Server可以部署在本地,云, Kubernetes或混合配置中。 它有开源版本和企业版本。
Couchbase Server查询语言N1QL是为JSON文档数据库设计的SQL超集,具有分析扩展。 Couchbase还支持键值数据访问和全文搜索。
Couchbase是该数据库的幕后公司,该公司是在2011年将Membase(内存中缓存的集群键值数据库的制造商)和CouchOne(Apache CouchDB文档数据库的开发人员)合并而成的。值层,在2012年添加了JSON文档层,然后在2014年添加了移动数据库,在2015年添加了类似SQL的查询,在2017年添加了全文搜索并在2018年添加了分析功能。
Couchbase替代品和竞争对手
Couchbase的替代品包括另一个灵活的文档数据库MongoDB ; MongoDB与Redis结合用于缓存 ; Oracle数据库 ,一种高端关系数据库; 以及Microsoft的关系数据库产品SQL Server。 关系数据库系统是为在单个大型服务器上使用而设计的,很难扩展它们。 MongoDB旨在执行主-从复制,该复制可以稍微扩展,但是需要分片才能很好地扩展。 Redis有助于加快MongoDB的速度,但引入了另一个活动部分,这可能会使组合系统的管理复杂化。
Couchbase的其他近期替代方案包括CockroachDB , Azure Cosmos DB , Amazon Aurora , Aerospike ,Amazon DocumentDB和Amazon DynamoDB。 在先前的评论中,我已经讨论了关系和NoSQL选项。
Couchbase服务器架构
Couchbase Server执行多个角色:数据服务,索引服务,查询服务,安全性,复制,搜索,事件,分析和管理。 这些服务可以分别在一个或多个节点上运行。
Couchbase Server的设计基于三个基本原则:内存和以网络为中心的体系结构,工作负载隔离以及对所有内容的异步方法。
写入将提交到内存,然后持久存储到磁盘并异步索引,而不会阻止读取或写入。 最常用的数据和索引透明地保存在内存中,以实现快速读取。 尽管增加了Couchbase的RAM需求,但这种大量使用内存对于延迟和吞吐量很有好处。
Couchbase Server可以独立扩展其每项服务,以提高其效率。 查询服务可以从更多的CPU资源中受益,索引服务可以使用SSD,数据服务可以使用更多RAM。 Couchbase将此称为多维缩放(MDS),它是Couchbase Server的与众不同的功能之一。
异步操作可帮助Couchbase Server避免阻止写入,读取或查询。 开发人员可以在需要时在持久性和一致性与延迟之间取得平衡。
Couchbase JSON数据模型支持基本数据类型和复杂数据类型:数字,字符串,嵌套对象和数组。 您可以创建规范化或非规范化的文档。 Couchbase Server不需要甚至不支持架构。 相比之下,MongoDB不需要架构,但是如果开发人员选择,则可以支持和执行它们。
正如我稍后将更详细讨论的那样,您可以通过四种机制访问Couchbase Server文档:键值,基于SQL的查询,全文本搜索和JavaScript事件。 如果您的JSON文档包含子文档或数组,则可以直接使用路径表达式访问它们,而无需传输和解析整个文档。 事件模型可以触发数据更改( OnUpdate
)或计时器。 此外,您可以通过与Couchbase Mobile同步来访问Couchbase Server文档。
Couchbase Server被组织为存储桶,vBucket,节点和集群。 值区包含JSON文档。 vBucket实质上是在节点之间自动分布的分片。 节点是承载Couchbase Server单个实例的物理机或虚拟机。 群集是节点组。 同步复制发生在群集中的节点之间。
Couchbase Server部署选项
您可以在本地,云和Kubernetes上安装Couchbase Server 。 Couchbase Server企业版可免费进行开发和测试,并且可以通过订购进行生产。 开源的Couchbase Server社区版可免费用于所有目的。 除了一些省略的功能外 ,Couchbase Server社区版还与Couchbase Server企业版API兼容。
我在Google Cloud Platform上创建了一个云测试驱动器会话,该会话(经过五分钟的部署延迟)使我得到了三个节点的Couchbase Server群集和一个Sync Gateway节点,它们都运行了三个小时。 我花了大约一个小时来阅读这四个Couchbase教程,这使我有一种查询服务器的感觉。
Couchbase自治运算符
仅在企业版中受支持的Couchbase Autonomous Operator提供了Couchbase Server与开源Kubernetes和Red Hat OpenShift的本机集成。 操作员通过创建自定义资源定义并将其注册为自定义Couchbase Server控制器来管理Couchbase Server集群,从而扩展了Kubernetes API。 这减少了在Kubernetes上运行Couchbase集群所需的开发工作量,并使您可以自动管理常见的Couchbase Server任务,例如Couchbase Server集群的配置,创建,扩展和恢复。 该操作员还可以与Azure Kubernetes服务,Amazon Elastic Kubernetes服务和Google Kubernetes Engine一起使用。
跨数据中心复制(XDCR)
如前所述,Couchbase Server执行同步复制,并且在群集中具有很强的一致性。 它跨群集,数据中心和可用性区域执行异步,主动-主动复制,以避免产生高写入延迟。 XDCR允许Couchbase成为全局分布的数据库,但代价是允许群集之间实现最终(而非强大)的一致性。
所有Couchbase Server版本均支持Basic XDCR。 XDCR筛选,限制和基于时间戳的冲突解决都是Enterprise Edition的功能。
Couchbase查询工具
您可以使用键查询Couchbase Server来检索关联的值,该值可以是JSON文档或Blob。 您也可以使用类似SQL的N1QL语言或全文搜索来查询它。 如果存储桶具有支持查询的索引,则N1QL查询和全文查询的运行速度都会更快。
N1QL
N1QL,发音为“镍”,非常类似于标准SQL,带有JSON扩展名。 鉴于我已经使用SQL数十年了,所以我发现它比MongoDB的聚合管道容易得多。
实际上,N1QL有两种类似的变体:一种用于Couchbase服务器查询服务,另一种用于Analytics服务(这是企业版功能)。 N1QL for Analytics基于SQL ++ 。
N1QL的某些扩展是USE KEYS
, NEST
, UNNEST
和MISSING
。 USE KEYS
和USE HASH
是JOIN
的查询提示。 NEST
和UNNEST
打包UNNEST
压缩数组。 MISSING
是JSON特定于NULL
替代方法; IS NOT MISSING
表示文档中存在特定值或NULL
。 值为NOT MISSING
和NOT NULL
的关键字为KNOWN
。 N1QL查询可以使用路径,该路径也适用于全文搜索。
全文搜索
Couchbase支持外部全文搜索引擎,例如Solr ,但它也有自己的基于Go的全文搜索引擎Bleve。 Bleve包含在Couchbase Mobile和Couchbase Server中,并且支持您期望的大多数搜索语法。
Couchbase SDK
所有主要的Couchbase服务都可以通过SDK进行编程。 SDK适用于C / C ++ 、. Net(C#,F#和Visual Basic .Net),Go,Java,Node.js,PHP,Python和Scala。
除了SDK之外,Couchbase还提供与以下框架的紧密集成:Spring Data,.NET LINQ和Couchbase自己的Ottoman Node.js ODM。 例如,以下示例查询使用Linq2Couchbase :
{
Servers = new List<Uri> {new Uri("http://localhost:8091/")}
});
var context = new BucketContext(ClusterHelper.GetBucket("travel-sample"));
var query = (from a in context.Query<AirLine>()
where a.Country == "United Kingdom"
select a).
Take(10);
query.ToList().ForEach(Console.WriteLine);
ClusterHelper.Close();
Couchbase Mobile
Couchbase Mobile有两个部分:在移动设备上运行的Couchbase Lite和在服务器节点上运行的Couchbase Sync Gateway。 Couchbase Lite可在iOS,Android,.Net和Xamarin上运行,并支持Swift,Objective-C,Java,Kotlin和C ++语言。
例如,以下Java代码定义了要在Android上运行的查询:
Database database = DatabaseManager.getDatabase();
Query searchQuery = QueryBuilder
.select(SelectResult.expression(Expression.property("airportname")))
.from(DataSource.database(database))
.where(
Expression.property("type").equalTo(Expression.string("airport"))
.and(Expression.property("airportname").like(Expression.string(prefix + "%")))
);
Couchbase基准
尽管InfoWorld尚未对Couchbase Server进行基准测试,但第三方(Altoros)已使用YCSB JSON和键值测试以及TPCx-IoT测试进行了测试 。 下表是JSON文档基准测试。 如您所见,Couchbase Server的性能优于MongoDB和DataStax。 您可以自己重新运行这些基准测试,因为Altoros已提供了所有必需的脚本。
总体而言,Couchbase Server可以很好地与具有类似SQL的查询语言和全文搜索引擎的NoSQL JSON文档数据库堆叠在一起,Couchbase Mobile可以将价值主张扩展到移动设备。 Couchbase是否适合您取决于您的应用程序和要求。
如果您需要关系数据库的可靠架构结构或图数据库的连接方向,则Couchbase不会做您想要的事情。 但是,如果您需要全球可扩展的文档数据库,那么Couchbase是一个不错的选择。
-
费用: Couchbase Server社区版:免费。 Couchbase Server企业版:年度订阅按节点定价,并根据节点所需的内核和RAM以不同的价格提供。 开发和测试节点是免费的。 企业版云部署按小时可用,Couchbase Server在AWS上的典型软件价格为$ 0.662 /节点/小时,对于Mobile Sync Gateway,典型软件价格为$ 1.641 /节点/小时,其标准模板最初使用四个服务器节点和两个同步节点,具有自动缩放功能。 在Microsoft Azure和Google Cloud Platform上,价格大致可比。 您还可以携带自己的许可证,并只为云资源付费。
平台: Couchbase服务器:Linux,Windows Server 2012 R2及更高版本; Kubernetes,OpenShift; AWS,Azure,GCP。 Couchbase Server开发和测试:MacOS 10.11和更高版本,Windows 10周年更新和更高版本; 码头工人 Couchbase Lite:iOS,Android,.Net。 Couchbase Sync Gateway:Linux,Windows Server 2010和更高版本,MacOS 10.12.6和更高版本; AWS,Docker,OpenShift。
From: https://www.infoworld.com/article/3430716/couchbase-review-a-smart-nosql-database.html