目标
本教程将介绍如何使用 C# 版 Cloud Spanner 客户端库完成以下步骤:
- 创建 Spanner 实例和数据库。
- 写入、读取数据库中的数据和对数据执行 SQL 查询。
- 更新数据库架构。
- 使用读写事务更新数据。
- 向数据库添加二级索引。
- 使用索引来读取数据和对数据执行 SQL 查询。
- 使用只读事务检索数据。
费用
本教程使用 Spanner,它是Google Cloud的收费组件。如需了解使用 Spanner 的费用,请参阅价格。
准备工作
完成设置中介绍的步骤,包括创建和设置默认 Google Cloud 项目、启用结算功能、启用 Cloud Spanner API 以及设置 OAuth 2.0 来获取身份验证凭据以使用 Cloud Spanner API。
尤其要确保运行 gcloud auth
application-default login,以便使用身份验证凭据设置本地开发环境。
准备本地 C# 环境
将
GOOGLE_PROJECT_ID环境变量设置为您的 Google Cloud 项目 ID。首先,为当前 PowerShell 会话设置
GOOGLE_PROJECT_ID:$env:GOOGLE_PROJECT_ID = "MY_PROJECT_ID"
然后,为在此命令之后创建的所有进程设置
GOOGLE_PROJECT_ID:[Environment]::SetEnvironmentVariable("GOOGLE_PROJECT_ID", "MY_PROJECT_ID", "User")
下载凭据。
前往 Google Cloud 控制台中的凭据页面。
点击创建凭据并选择服务账号密钥。
在“服务账号”下,选择 Compute Engine 默认服务账号,并使“密钥类型”下方的 JSON 处于选中状态。 点击创建。您的计算机将下载一个 JSON 文件。
设置凭据。对于位于
C盘上CURRENT_USER的 Downloads 目录中名为FILENAME.json的文件,运行以下命令来将GOOGLE_APPLICATION_CREDENTIALS设置为指向 JSON 密钥:首先,为此 PowerShell 会话设置
GOOGLE_APPLICATION_CREDENTIALS:$env:GOOGLE_APPLICATION_CREDENTIALS = "C:\Users\CURRENT_USER\Downloads\FILENAME.json"
然后,为在此命令之后创建的所有进程设置
GOOGLE_APPLICATION_CREDENTIALS:[Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "C:\Users\CURRENT_USER\Downloads\FILENAME.json", "User")
将示例应用代码库克隆到本地机器:
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples或者,您也可以以 zip 文件的形式下载该示例并将其解压缩。
使用 Visual Studio 2017 或更高版本打开
Spanner.sln(位于下载的代码库的dotnet-docs-samples\spanner\api目录中),然后对其进行构建。切换到下载的代码库中包含已编译的应用的目录。例如:
cd dotnet-docs-samples\spanner\api\Spanner
创建实例
在首次使用 Spanner 时,必须创建一个实例,实例是 Spanner 数据库使用的资源分配单位。创建实例时,请选择一个实例配置(决定数据的存储位置),同时选择要使用的节点数(决定实例中服务资源和存储资源的数量)。
如需了解如何使用以下任一方法创建 Spanner 实例,请参阅创建实例。您可以将实例命名为 test-instance,以便将其用于本文档中引用名为 test-instance 的实例的其他主题。
- Google Cloud CLI
- Google Cloud 控制台
- 客户端库(C++、C#、Go、Java、Node.js、PHP、Python 或 Ruby)
浏览示例文件
示例仓库包含一个示例,展示了如何将 Spanner 与 C# 搭配使用。
请浏览 Spanner .NET GitHub 代码库,其中说明了如何创建数据库和修改数据库架构。数据使用架构和数据模型页面中显示的示例架构。
创建数据库
您应该会看到:
以下代码会创建一个数据库以及该数据库中的两个表。GoogleSQL
PostgreSQL
下一步是将数据写入数据库。
创建数据库客户端
您必须先创建一个 SpannerConnection,然后才能执行读写操作:
您可以将 SpannerConnection 视为数据库连接:您与 Spanner 的所有交互都必须通过 SpannerConnection 进行。
如需了解详情,请参阅 SpannerConnection 参考文档。
使用 DML 写入数据
您可以在读写事务中使用数据操纵语言 (DML) 插入数据。
使用 ExecuteNonQueryAsync() 方法来执行 DML 语句。
使用 writeUsingDml 参数运行示例。
dotnet run writeUsingDml $env:GOOGLE_PROJECT_ID test-instance example-db
您应该会看到:
4 row(s) inserted...
使用变更写入数据
您还可以使用变更插入数据。
您可以使用 connection.CreateInsertCommand() 方法插入数据,此方法会创建一个新的 SpannerCommand 以将行插入表中。SpannerCommand.ExecuteNonQueryAsync() 方法将向表中添加新行。
以下代码演示了如何使用变更插入数据:
使用 insertSampleData 参数运行示例。
dotnet run insertSampleData $env:GOOGLE_PROJECT_ID test-instance example-db
您应该会看到:
Inserted data.
使用 SQL 查询数据
Spanner 支持使用 SQL 接口读取数据,您可以使用 Google Cloud CLI 在命令行中访问该接口,也可以使用 C# 版 Spanner 客户端库以编程方式访问该接口。
在命令行中
执行以下 SQL 语句,读取 Albums 表中所有列的值:
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums'