标签: google-cloud-spanner

Spanner 的 DatabaseClient 线程安全吗?

我们目前正在为 Spanner 检索 DatabaseClient,如下所示:

DatabaseClient dbClient = spanner.getDatabaseClient(...)
Run Code Online (Sandbox Code Playgroud)

跨多个线程使用这个 DatabaseClient 对象是否安全?具体来说,我们想要依赖注入 DatabaseClient 的一个实例,并想了解它是否是线程安全的并且可以重用,或者每个线程是否应该调用 spanner?

这是在 Web API 服务中使用的,因此对 URL 的大量传入请求,每个传入请求都需要一个扳手连接。什么是最好的分享对象?例如,我们不希望每个会话都必须加载 Google JSON 凭据(我们假设发生在 SpannerOptions Builder 中)。

java thread-safety google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
467
查看次数

云扳手:选择计数 * 需要一分钟

我在 Cloud Spanner 中创建了一个测试表并填充了 1.2 亿行。我为表创建了一个复合主键。

当我运行一个简单的“select count(*) from”查询时,云扳手 Web UI 大约需要一分钟才能返回结果。

有没有其他人面临类似的问题?

google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
1145
查看次数

Cloud Spanner 在不应该使用的时候使用了二级索引

使用主键快速执行的现有查询在没有通知的情况下大幅减慢(10 毫秒 -> 8 秒),因为现在会自动使用为另一个用例创建的二级索引。

Cloud-Spanner-Web-Query 的“说明”告诉我使用了二级索引。如果我更改顺序(仅用于测试目的)或提供 FORCE_INDEX 查询再次快速。

我可以通过使用Cloud Spanner 查询语法文档中记录的FORCE_INDEX=_BASE_TABLE来“修复”这个问题。

我的问题是:我真的必须为每个查询都这样做以避免这种影响吗?

这将查询定义与索引定义混合在一起,恕我直言,这不是一件好事。

带有主索引的表:

CREATE TABLE change_history (
    userId INT64 NOT NULL,
    createdAtUnique INT64 NOT NULL,
    itemId STRING(512) NOT NULL,
    newValue FLOAT64 NOT NULL,
    oldValue FLOAT64 NOT NULL,
) PRIMARY KEY (userId, itemId, createdAtUnique DESC)
Run Code Online (Sandbox Code Playgroud)

二级指标:

CREATE INDEX ch_userid_createdatunique_all ON change_history (
    userId,
    createdAtUnique
) STORING (
    newValue,
    oldValue
)
Run Code Online (Sandbox Code Playgroud)

原始查询:

SELECT * FROM change_history WHERE                         
    userId = 2563
    AND itemId = "215414"
    AND createdAtUnique …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
875
查看次数

Google Cloud Spanner 中的命名架构

默认情况下,我在 Google Spanner 中定义的表存储在“未命名”的默认架构中,如信息架构文档中所述

我需要什么:我需要我定义的表具有命名模式。有没有办法创建命名模式并在其中包含表?

我做了什么:我跑SELECT * from INFORMATION_SCHEMA.SCHEMATA了,结果有两行。一个是SCHEMA_NAMEas INFORMATION_SCHEMA,另一个是空字符串,这是我定义表的地方。

我试图更新表中的SCHEMA_NAME列,该列是一个空字符串,但似乎不支持 DML 语句。INFORMATION_SCHEMA.SCHEMATASCHEMA_NAME

有人可以给我一个关于如何进行这项工作的提示,或者这是否可能?已经谢谢了!

database google-cloud-platform google-cloud-spanner

1
推荐指数
1
解决办法
311
查看次数

BigQuery 与 Cloud Spanner 中 SQL 的限制

在比较 Cloud Spanner 与 BigQuery 时,我试图弄清楚与 ANSI SQL(仅限选择部分)相比,BigQuery 在 SQL 中存在哪些限制?

BigQuery 是否支持 ANSI SQL 的所有复杂联接?

此外,有什么是 Cloud Spanner 可以做而 BigQuery 不能做的吗?

google-bigquery google-cloud-platform google-cloud-spanner

1
推荐指数
1
解决办法
3838
查看次数

在线更新扳手架构非常慢

即使对于非常小的表(10行),在线更新扳手架构也需要几分钟.

即 - 添加/删除/更改列,添加表等.这对于开发过程和新版本部署来说非常令人沮丧.

有改进的计划吗?

几个问题:

  1. 任何人都知道扳手的第三方架构比较工具?找不到任何东西.
  2. 那么数据备份呢?为了保存历史快照.

提前致谢

google-cloud-platform google-cloud-spanner

1
推荐指数
1
解决办法
213
查看次数

如何在 Google Spanner 中查看数据库或表的索引?

如何查看我的数据库是否有任何索引?

对于特定的表呢?

sql cloud google-cloud-spanner

0
推荐指数
1
解决办法
162
查看次数

Google Spanner 模拟器是否可以与 Google Spanner JDBC 驱动程序配合使用?

我试过这是DBeaverDataGrip

在本地使用 Google Spanner 模拟器运行 (0.8.0)

export SPANNER_EMULATOR_HOST=localhost:9010

Executing: docker run -p 127.0.0.1:9010:9010 -p 127.0.0.1:9020:9020 gcr.io/cloud-spanner-emulator/emulator:0.8.0
[cloud-spanner-emulator] 2020/07/17 22:23:21 gateway.go:135: Cloud Spanner emulator running.
[cloud-spanner-emulator] 2020/07/17 22:23:21 gateway.go:136: REST server listening at 0.0.0.0:9020
[cloud-spanner-emulator] 2020/07/17 22:23:21 gateway.go:137: gRPC server listening at 0.0.0.0:9010

Run Code Online (Sandbox Code Playgroud)

这可以与Google JDBC Spanner 驱动程序一起使用吗?

在我的测试中,我的猜测是:

不,目前不支持此功能。

我可以设法连接到 Spanner 的 GCP 实例,但不能连接到模拟器。当我尝试使用端口 9010 或 9020 时,它基本上挂起。

我的jdbc连接字符串如下(项目、实例和数据库都已创建):

gcloud spanner databases list --project=local-project --instance=local-instance --configuration=spanner-emulator --format json

[
  {
    "name": "projects/local-project/instances/local-instance/databases/myDatabase",
    "state": "READY"
  }, …
Run Code Online (Sandbox Code Playgroud)

google-cloud-spanner

0
推荐指数
1
解决办法
1326
查看次数

Cloud Spanner 模拟器 - docker 初始化

我正在尝试设置一个启动云扳手并初始化它的 Docker 容器。

使用谷歌提供的官方 docker 镜像:gcr.io/cloud-spanner-emulator/emulator

我希望在启动时自动初始化扳手。

我用 docker 文件尝试了各种方法,总结一下:

FROM gcr.io/cloud-spanner-emulator/emulator

RUN some gcloud command after to initialize local spanner db
Run Code Online (Sandbox Code Playgroud)

但是,由于缺乏有关该映像如何工作的信息,因此很难确定是否可以在每次容器启动时对其进行初始化。

我重复一遍,我需要在容器安装时自动运行它。它将建设管道。

有没有办法用这个提供的 docker 镜像来做到这一点?或者我应该创建自己的 dockerfile 通过 gcloud cli 安装模拟器?

google-cloud-spanner google-cloud-spanner-emulator

0
推荐指数
1
解决办法
1810
查看次数