cockroachdb
当我在2018年初审查CockroachDB时 ,我发现基于事务性和一致键值存储的分布式SQL数据库旨在承受磁盘,机器,机架甚至数据中心的故障,而延迟中断最少,并且没有手动干预。 这仍然是真的。
在我看来,CockroachDB当时存在三大缺陷:SQL JOIN查询的有限优化,没有完全托管的服务以及不支持JSON或Protobuf数据类型。 我很高兴地报告,所有这些不足已经得到纠正。 现在,JOIN使用基于成本的优化器,CockroachCloud是beta版,并且已实现JSONB数据类型。
[ InfoWorld上SQL数据库评论: Azure Cosmos DB , CockroachDB , Google Cloud Spanner和YugaByte 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 DB , Couchbase Server , DataStax Enterprise , MongoDB , YugaByte 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](https://i-blog.csdnimg.cn/blog_migrate/b2e02b35d86c185f1c988eb66ba6ac02.png)
甚至本地的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](https://i-blog.csdnimg.cn/blog_migrate/1d50fb98df86c10b76893fb2aecb5ec6.png)
在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自动生成表统计信息。
cockroachdb