两阶段提交应该会遇到阻塞问题。CockroachDB 是否就是这种情况?如果不是,如何避免?
在我的Cockroach数据库中有一个包含以下定义的表:
CREATE TABLE foo_value (
foo_id_a INT NOT NULL,
foo_id_b INT NOT NULL,
value FLOAT NULL,
create_date_time TIMESTAMP NULL,
update_date_time TIMESTAMP NULL,
CONSTRAINT "primary" PRIMARY KEY (foo_id_a ASC, foo_id_b ASC),
INDEX foo_value_foo_id_a_foo_id_b_idx (foo_id_a ASC, foo_id_b ASC),
INDEX foo_id_a_idx (foo_id_a ASC),
INDEX foo_id_b_idx (foo_id_b ASC),
FAMILY "primary" (foo_id_a, foo_id_b, value, create_date_time, update_date_time)
)
Run Code Online (Sandbox Code Playgroud)
它包含大约400000行.
查询两个ID中的一个很快:
SELECT * FROM foo_db.foo_value WHERE foo_id_a = 123456;
takes 0.071 s
SELECT * FROM foo_db.foo_value WHERE foo_id_b = 123456;
takes 0.086 s
Run Code Online (Sandbox Code Playgroud)
但是查询OR另一个是非常慢的:
SELECT …Run Code Online (Sandbox Code Playgroud) sql performance composite-primary-key database-indexes cockroachdb
附在本文末尾的 Python3 脚本创建了一个包含 5INT列的简单表,其中 3列带有索引。
然后它使用多行插入来填充表。
一开始,它设法每秒插入大约 10000 行。
Took 0.983 s to INSERT 10000 rows, i.e. performance = 10171 rows per second.
Took 0.879 s to INSERT 10000 rows, i.e. performance = 11376 rows per second.
Took 0.911 s to INSERT 10000 rows, i.e. performance = 10982 rows per second.
Took 1.180 s to INSERT 10000 rows, i.e. performance = 8477 rows per second.
Took 1.030 s to INSERT 10000 rows, i.e. performance = 9708 …Run Code Online (Sandbox Code Playgroud) sql bulkinsert sqlperformance database-performance cockroachdb
我正在使用 Spring Boot 和 Flyway (6.5.5) 的集成来运行 CockroachDB 集群的更新。当多个服务实例同时启动时,所有实例都尝试锁定flyway_schema_history表以验证迁移。但是,出现以下异常:
2020-09-09 00:00:00.013 ERROR 1 --- [ main] o.s.boot.SpringApplication :
Application run failed org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]:
Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException:
Unable to obtain table lock - another Flyway instance may be running
Run Code Online (Sandbox Code Playgroud)
我找不到任何配置属性来调整它。也许有人遇到过同样的问题并以某种方式解决了它?
解决方法:重新启动服务。
我正在使用 Testcontainers 通过 docker 启动 CockroachDB 实例。我需要通过将该属性设置sql.defaults.experimental_temporary_tables.enabled为 true 来启用对临时表的支持。
当机器运行时,我可以这样做:
docker exec -it CockroachDBHibernate ./cockroach sql --insecure -e "SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用 Testcontainers 运行相同的命令时:
container.execInContainer(
"./cockroach sql --insecure -e \"SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';\"" );
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
OCI runtime exec failed: exec failed: container_linux.go:370: starting container process caused: exec: "./cockroach sql --insecure -e \"SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';\"": stat ./cockroach sql --insecure -e "SET CLUSTER SETTING sql.defaults.experimental_temporary_tables.enabled = 'true';": no such file or directory: …Run Code Online (Sandbox Code Playgroud) 如何将 DBeaver 与我的 CockroachDB Serverless 数据库连接?我收到如下错误:
FATAL: codeParamsRoutingFailed: missing cluster name in connection string
Run Code Online (Sandbox Code Playgroud) 我计划部署一个小型 Kubernetes 集群(3 个 32GB 节点)。我对 K8S 没有经验,我需要想出某种有弹性的 SQL 数据库设置,CockroachDB 似乎是一个不错的选择。
我想知道是否可以相对容易地部署一个配置,其中一些 CockroachDB 实例(节点?)位于 K8S 集群内部,但同时其他一些实例位于 K8S 集群外部(2 个本地虚拟机)。所有这些 CockroachDB 都需要被视为单个 CockroachDB 集群。还值得注意的是,Kubernetes 将托管在云中(例如 Linode)。
我所说的相对容易是指:
我有兴趣在一组PI上测试CockroachDB.任何人都知道,如果考虑到他们仍在阿尔法,这目前是否可行?
我做了一些测试,看看我是否可以将CockroachDB用于我的一个小项目.我在同一个DC中创建了两个相同的VPS,并在其中一个上安装了CockroachDB,另一个安装了MariaDB,然后创建了两个测试数据库来存储数据.每次以5K的批量执行1M插入.我没有对VPS/db服务器进行任何更改,它们只是在安装后运行.
CockroachDB架构:
root@:26257/test> show create table customers;
+-----------+------------------------------------------------------------------+
| Table | CreateTable
|
+-----------+------------------------------------------------------------------+
| customers | CREATE TABLE customers (?
|
| | id INT NOT NULL DEFAULT unique_rowid(),?
|
| | first_name STRING NULL,?
|
| | last_name STRING NULL,?
|
| | age INT NULL,?
|
| | CONSTRAINT "primary" PRIMARY KEY (id ASC),?
|
| | FAMILY "primary" (id, first_name, last_name, age)? |
| | )
|
+-----------+------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
MariaDB的:
MariaDB [test]> show create table customers \G; …Run Code Online (Sandbox Code Playgroud) 我到处都在寻找这个,但找不到我需要的东西。我有一个表,其中有一列包含事务日期的 unix 时间戳。在 MySQL 中,我可以非常轻松地进行转换,但在 CockroachDB 中执行此操作时遇到问题。
我所寻找的只是能够在 MySQL 中执行如下查询:
SELECT
DATE(FROM_UNIXTIME(transaction_timestamp)),
COUNT(id)
FROM
purchases
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我很难理解为什么我的单节点设置的 CockroachDB 管理控制台有 37 个副本。根据我读过的内容
CockroachDB replicates each range (3 times by default) and stores each replica on a different node.
Run Code Online (Sandbox Code Playgroud)
这直接来自文档https://www.cockroachlabs.com/docs/v20.2/architecture/overview#glossary
运行\l我看到的命令
database_name
-----------------
defaultdb
postgres
system
test2
(4 rows)
Run Code Online (Sandbox Code Playgroud)
运行SHOW ALL ZONE CONFIGURATIONS;我得到的命令
target | raw_config_sql
---------------------------------------------------+------------------------------------------------------------------------------
RANGE default | ALTER RANGE default CONFIGURE ZONE USING
| range_min_bytes = 134217728,
| range_max_bytes = 536870912,
| gc.ttlseconds = 90000,
| num_replicas = 3,
| constraints = '[]',
| lease_preferences = '[]'
DATABASE system | …Run Code Online (Sandbox Code Playgroud) 我正在使用 cockroachdb,它本质上是 postgres 的超集,我不明白为什么这样说:
select * from _a66df261120b6c23.tabDefaultValue;
Run Code Online (Sandbox Code Playgroud)
结果犯错误:
ERROR: relation "_a66df261120b6c23.tabdefaultvalue" does not exist
Run Code Online (Sandbox Code Playgroud)
show databases给我:
database_name | owner | primary_region | regions | survival_goal
--------------------+-------+----------------+---------+----------------
_a66df261120b6c23 | root | NULL | {} | NULL
defaultdb | root | NULL | {} | NULL
postgres | root | NULL | {} | NULL
root | root | NULL | {} | NULL
sammy | root | NULL | {} | NULL
system | node | NULL | {} …Run Code Online (Sandbox Code Playgroud) 我想将 JetBrains DataGrip 与 CockroachDB Serverless 结合使用。
如何创建连接?我收到如下错误:
[08004] FATAL: codeParamsRoutingFailed: missing cluster name in connection string.
Run Code Online (Sandbox Code Playgroud) cockroachdb ×13
sql ×2
bulkinsert ×1
datagrip ×1
dbeaver ×1
flyway ×1
kubernetes ×1
performance ×1
raspberry-pi ×1
spring-boot ×1
timestamp ×1