cockroachdb_CockroachDB评论:分布式SQLSwift发展

cockroachdb

当我在2018年初审查CockroachDB时 ,我发现基于事务性和一致键值存储的分布式SQL数据库旨在承受磁盘,机器,机架甚至数据中心的故障,而延迟中断最少,并且没有手动干预。 这仍然是真的。

在我看来,CockroachDB当时存在三大缺陷:SQL JOIN查询的有限优化,没有完全托管的服务以及不支持JSON或Protobuf数据类型。 我很高兴地报告,所有这些不足已经得到纠正。 现在,JOIN使用基于成本的优化器,CockroachCloud是beta版,并且已实现JSONB数据类型。

[ InfoWorld上SQL数据库评论: Azure Cosmos DBCockroachDBGoogle Cloud SpannerYugaByte DB ]

CockroachDB仍然缺少什么? 如果您关心PostgreSQL兼容性,那会有点:

  • 存储过程和功能
  • 扳机
  • 大事记
  • 用户定义的功能
  • 全文功能和索引
  • 地理空间功能和索引
  • 删除主键
  • XML功能
  • 保存点
  • 列级权限
  • CREATE TEMPORARY TABLE语法
  • XA语法

大多数现有的OLTP PostgreSQL应用程序都可以通过应用程序级别的一些变通方法移植到CockroachDB。 但是,如果您使用地理空间要素(PostGIS)或全文搜索,则我不知道在当前版本的CockroachDB中实现它们的好方法。

地理空间索引和功能存在跟踪问题 ,但是即使开放了几年,地理空间要素的状态也只是“潜在的”。 用户曾就所需的地理空间用例进行过民意测验,但这与承诺该功能并不相同。

全文索引是“计划中”的,但尚未列入路线图。 一些人建议将CockroachDB与Bleve集成以实现此目的。 再次,没有承诺。

在2019年6月, Cockroach将其OSS许可证从APL-2更改为“商业来源许可证(BSL)的极端许可版本”。 基本上,这是对Amazon Web Services提供分叉版本的ElasticSearch作为付费服务的回应,它使Cockroach可以提供自己的数据库即服务,而不必担心AWS或任何其他云供应商会抢风头。

CockroachCloud是由Cockroach Labs创建和拥有的完全托管和完全托管的服务,声称可以轻松进行CockroachDB的部署,扩展和管理。 CockroachCloud当前在Amazon Web Services和Google Cloud Platform上运行

[ InfoWorld上的NoSQL数据库评论: Azure Cosmos DBCouchbase ServerDataStax EnterpriseMongoDBYugaByte DB ]

CockroachDB安装和基本测试

我使用Homebrew在MacBook Pro上安装了CockroachDB 19.2.2 。 我首先明确卸载了最初查看时遗留下来的旧版本(1.1.3)。

自制软件特定于Mac。 这只是在Mac上安装CockroachDB的五种方法之一,其他方法是下载二进制文件。 使用Kubernetes; 使用Docker; 并从源代码构建。 Linux和Windows的安装选项较少。

martinheller@Martins-Retina-MacBook ~ % brew uninstall cockroach
Uninstalling /usr/local/Cellar/cockroach/1.1.3... (5 files, 72.9MB)

martinheller@Martins-Retina-MacBook ~ % brew install cockroachdb/tap/cockroach
==> Tapping cockroachdb/tap
Cloning into '/usr/local/Homebrew/Library/Taps/cockroachdb/homebrew-tap'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
Tapped 1 formula (32 files, 45.6KB).
==> Installing cockroach from cockroachdb/tap
==> Downloading https://binaries.cockroachdb.com/cockroach-v19.2.2.darwin-10.9-a
######################################################################## 100.0%
==> /usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen man --path=/usr/local/C
==> /usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen autocomplete bash --out
==> /usr/local/Cellar/cockroach/19.2.2/bin/cockroach gen autocomplete zsh --out=
==> Caveats
For local development only, this formula ships a launchd configuration to
start a single-node cluster that stores its data under:
  /usr/local/var/cockroach/
Instead of the default port of 8080, the node serves its admin UI at:
  http://localhost:26256

Do NOT use this cluster to store data you care about; it runs in insecure
mode and may expose data publicly in e.g. a DNS rebinding attack. To run
CockroachDB securely, please see:
  https://www.cockroachlabs.com/docs/secure-a-cluster.html

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions

To have launchd start cockroachdb/tap/cockroach now and restart at login:
  brew services start cockroachdb/tap/cockroach
Or, if you don't want/need a background service you can just run:
  cockroach start --insecure
==> Summary
🍺  /usr/local/Cellar/cockroach/19.2.2: 114 files, 143.3MB, built in 12 seconds
==> `brew cleanup` has not been run in 30 days, running now...
Removing: /Users/martinheller/Library/Caches/Homebrew/fauna-shell--0.9.8.catalina.bottle.tar.gz... (4MB)
Removing: /Users/martinheller/Library/Caches/Homebrew/node--12.12.0.catalina.bottle.tar.gz... (14.8MB)
Pruned 18 symbolic links from /usr/local

martinheller@Martins-Retina-MacBook ~ % cockroach start-single-node --insecure
*
* WARNING: RUNNING IN INSECURE MODE!
*
* - Your cluster is open for any client that can access <all your IP addresses>.
* - Any user, even root, can log in without providing a password.
* - Any user, connecting as root, can read or write any data in your cluster.
* - There is no network encryption nor authentication, and thus no confidentiality.
*
* Check out how to secure your cluster: https://www.cockroachlabs.com/docs/v19.2/secure-a-cluster.html
*
*
* WARNING: neither --listen-addr nor --advertise-addr was specified.
* The server will advertise "Martins-Retina-MacBook.local" to other nodes, is this routable?
*
* Consider using:
* - for local-only servers:  --listen-addr=localhost
* - for multi-node clusters: --advertise-addr=<host/IP addr>
*
*
*
* INFO: Replication was disabled for this cluster.
* When/if adding nodes in the future, update zone configurations to increase the replication factor.
*
CockroachDB node starting at 2019-12-30 16:30:35.369965 +0000 UTC (took 0.6s)
build:               CCL v19.2.2 @ 2019/12/11 01:27:47 (go1.12.12)
webui:               http://Martins-Retina-MacBook.local:8080
sql:                 postgresql://root@Martins-Retina-MacBook.local:26257sslmode=disable
RPC client flags:    cockroach <client cmd> --host=Martins-Retina-MacBook.local:26257 --insecure
logs:                /Users/martinheller/cockroach-data/logs
temp dir:            /Users/martinheller/cockroach-data/cockroach-temp884406444
external I/O path:   /Users/martinheller/cockroach-data/extern
store[0]:            path=/Users/martinheller/cockroach-data
status:              initialized new cluster
clusterID:           9f7141f8-d53d-49e3-9a5a-264de8cfa626
nodeID:              1

此时,我可以打开上面显示的Web UI链接,并看到下面的屏幕快照中显示的基于Web的管理界面。

cockroachdb本地集群概述01 IDG

甚至本地的CockroachDB群集也提供基于Web的管理界面。 在这里,我们看到了我刚刚创建的单节点集群的集群概述。

为了对安装进行烟雾测试,我遵循了Cockroach大学在另一个“终端”选项卡中的第一个练习,如下所示。 我发现本教程不错,尽管以简短的视频而不是文字介绍,并且适合初学者而不是经验丰富的DBA或开发人员。 动手部分首先使用workload工具创建一个小型数据库movr,然后在CockroachDB SQL Shell中继续。

martinheller@Martins-Retina-MacBook ~ %  cockroach workload init movr
I191230 16:55:34.351650 1 workload/workloadsql/dataload.go:135  imported users (0s, 50 rows)
I191230 16:55:34.356751 1 workload/workloadsql/dataload.go:135  imported vehicles (0s, 15 rows)
I191230 16:55:34.382023 1 workload/workloadsql/dataload.go:135  imported rides (0s, 500 rows)
I191230 16:55:34.404733 1 workload/workloadsql/dataload.go:135  imported vehicle_location_histories (0s, 1000 rows)
I191230 16:55:34.429203 1 workload/workloadsql/dataload.go:135  imported promo_codes (0s, 1000 rows)

martinheller@Martins-Retina-MacBook ~ % cockroach sql --insecure
#
# Welcome to the CockroachDB SQL shell.
# All statements must be terminated by a semicolon.
# To exit, type: \q.
#
# Server version: CockroachDB CCL v19.2.2 (x86_64-apple-darwin14, built 2019/12/11 01:27:47, go1.12.12) (same version as client)
# Cluster ID: 9f7141f8-d53d-49e3-9a5a-264de8cfa626
#

# Enter \? for a brief introduction.
#
root@:26257/defaultdb> SHOW databases;
  database_name 
+---------------+
  defaultdb     
  movr          
  postgres      
  system        
(4 rows)

Time: 2.028ms

root@:26257/defaultdb> SHOW TABLES FROM movr;
          table_name          
+----------------------------+
  promo_codes                
  rides                      
  user_promo_codes           
  users                      
  vehicle_location_histories 
  vehicles                   
(6 rows)

Time: 2.863ms

root@:26257/defaultdb> SELECT * FROM movr.users LIMIT 10;
                   id                  |   city    |        name         |            address            | credit_card 
+--------------------------------------+-----------+---------------------+-------------------------------+-------------+
  ae147ae1-47ae-4800-8000-000000000022 | amsterdam | Tyler Dalton        | 88194 Angela Gardens Suite 94 | 4443538758  
  b3333333-3333-4000-8000-000000000023 | amsterdam | Dillon Martin       | 29590 Butler Plain Apt. 25    | 3750897994  
  b851eb85-1eb8-4000-8000-000000000024 | amsterdam | Deborah Carson      | 32768 Eric Divide Suite 88    | 8107478823  
  bd70a3d7-0a3d-4000-8000-000000000025 | amsterdam | David Stanton       | 80015 Mark Views Suite 96     | 3471210499  
  c28f5c28-f5c2-4000-8000-000000000026 | amsterdam | Maria Weber         | 14729 Karen Radial            | 5844236997  
  1eb851eb-851e-4800-8000-000000000006 | boston    | Brian Campbell      | 92025 Yang Village            | 9016427332  
  23d70a3d-70a3-4800-8000-000000000007 | boston    | Carl Mcguire        | 60124 Palmer Mews Apt. 49     | 4566257702  
  28f5c28f-5c28-4600-8000-000000000008 | boston    | Jennifer Sanders    | 19121 Padilla Brooks Apt. 12  | 1350968125  
  2e147ae1-47ae-4400-8000-000000000009 | boston    | Cindy Medina        | 31118 Allen Gateway Apt. 60   | 6464362441  
  33333333-3333-4400-8000-00000000000a | boston    | Daniel Hernandez MD | 51438 Janet Valleys           | 0904722368  
(10 rows)

Time: 2.977ms

该教程从那里继续讲授有关CockroachDB的更多信息,包括CockroachDB集群的基础知识和大规模运行SQL的基础知识。

[ 同样在InfoWorld上:如何为您的应用程序选择合适的数据库 ]

蟑螂云

正如我们刚刚看到的,旋转一个CockroachDB节点非常简单。 旋转由三个或更多节点组成的集群需要花费更多的精力和计划,尤其是当您创建多区域集群并需要调整表拓扑时 。 如果您需要帮助,蟑螂销售工程师很乐意加入。

另一方面,在CockroachCloud中创建集群只是填写Web表单的问题,如下面的屏幕快照所示。 当前,您只能从此自助服务界面创建一个单区域群集; 如果需要多区域群集,较大的节点或每个群集超过24个节点,则需要联系Cockroach Labs支持以在CockroachCloud中为您配置它们。

cockroachcloud创建集群02 IDG

在CockroachCloud中创建集群是一个指向并单击的练习。 可用的AWS和GCP区域是支持Kubernetes的区域,已知可以正常工作。 目前,GCP实例比等效的AWS实例便宜。

CockroachCloud群集尽可能隔离和安全。 它们是单个租户,每个租户都在其自己的子帐户和VPC中,并且VPC彼此之间以及从任何其他外部连接进行防火墙保护,除非将SQL和Web UI端口列入白名单。 Internet上与群集的所有连接均使用TLS 1.2。

请注意,Cockroach Labs当前不支持私有云。 但是,他们有计划在将来这样做。

根据经验,Cockroach Labs 估计每个vCPU可以处理大约1000 TPS 。 在进行配置时,在群集创建页面上给出的估算值可能更准确,但以不同单位(IOPS而不是TPS)给出。 当前,GCP上的2-vCPU节点估计为1800 IOPS,而AWS上的2-vCPU节点估计为600 IOPS。

[ 同样在InfoWorld上:旧数据库可以做的10个新技巧 ]

CockroachDB性能改进

当我在2018年初查看CockroachDB 1.1.3时,其SQL JOIN实现仅限于哈希联接和启发式计划程序; 它的查询性能通常是线性扩展的,但与最新技术完全不同,它更接近于SQLite的性能。 到2018年11月,CockroachDB 2.1有了一个基于成本的查询优化器 ,在JOIN性能方面与PostgreSQL竞争。 从19.2版开始,又经过一年的开发(并切换到日历版本控制 ), 所有 SQL查询都使用基于成本的优化器,甚至DDL语句和窗口函数。 为了支持基于成本的优化器,CockroachDB自动生成表统计信息。

翻译自: https://www.infoworld.com/article/3514432/cockroachdb-review-distributed-sql-shifts-into-high-gear.html

cockroachdb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值