From befbf68d7368ae5383f60a1b666ab0375fab6fd8 Mon Sep 17 00:00:00 2001 From: josh-wong Date: Thu, 21 Nov 2024 13:21:27 +0000 Subject: [PATCH] AUTO: Sync ScalarDB docs in Japanese to docs site repo --- .../add-scalardb-to-your-build.mdx | 43 + .../version-3.13/api-guide.mdx | 1621 ++++++++++++ .../version-3.13/backup-restore.mdx | 180 ++ .../version-3.13/configurations.mdx | 293 +++ .../version-3.13/data-modeling.mdx | 134 + .../version-3.13/database-configurations.mdx | 122 + .../version-3.13/deploy-overview.mdx | 22 + .../version-3.13/design.mdx | 17 + .../version-3.13/develop-overview.mdx | 32 + ...-started-with-scalardb-by-using-kotlin.mdx | 418 ++++ .../getting-started-with-scalardb.mdx | 537 ++++ .../version-3.13/images/data_model.png | Bin 0 -> 256199 bytes .../images/getting-started-ERD.png | Bin 0 -> 10063 bytes .../version-3.13/images/scalardb.png | Bin 0 -> 113307 bytes .../images/scalardb_data_model.png | Bin 0 -> 259602 bytes .../version-3.13/images/software_stack.png | Bin 0 -> 48864 bytes .../two_phase_commit_load_balancing.png | Bin 0 -> 40021 bytes .../two_phase_commit_sequence_diagram.png | Bin 0 -> 39137 bytes .../manage-backup-and-restore.mdx | 26 + .../monitor-by-using-scalar-manager.mdx | 24 + .../multi-storage-transactions.mdx | 71 + .../version-3.13/overview.mdx | 81 + .../version-3.13/quick-start-overview.mdx | 39 + .../version-3.13/requirements.mdx | 246 ++ .../version-3.13/roadmap.mdx | 96 + ...nal-storage-operations-through-library.mdx | 274 ++ ...tions-through-primitive-crud-interface.mdx | 882 +++++++ ...sactions-through-scalardb-core-library.mdx | 222 ++ .../getting-started.mdx | 101 + .../images/imported-schema.png | Bin 0 -> 52511 bytes .../images/multi-storage-overview.png | Bin 0 -> 51475 bytes .../installation.mdx | 64 + .../scalardb-fdw.mdx | 183 ++ .../schema-importer.mdx | 68 + .../scalardb-analytics-spark/README.mdx | 36 + .../configuration.mdx | 135 + .../getting-started.mdx | 189 ++ .../version-compatibility.mdx | 27 + .../scalardb-benchmarks/README.mdx | 216 ++ .../common-reference.mdx | 163 ++ .../exception-handling.mdx | 176 ++ .../getting-started-with-admin-api.mdx | 131 + .../getting-started-with-aspnet-and-di.mdx | 81 + .../getting-started-with-auth.mdx | 70 + ...rted-with-distributed-sql-transactions.mdx | 195 ++ ...-started-with-distributed-transactions.mdx | 329 +++ .../getting-started-with-linq.mdx | 366 +++ ...with-scalardb-tables-as-csharp-classes.mdx | 207 ++ ...ted-with-two-phase-commit-transactions.mdx | 145 ++ .../index.mdx | 25 + .../scalardb-cluster/compatibility.mdx | 42 + ...ide-for-scalardb-cluster-with-java-api.mdx | 302 +++ ...-started-with-scalardb-cluster-graphql.mdx | 324 +++ ...started-with-scalardb-cluster-sql-jdbc.mdx | 230 ++ ...-scalardb-cluster-sql-spring-data-jdbc.mdx | 271 ++ .../getting-started-with-scalardb-cluster.mdx | 408 +++ ...ted-with-using-go-for-scalardb-cluster.mdx | 443 ++++ ...with-using-python-for-scalardb-cluster.mdx | 486 ++++ .../images/direct-kubernetes-client-mode.png | Bin 0 -> 64538 bytes .../images/getting-started-ERD.png | Bin 0 -> 10063 bytes .../images/indirect-client-mode.png | Bin 0 -> 57621 bytes .../images/scalardb-cluster-architecture.png | Bin 0 -> 50669 bytes .../version-3.13/scalardb-cluster/index.mdx | 71 + ...ge-operations-through-scalardb-cluster.mdx | 313 +++ ...orage-operations-through-sql-interface.mdx | 394 +++ ...nsactions-through-scalardb-cluster-sql.mdx | 300 +++ ...-transactions-through-scalardb-cluster.mdx | 299 +++ .../scalardb-auth-status-codes.mdx | 304 +++ .../scalardb-auth-with-sql.mdx | 184 ++ .../scalardb-cluster-configurations.mdx | 242 ++ .../scalardb-cluster-grpc-api-guide.mdx | 211 ++ .../scalardb-cluster-sql-grpc-api-guide.mdx | 184 ++ .../scalardb-cluster-status-codes.mdx | 403 +++ ...ster-on-kubernetes-by-using-helm-chart.mdx | 257 ++ .../scalardb-cluster/standalone-mode.mdx | 238 ++ .../standalone-mode/docker-compose.yaml | 28 + .../scalardb-cluster-node.properties | 5 + .../scalardb-core-status-codes.mdx | 1767 +++++++++++++ ...ow-to-run-two-phase-commit-transaction.mdx | 144 ++ .../scalardb-graphql-status-codes.mdx | 244 ++ .../version-3.13/scalardb-samples/README.mdx | 21 + .../README.mdx | 537 ++++ .../images/ERD.png | Bin 0 -> 10993 bytes .../images/overview.png | Bin 0 -> 50911 bytes .../images/sequence_diagram.png | Bin 0 -> 35855 bytes .../README.mdx | 317 +++ .../images/ERD.png | Bin 0 -> 9786 bytes .../images/overview.png | Bin 0 -> 64426 bytes .../README.mdx | 308 +++ .../README.mdx | 283 +++ .../README.mdx | 532 ++++ .../images/ERD.png | Bin 0 -> 10993 bytes .../images/overview.png | Bin 0 -> 55118 bytes .../images/seq-diagram-high-level-2pc-api.png | Bin 0 -> 219961 bytes .../images/sequence_diagram.png | Bin 0 -> 35855 bytes .../README.mdx | 334 +++ .../images/ERD.png | Bin 0 -> 9786 bytes .../images/overview.png | Bin 0 -> 62938 bytes .../version-3.13/scalardb-sql/grammar.mdx | 2222 +++++++++++++++++ .../spring_data_ingegration_overall_arch.png | Bin 0 -> 97888 bytes .../version-3.13/scalardb-sql/jdbc-guide.mdx | 194 ++ .../scalardb-sql/migration-guide.mdx | 114 + .../scalardb-sql-status-codes.mdx | 584 +++++ .../scalardb-sql/spring-data-guide.mdx | 820 ++++++ .../scalardb-sql/sql-api-guide.mdx | 364 +++ .../version-3.13/schema-loader-import.mdx | 278 +++ .../version-3.13/schema-loader.mdx | 710 ++++++ .../TransactionManagementOnCassandra.pdf | Bin 0 -> 831161 bytes .../two-phase-commit-transactions.mdx | 754 ++++++ 109 files changed, 24753 insertions(+) create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/add-scalardb-to-your-build.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/api-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/backup-restore.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/configurations.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/data-modeling.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/database-configurations.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/deploy-overview.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/design.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/develop-overview.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb-by-using-kotlin.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/data_model.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/getting-started-ERD.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/scalardb.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/scalardb_data_model.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/software_stack.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/two_phase_commit_load_balancing.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/two_phase_commit_sequence_diagram.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/manage-backup-and-restore.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/monitor-by-using-scalar-manager.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/multi-storage-transactions.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/overview.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/quick-start-overview.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/requirements.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/roadmap.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-library.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-primitive-crud-interface.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-transactions-through-scalardb-core-library.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/getting-started.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/images/imported-schema.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/images/multi-storage-overview.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/installation.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/scalardb-fdw.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/schema-importer.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/configuration.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/getting-started.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/version-compatibility.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-benchmarks/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/common-reference.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/exception-handling.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-admin-api.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-aspnet-and-di.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-auth.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-sql-transactions.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-transactions.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-linq.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-scalardb-tables-as-csharp-classes.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-two-phase-commit-transactions.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/index.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/compatibility.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-graphql.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-jdbc.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-go-for-scalardb-cluster.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-python-for-scalardb-cluster.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/images/direct-kubernetes-client-mode.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/images/getting-started-ERD.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/images/indirect-client-mode.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/images/scalardb-cluster-architecture.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/index.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-scalardb-cluster.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-sql-interface.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster-sql.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-status-codes.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-with-sql.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-configurations.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-grpc-api-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-sql-grpc-api-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-status-codes.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/docker-compose.yaml create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/scalardb-cluster-node.properties create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-core-status-codes.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/how-to-run-two-phase-commit-transaction.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/scalardb-graphql-status-codes.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/ERD.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/overview.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/sequence_diagram.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/images/ERD.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/images/overview.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-postgresql-sample/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-spark-sample/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/ERD.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/overview.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/seq-diagram-high-level-2pc-api.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/sequence_diagram.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/README.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/images/ERD.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/images/overview.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/grammar.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/images/spring_data_ingegration_overall_arch.png create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/jdbc-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/migration-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/scalardb-sql-status-codes.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/spring-data-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-sql/sql-api-guide.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/schema-loader-import.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/schema-loader.mdx create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/slides/TransactionManagementOnCassandra.pdf create mode 100644 i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/two-phase-commit-transactions.mdx diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/add-scalardb-to-your-build.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/add-scalardb-to-your-build.mdx new file mode 100644 index 00000000..5c6fdca7 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/add-scalardb-to-your-build.mdx @@ -0,0 +1,43 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ビルドに ScalarDB を追加する + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB ライブラリは、[Maven Central Repository](https://mvnrepository.com/artifact/com.scalar-labs/scalardb) で入手できます。Gradle または Maven を使用して、ライブラリをビルド依存関係としてアプリケーションに追加できます。 + +## ビルドツールに基づいてアプリケーションを設定する + +ビルドツールを選択し、手順に従って ScalarDB のビルド依存関係をアプリケーションに追加します。 + + + + Gradle を使用して ScalarDB のビルド依存関係を追加するには、アプリケーションの `build.gradle` に次のコードを追加し、`` を使用する ScalarDB のバージョンに置き換えます。 + + ```gradle + dependencies { + implementation 'com.scalar-labs:scalardb:' + } + ``` + + + Maven を使用して ScalarDB のビルド依存関係を追加するには、アプリケーションの `pom.xml` に次のコードを追加し、`` を使用する ScalarDB のバージョンに置き換えます。 + + ```xml + + com.scalar-labs + scalardb + + + ``` + + diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/api-guide.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/api-guide.mdx new file mode 100644 index 00000000..75c9f6d0 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/api-guide.mdx @@ -0,0 +1,1621 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Java API ガイド + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Java API は、主に管理 API とトランザクション API で設定されています。このガイドでは、どのような種類の API が存在するのか、それらの使用方法、例外の処理方法などの関連トピックについて簡単に説明します。 + +## Administrative API + +このセクションでは、ScalarDB の管理 API を使用してプログラムで管理操作を実行する方法について説明します。 + +:::note + +管理操作を実行する別の方法は、[Schema Loader](schema-loader.mdx) を使用することです。 + +::: + +### `DistributedTransactionAdmin` インスタンスを取得する + +管理操作を実行するには、まず `DistributedTransactionAdmin` インスタンスを取得する必要があります。 + +`DistributedTransactionAdmin` インスタンスを取得するには、次のように `TransactionFactory` を使用します。 + +```java +TransactionFactory transactionFactory = TransactionFactory.create(""); +DistributedTransactionAdmin admin = transactionFactory.getTransactionAdmin(); +``` + +設定の詳細については、[ScalarDB 設定](configurations.mdx)を参照してください。 + +すべての管理操作を実行したら、次のように `DistributedTransactionAdmin` インスタンスを閉じる必要があります。 + +```java +admin.close(); +``` + +### 名前空間を作成する + +テーブルは 1 つの名前空間に属するため、テーブルを作成する前に名前空間を作成する必要があります。 + +名前空間は次のように作成できます。 + +```java +// Create the namespace "ns". If the namespace already exists, an exception will be thrown. +admin.createNamespace("ns"); + +// Create the namespace only if it does not already exist. +boolean ifNotExists = true; +admin.createNamespace("ns", ifNotExists); + +// Create the namespace with options. +Map options = ...; +admin.createNamespace("ns", options); +``` + +#### 作成オプション + +名前空間の作成やテーブルの作成などの作成操作では、オプション名と値のマップであるオプション (`Map`) を指定できます。オプションを使用すると、ストレージアダプタ固有の設定ができます。 + +データベースを選択して、使用可能なオプションを確認します。 + + + + JDBC データベースには使用できるオプションはありません。 + + + | 名前 | 説明 | デフォルト | + |------------|-------------------------------------------------|------------| + | no-scaling | DynamoDB の自動スケーリングを無効にします。 | false | + | no-backup | DynamoDB の継続的なバックアップを無効にします。 | false | + | ru | 基本リソース単位。 | 10 | + + + | 名前 | 説明 | デフォルト | + |------------|--------------------------------------------------------|------------| + | ru | 基本リソース単位。 | 400 | + | no-scaling | Cosmos DB for NoSQL の自動スケーリングを無効にします。 | false | + + + | 名前 | 説明 | デフォルト | + |----------------------|----------------------------------------------------------------------------------------------------------|-------------------| + | replication-strategy | Cassandra レプリケーション戦略。`SimpleStrategy` または `NetworkTopologyStrategy` である必要があります。 | `SimpleStrategy` | + | compaction-strategy | Cassandra 圧縮戦略。`LCS`、`STCS`、または `TWCS` である必要があります。 | `STCS` | + | replication-factor | Cassandra の複製係数。 | 3 | + + + +### テーブルを作成する + +テーブルを作成するときは、テーブルメタデータを定義してからテーブルを作成する必要があります。 + +テーブルメタデータを定義するには、`TableMetadata` を使用できます。次の図は、テーブルの列、パーティションキー、クラスタリングキー (クラスタリング順序を含む)、およびセカンダリインデックスを定義する方法を示しています。 + +```java +// Define the table metadata. +TableMetadata tableMetadata = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.TEXT) + .addColumn("c3", DataType.BIGINT) + .addColumn("c4", DataType.FLOAT) + .addColumn("c5", DataType.DOUBLE) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.DESC) + .addClusteringKey("c3", Scan.Ordering.Order.ASC) + .addSecondaryIndex("c4") + .build(); +``` + +ScalarDB のデータモデルの詳細については、[データモデル](design.mdx#データモデル)を参照してください。 + +次に、次のようにテーブルを作成します。 + +```java +// Create the table "ns.tbl". If the table already exists, an exception will be thrown. +admin.createTable("ns", "tbl", tableMetadata); + +// Create the table only if it does not already exist. +boolean ifNotExists = true; +admin.createTable("ns", "tbl", tableMetadata, ifNotExists); + +// Create the table with options. +Map options = ...; +admin.createTable("ns", "tbl", tableMetadata, options); +``` + +### セカンダリインデックスを作成する + +セカンダリインデックスは次のように作成できます。 + +```java +// Create a secondary index on column "c5" for table "ns.tbl". If a secondary index already exists, an exception will be thrown. +admin.createIndex("ns", "tbl", "c5"); + +// Create the secondary index only if it does not already exist. +boolean ifNotExists = true; +admin.createIndex("ns", "tbl", "c5", ifNotExists); + +// Create the secondary index with options. +Map options = ...; +admin.createIndex("ns", "tbl", "c5", options); +``` + +### テーブルに新しい列を追加する + +次のように、テーブルに新しい非パーティションキー列を追加できます。 + +```java +// Add a new column "c6" with the INT data type to the table "ns.tbl". +admin.addNewColumnToTable("ns", "tbl", "c6", DataType.INT) +``` + +:::warning + +テーブルに新しい列を追加する場合は、基盤となるストレージによって実行時間が大きく異なる可能性があるため、慎重に検討する必要があります。それに応じて計画を立て、特にデータベースが本番環境で実行されている場合は、次の点を考慮してください。 + +- **Cosmos DB for NoSQL および DynamoDB の場合:** テーブルスキーマは変更されないため、列の追加はほぼ瞬時に行われます。別のテーブルに格納されているテーブルメタデータのみが更新されます。 +- **Cassandra の場合:** 列を追加すると、スキーマメタデータのみが更新され、既存のスキーマレコードは変更されません。クラスタートポロジが実行時間の主な要因です。スキーマメタデータの変更は、ゴシッププロトコルを介して各クラスターノードに共有されます。このため、クラスターが大きいほど、すべてのノードが更新されるまでの時間が長くなります。 +- **リレーショナルデータベース (MySQL、Oracle など) の場合:** 列の追加は実行にそれほど時間がかかりません。 + +::: + +### テーブルを切り捨てる + +テーブルを切り捨てるには、次のようにします。 + +```java +// Truncate the table "ns.tbl". +admin.truncateTable("ns", "tbl"); +``` + +### セカンダリインデックスを削除する + +セカンダリインデックスは次のように削除できます。 + +```java +// Drop the secondary index on column "c5" from table "ns.tbl". If the secondary index does not exist, an exception will be thrown. +admin.dropIndex("ns", "tbl", "c5"); + +// Drop the secondary index only if it exists. +boolean ifExists = true; +admin.dropIndex("ns", "tbl", "c5", ifExists); +``` + +### テーブルを削除する + +テーブルを削除するには、次のようにします。 + +```java +// Drop the table "ns.tbl". If the table does not exist, an exception will be thrown. +admin.dropTable("ns", "tbl"); + +// Drop the table only if it exists. +boolean ifExists = true; +admin.dropTable("ns", "tbl", ifExists); +``` + +### 名前空間を削除する + +名前空間を削除するには、次のようにします。 + +```java +// Drop the namespace "ns". If the namespace does not exist, an exception will be thrown. +admin.dropNamespace("ns"); + +// Drop the namespace only if it exists. +boolean ifExists = true; +admin.dropNamespace("ns", ifExists); +``` + +### 既存の名前空間を取得する + +既存の名前空間は次のように取得できます。 + +```java +Set namespaces = admin.getNamespaceNames(); +``` + +### 名前空間のテーブルを取得する + +名前空間のテーブルは次のように取得できます。 + +```java +// Get the tables of the namespace "ns". +Set tables = admin.getNamespaceTableNames("ns"); +``` + +### テーブルメタデータを取得する + +テーブルメタデータは次のように取得できます。 + +```java +// Get the table metadata for "ns.tbl". +TableMetadata tableMetadata = admin.getTableMetadata("ns", "tbl"); +``` + +### 名前空間を修復する + +名前空間が不明な状態の場合 (たとえば、名前空間が基盤となるストレージに存在するが ScalarDB メタデータが存在しない、またはその逆)、このメソッドは必要に応じて名前空間とそのメタデータを再作成します。 + +名前空間は次のように修復できます。 + +```java +// Repair the namespace "ns" with options. +Map options = ...; +admin.repairNamespace("ns", options); +``` + +### テーブルを修復する + +テーブルが不明な状態の場合 (テーブルは基盤となるストレージに存在するが ScalarDB メタデータは存在しない、またはその逆)、このメソッドは必要に応じてテーブル、そのセカンダリインデックス、およびそのメタデータを再作成します。 + +テーブルは次のように修復できます。 + +```java +// Repair the table "ns.tbl" with options. +TableMetadata tableMetadata = + TableMetadata.newBuilder() + ... + .build(); +Map options = ...; +admin.repairTable("ns", "tbl", tableMetadata, options); +``` + +### 最新の ScalarDB API をサポートするように環境をアップグレードする + +ScalarDB API の最新バージョンをサポートするように ScalarDB 環境をアップグレードできます。通常、リリースノートに記載されているように、アプリケーション環境が使用する ScalarDB バージョンを更新した後、このメソッドを実行する必要があります。 + +```java +// Upgrade the ScalarDB environment. +Map options = ...; +admin.upgrade(options); +``` + +### Coordinator テーブルの操作を指定する + +Coordinator テーブルは、[Transactional API](#transactional-api) によってトランザクションのステータスを追跡するために使用されます。 + +トランザクションマネージャーを使用する場合は、トランザクションを実行するために Coordinator テーブルを作成する必要があります。テーブルの作成に加えて、Coordinator テーブルを切り捨てたり削除したりすることもできます。 + +#### Coordinator テーブルを作成する + +Coordinator テーブルは次のように作成できます。 + +```java +// Create the Coordinator table. +admin.createCoordinatorTables(); + +// Create the Coordinator table only if one does not already exist. +boolean ifNotExist = true; +admin.createCoordinatorTables(ifNotExist); + +// Create the Coordinator table with options. +Map options = ...; +admin.createCoordinatorTables(options); +``` + +#### Coordinator テーブルを切り捨てる + +Coordinator テーブルは次のように切り捨てることができます。 + +```java +// Truncate the Coordinator table. +admin.truncateCoordinatorTables(); +``` + +#### Coordinator テーブルを削除する + +Coordinator テーブルは次のように削除できます。 + +```java +// Drop the Coordinator table. +admin.dropCoordinatorTables(); + +// Drop the Coordinator table if one exist. +boolean ifExist = true; +admin.dropCoordinatorTables(ifExist); +``` + +### テーブルをインポートする + +既存のテーブルを ScalarDB にインポートするには、次のようにします。 + +```java +// Import the table "ns.tbl". If the table is already managed by ScalarDB, the target table does not +// exist, or the table does not meet the requirements of the ScalarDB table, an exception will be thrown. +admin.importTable("ns", "tbl", options); +``` + +:::warning + +運用環境で ScalarDB にテーブルをインポートする場合は、データベーステーブルと ScalarDB メタデータテーブルにトランザクションメタデータ列が追加されるため、慎重に計画する必要があります。この場合、データベースと ScalarDB の間にはいくつかの違いがあり、いくつかの制限もあります。詳細については、[ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](./schema-loader-import.mdx)を参照してください。 + +::: + +## Transactional API + +このセクションでは、ScalarDB の Transactional API を使用してトランザクション操作を実行する方法について説明します。 + +### `DistributedTransactionManager` インスタンスを取得する + +トランザクション操作を実行するには、まず `DistributedTransactionManager` インスタンスを取得する必要があります。 + +`DistributedTransactionManager` インスタンスを取得するには、次のように `TransactionFactory` を使用します。 + +```java +TransactionFactory transactionFactory = TransactionFactory.create(""); +DistributedTransactionManager transactionManager = transactionFactory.getTransactionManager(); +``` + +すべてのトランザクション操作を実行した後、次のように `DistributedTransactionManager` インスタンスを閉じる必要があります。 + +```java +transactionManager.close(); +``` + +### トランザクションを実行する + +このサブセクションでは、複数の CRUD 操作でトランザクションを実行する方法について説明します。 + +#### トランザクションを開始する + +トランザクション CRUD 操作を実行する前に、トランザクションを開始する必要があります。 + +トランザクションは次のように開始できます。 + +```java +// Begin a transaction. +DistributedTransaction transaction = transactionManager.begin(); +``` + +または、次のようにトランザクションを開始することもできます。 + +```java +// Start a transaction. +DistributedTransaction transaction = transactionManager.start(); +``` + +あるいは、次のようにトランザクション ID を指定して、トランザクションに `begin` メソッドを使用することもできます。 + +```java +// Begin a transaction with specifying a transaction ID. +DistributedTransaction transaction = transactionManager.begin(""); +``` + +または、次のようにトランザクション ID を指定して、トランザクションに `start` メソッドを使用することもできます。 + +```java +// Start a transaction with specifying a transaction ID. +DistributedTransaction transaction = transactionManager.start(""); +``` + +:::note + +トランザクション ID を指定すると、外部システムを ScalarDB にリンクする場合に便利です。それ以外の場合は、`begin()` メソッドまたは `start()` メソッドを使用する必要があります。 + +トランザクション ID を指定する場合は、ScalarDB の正確性はトランザクション ID の一意性に依存するため、システム全体で一意の ID (UUID v4 など) を指定してください。 + +::: + +#### トランザクションに参加する + +トランザクションに参加することは、トランザクションが複数のクライアントリクエストにまたがるステートフルアプリケーションで特に便利です。このようなシナリオでは、アプリケーションは最初のクライアントリクエスト中にトランザクションを開始できます。その後、後続のクライアントリクエストで、アプリケーションは `join()` メソッドを使用して進行中のトランザクションに参加できます。 + +次のようにトランザクション ID を指定すると、すでに開始されている進行中のトランザクションに参加できます。 + +```java +// Join a transaction. +DistributedTransaction transaction = transactionManager.join(""); +``` + +:::note + +`getId()` を使用してトランザクション ID を取得するには、次のように指定します。 + +```java +tx.getId(); +``` + +::: + +#### トランザクションを再開する + +トランザクションの再開は、トランザクションが複数のクライアントリクエストにまたがるステートフルアプリケーションで特に役立ちます。このようなシナリオでは、アプリケーションは最初のクライアントリクエスト中にトランザクションを開始できます。その後、後続のクライアントリクエストで、アプリケーションは `resume()` メソッドを使用して進行中のトランザクションを再開できます。 + +次のようにトランザクション ID を指定すると、すでに開始した進行中のトランザクションを再開できます。 + +```java +// Resume a transaction. +DistributedTransaction transaction = transactionManager.resume(""); +``` + +:::note + +`getId()` を使用してトランザクション ID を取得するには、次のように指定します。 + +```java +tx.getId(); +``` + +::: + +#### CRUD 操作を実装する + +次のセクションでは、キーの構築と CRUD 操作について説明します。 + +:::note + +CRUD 操作のすべてのビルダーは `consistency()` メソッドを使用して一貫性を指定できますが、これらのメソッドは無視されます。代わりに、トランザクションでは常に `LINEARIZABLE` 一貫性レベルが使用されます。 + +::: + +##### キーの構築 + +ほとんどの CRUD 操作では、`Key` オブジェクト (パーティションキー、クラスタリングキーなど) を指定する必要があります。そのため、CRUD 操作に進む前に、`Key` オブジェクトの構築方法を次に説明します。 + +単一の列キーの場合、次のように `Key.of()` メソッドを使用してキーを構築できます。 + +```java +// For a key that consists of a single column of INT. +Key key1 = Key.ofInt("col1", 1); + +// For a key that consists of a single column of BIGINT. +Key key2 = Key.ofBigInt("col1", 100L); + +// For a key that consists of a single column of DOUBLE. +Key key3 = Key.ofDouble("col1", 1.3d); + +// For a key that consists of a single column of TEXT. +Key key4 = Key.ofText("col1", "value"); +``` + +2~5 列で設定されるキーの場合は、`Key.of()` メソッドを使用して次のようにキーを構築できます。Guava の `ImmutableMap.of()` と同様に、列名と値を順番に指定する必要があります。 + +```java +// For a key that consists of two to five columns. +Key key1 = Key.of("col1", 1, "col2", 100L); +Key key2 = Key.of("col1", 1, "col2", 100L, "col3", 1.3d); +Key key3 = Key.of("col1", 1, "col2", 100L, "col3", 1.3d, "col4", "value"); +Key key4 = Key.of("col1", 1, "col2", 100L, "col3", 1.3d, "col4", "value", "col5", false); +``` + +5 列を超えるキーの場合は、ビルダーを使用して次のようにキーを構築できます。 + +```java +// For a key that consists of more than five columns. +Key key = Key.newBuilder() + .addInt("col1", 1) + .addBigInt("col2", 100L) + .addDouble("col3", 1.3d) + .addText("col4", "value") + .addBoolean("col5", false) + .addInt("col6", 100) + .build(); +``` + +##### `Get` 操作 + +`Get` は、プライマリーキーで指定された単一のレコードを取得する操作です。 + +まず `Get` オブジェクトを作成し、次に次のように `transaction.get()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Get` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .projections("c1", "c2", "c3", "c4") + .where(ConditionBuilder.column("c1").isNotEqualToInt(10)) + .build(); + +// Execute the `Get` operation. +Optional result = transaction.get(get); +``` + +射影を指定して、返される列を選択できます。 + +###### `WHERE` 句を使用する + +`where()` メソッドを使用して任意の条件を指定することもできます。取得したレコードが `where()` メソッドで指定された条件と一致しない場合は、`Option.empty()` が返されます。`where()` メソッドの引数として、条件、AND 条件セット、または OR 条件セットを指定できます。`where()` メソッドを呼び出した後、次のように `and()` メソッドまたは `or()` メソッドを使用して、さらに条件または条件セットを追加できます。 + +```java +// Create a `Get` operation with condition sets. +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .where( + ConditionSetBuilder.condition(ConditionBuilder.column("c1").isLessThanInt(10)) + .or(ConditionBuilder.column("c1").isGreaterThanInt(20)) + .build()) + .and( + ConditionSetBuilder.condition(ConditionBuilder.column("c2").isLikeText("a%")) + .or(ConditionBuilder.column("c2").isLikeText("b%")) + .build()) + .build(); +``` + +:::note + +`where()` 条件メソッドチェーンでは、条件は上記の例のように `ConditionalExpression` または `OrConditionSet` の AND 結合 (結合正規形と呼ばれる)、または `ConditionalExpression` または `AndConditionSet` の OR 結合 (分離正規形と呼ばれる) である必要があります。 + +::: + +使用可能な条件と条件セットの詳細については、使用している ScalarDB バージョンの [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardb/latest/index.html) の `ConditionBuilder` および `ConditionSetBuilder` ページを参照してください。 + +###### `Result` オブジェクトの処理 + +`Get` 操作と `Scan` 操作は `Result` オブジェクトを返します。次に、`Result` オブジェクトの処理方法を示します。 + +次のように `get("")` メソッドを使用して、結果の列値を取得できます。 + +```java +// Get the BOOLEAN value of a column. +boolean booleanValue = result.getBoolean(""); + +// Get the INT value of a column. +int intValue = result.getInt(""); + +// Get the BIGINT value of a column. +long bigIntValue = result.getBigInt(""); + +// Get the FLOAT value of a column. +float floatValue = result.getFloat(""); + +// Get the DOUBLE value of a column. +double doubleValue = result.getDouble(""); + +// Get the TEXT value of a column. +String textValue = result.getText(""); + +// Get the BLOB value of a column as a `ByteBuffer`. +ByteBuffer blobValue = result.getBlob(""); + +// Get the BLOB value of a column as a `byte` array. +byte[] blobValueAsBytes = result.getBlobAsBytes(""); +``` + +列の値が null かどうかを確認する必要がある場合は、`isNull("")` メソッドを使用できます。 + +``` java +// Check if a value of a column is null. +boolean isNull = result.isNull(""); +``` + +詳細については、使用している ScalarDB のバージョンの [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardb/3.13.1/index.html) の `Result` ページを参照してください。 + +###### セカンダリインデックスを使用して `Get` を実行する + +セカンダリインデックスを使用して `Get` 操作を実行できます。 + +パーティションキーを指定する代わりに、次のようにインデックスキー (インデックス付き列) を指定してセカンダリインデックスを使用できます。 + +```java +// Create a `Get` operation by using a secondary index. +Key indexKey = Key.ofFloat("c4", 1.23F); + +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .indexKey(indexKey) + .projections("c1", "c2", "c3", "c4") + .where(ConditionBuilder.column("c1").isNotEqualToInt(10)) + .build(); + +// Execute the `Get` operation. +Optional result = transaction.get(get); +``` + +`where()` メソッドを使用して任意の条件を指定することもできます。詳細については、[`WHERE` 句を使用する](#where-句を使用する)を参照してください。 + +:::note + +結果に複数のレコードがある場合、`transaction.get()` は例外をスローします。複数の結果を処理する場合は、[セカンダリインデックスを使用して `Scan` を実行する](#セカンダリインデックスを使用して-scan-を実行する)を参照してください。 + +::: + +##### `Scan` 操作 + +`Scan` は、パーティション内の複数のレコードを取得する操作です。`Scan` 操作では、クラスタリングキーの境界とクラスタリングキー列の順序を指定できます。 + +まず `Scan` オブジェクトを作成し、次に次のように `transaction.scan()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Scan` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key startClusteringKey = Key.of("c2", "aaa", "c3", 100L); +Key endClusteringKey = Key.of("c2", "aaa", "c3", 300L); + +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .start(startClusteringKey, true) // Include startClusteringKey + .end(endClusteringKey, false) // Exclude endClusteringKey + .projections("c1", "c2", "c3", "c4") + .orderings(Scan.Ordering.desc("c2"), Scan.Ordering.asc("c3")) + .where(ConditionBuilder.column("c1").isNotEqualToInt(10)) + .limit(10) + .build(); + +// Execute the `Scan` operation. +List results = transaction.scan(scan); +``` + +クラスタリングキー境界を省略するか、`start` 境界または `end` 境界のいずれかを指定できます。`orderings` を指定しない場合は、テーブルの作成時に定義したクラスタリング順序で結果が並べられます。 + +さらに、`projections` を指定して返される列を選択し、`limit` を使用して `Scan` 操作で返されるレコードの数を指定できます。 + +###### `WHERE` 句を使用する + +`where()` メソッドを使用してスキャンされたレコードをフィルタリングすることで、任意の条件を指定することもできます。`where()` メソッドの引数として、条件、AND 条件セット、または OR 条件セットを指定できます。`where()` メソッドを呼び出した後、次のように `and()` メソッドまたは `or()` メソッドを使用して、さらに条件または条件セットを追加できます。 + +```java +// Create a `Scan` operation with condition sets. +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .all() + .where( + ConditionSetBuilder.condition(ConditionBuilder.column("c1").isLessThanInt(10)) + .or(ConditionBuilder.column("c1").isGreaterThanInt(20)) + .build()) + .and( + ConditionSetBuilder.condition(ConditionBuilder.column("c2").isLikeText("a%")) + .or(ConditionBuilder.column("c2").isLikeText("b%")) + .build()) + .limit(10) + .build(); +``` + +:::note + +`where()` 条件メソッドチェーンでは、条件は上記の例のように `ConditionalExpression` または `OrConditionSet` の AND 結合 (結合正規形と呼ばれる)、または `ConditionalExpression` または `AndConditionSet` の OR 結合 (分離正規形と呼ばれる) である必要があります。 + +::: + +使用可能な条件と条件セットの詳細については、使用している ScalarDB のバージョンの [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardb/latest/index.html) の `ConditionBuilder` および `ConditionSetBuilder` ページを参照してください。 + +###### セカンダリインデックスを使用して `Scan` を実行する + +セカンダリインデックスを使用して、`Scan` 操作を実行できます。 + +パーティションキーを指定する代わりに、次のようにインデックスキー (インデックス付き列) を指定してセカンダリインデックスを使用できます。 + +```java +// Create a `Scan` operation by using a secondary index. +Key indexKey = Key.ofFloat("c4", 1.23F); + +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .indexKey(indexKey) + .projections("c1", "c2", "c3", "c4") + .where(ConditionBuilder.column("c1").isNotEqualToInt(10)) + .limit(10) + .build(); + +// Execute the `Scan` operation. +List results = transaction.scan(scan); +``` + +`where()` メソッドを使用して任意の条件を指定することもできます。詳細については、[`WHERE` 句を使用する](#where-句を使用する)を参照してください。 + +:::note + +セカンダリインデックスを使用して、`Scan` でクラスタリングキーの境界と順序を指定することはできません。 + +::: + +###### パーティションキーを指定せずにクロスパーティション `Scan` を実行し、テーブルのすべてのレコードを取得します + +ScalarDB プロパティファイルで次の設定を有効にすると、パーティションキーを指定せずに、すべてのパーティションにわたって `Scan` 操作 (クロスパーティションスキャン* と呼びます) を実行できます。 + +```properties +scalar.db.cross_partition_scan.enabled=true +``` + +:::warning + +非 JDBC データベースの場合、`SERIALIZABLE` 分離レベルでクロスパーティションスキャンを有効にした場合でも、トランザクションは読み取りコミットスナップショット分離 (`SNAPSHOT`) で実行される可能性があります。これは、より低い分離レベルです。非 JDBC データベースを使用する場合は、トランザクションの一貫性が重要でない場合にのみ、クロスパーティションスキャンを使用してください。 + +::: + +ビルダーで `partitionKey()` メソッドを呼び出す代わりに、次のように `all()` メソッドを呼び出して、パーティションキーを指定せずにテーブルをスキャンできます。 + +```java +// Create a `Scan` operation without specifying a partition key. +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .all() + .projections("c1", "c2", "c3", "c4") + .limit(10) + .build(); + +// Execute the `Scan` operation. +List results = transaction.scan(scan); +``` + +:::note + +非 JDBC データベースを使用する場合、クロスパーティション `Scan` で順序を指定することはできません。フィルタリングまたは順序付けを指定したクロスパーティション `Scan` の使用方法の詳細については、[フィルタリングと順序付けを使用してパーティション間の `Scan` を実行する](#フィルタリングと順序付けを使用してパーティション間の-scan-を実行する)を参照してください。 + +::: + +###### フィルタリングと順序付けを使用してパーティション間の `Scan` を実行する + +次のようにフィルタリングと順序付けによるクロスパーティションスキャンオプションを有効にすると、柔軟な条件と順序付けでクロスパーティション `Scan` 操作を実行できます。 + +```properties +scalar.db.cross_partition_scan.enabled=true +scalar.db.cross_partition_scan.filtering.enabled=true +scalar.db.cross_partition_scan.ordering.enabled=true +``` + +:::note + +非 JDBC データベースでは `scalar.db.cross_partition_scan.ordering` を有効にすることはできません。 + +::: + +次のように、`all()` メソッドを呼び出した後に `where()` メソッドと `ordering()` メソッドを呼び出して、任意の条件と順序を指定できます。 + +```java +// Create a `Scan` operation with arbitrary conditions and orderings. +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .all() + .where(ConditionBuilder.column("c1").isNotEqualToInt(10)) + .projections("c1", "c2", "c3", "c4") + .orderings(Scan.Ordering.desc("c3"), Scan.Ordering.asc("c4")) + .limit(10) + .build(); + +// Execute the `Scan` operation. +List results = transaction.scan(scan); +``` + +`WHERE` 句の詳細については、[`WHERE` 句を使用する](#where-句を使用する)を参照してください。 + +##### `Put` 操作 + +:::note + +`Put` 操作は ScalarDB 3.13 以降では非推奨となり、将来のリリースでは削除される予定です。`Put` 操作の代わりに、`Insert` 操作、`Upsert` 操作、または `Update` 操作を使用してください。 + +::: + +`Put` は、プライマリーキーで指定されたレコードを配置する操作です。この操作はレコードの upsert 操作として動作し、レコードが存在する場合はレコードを更新し、レコードが存在しない場合はレコードを挿入します。 + +:::note + +既存のレコードを更新する場合、`Put` 操作を使用する前に `Get` または `Scan` を使用してレコードを読み取る必要があります。そうしないと、競合により操作が失敗します。これは、トランザクションを適切に管理するための ScalarDB の仕様により発生します。レコードを明示的に読み取る代わりに、暗黙的な事前読み取りを有効にできます。詳細については、[`Put` 操作の暗黙的な事前読み取りを有効にする](#put-操作の暗黙的な事前読み取りを有効にする)を参照してください。 + +::: + +まず `Put` オブジェクトを作成し、次に次のように `transaction.put()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Put` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Put` operation. +transaction.put(put); +``` + +次のように `null` 値を持つレコードを配置することもできます。 + +```java +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", null) + .doubleValue("c5", null) + .build(); +``` + +###### `Put` 操作の暗黙的な事前読み取りを有効にする + +Consensus Commit では、レコードが存在する場合、レコードの最新の状態を取得するために、アプリケーションは `Put` および `Delete` 操作でレコードを変更する前にレコードを読み取る必要があります。レコードを明示的に読み取る代わりに、*暗黙的な事前読み取り* を有効にすることができます。暗黙的な事前読み取りを有効にすると、アプリケーションがトランザクションでレコードを明示的に読み取らない場合は、ScalarDB がトランザクションをコミットする前にアプリケーションに代わってレコードを読み取ります。 + +`Put` 操作の暗黙的な事前読み取りを有効にするには、次のように `Put` 操作ビルダーで `enableImplicitPreRead()` を指定します。 + +```java +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .enableImplicitPreRead() + .build(); +``` + +:::note + +変更しようとしているレコードが存在しないことが確実な場合は、パフォーマンスを向上させるために、`Put` 操作の暗黙的な事前読み取りを有効にしないでください。たとえば、初期データをロードする場合は、暗黙的な事前読み取りを有効にしないでください。暗黙的な事前読み取りのない `Put` 操作は、暗黙的な事前読み取りのある `Put` 操作よりも高速です。これは、操作によって不要な読み取りがスキップされるためです。 + +::: + +##### `Insert` 操作 + +`Insert` は、トランザクションを通じて基礎となるストレージにエントリを挿入する操作です。エントリがすでに存在する場合は、競合エラーが発生します。 + +まず `Insert` オブジェクトを作成し、次に次のように `transaction.insert()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create an `Insert` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Insert insert = + Insert.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Insert` operation. +transaction.insert(insert); +``` + +##### `Upsert` 操作 + +`Upsert` は、トランザクションを通じて基礎となるストレージにエントリを挿入したり、エントリを更新したりする操作です。エントリがすでに存在する場合は更新され、そうでない場合はエントリが挿入されます。 + +まず `Upsert` オブジェクトを作成し、次に次のように `transaction.upsert()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create an `Upsert` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Upsert upsert = + Upsert.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Upsert` operation. +transaction.upsert(upsert); +``` + +##### `Update` 操作 + +`Update` は、トランザクションを通じて基礎となるストレージ内のエントリを更新する操作です。エントリが存在しない場合、操作によって変更は行われません。 + +まず `Update` オブジェクトを作成し、次に次のように `transaction.update()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create an `Update` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Update update = + Update.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Update` operation. +transaction.update(update); +``` + +##### `Delete` 操作 + +`Delete` は、プライマリーキーで指定されたレコードを削除する操作です。 + +:::note + +レコードを削除する場合、`Delete` 操作では暗黙的な事前読み取りが常に有効になっているため、事前にレコードを読み取る必要はありません。 + +::: + +まず `Delete` オブジェクトを作成し、次に次のように `transaction.delete()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Delete` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .build(); + +// Execute the `Delete` operation. +transaction.delete(delete); +``` + +##### 条件付きの `Put`、`Delete`、`Update` + +トランザクション内で条件をチェックするロジックを実装することで、コミット前にトランザクションが満たす必要のある任意の条件 (たとえば、銀行口座の残高が 0 以上である必要がある) を記述できます。または、`Put`、`Delete`、`Update` などのミューテーション操作で単純な条件を記述することもできます。 + +`Put`、`Delete`、`Update` 操作に条件が含まれている場合、指定された条件が満たされた場合にのみ操作が実行されます。操作の実行時に条件が満たされていない場合は、`UnsatisfiedConditionException` という例外がスローされます。 + +:::note + +`Put` 操作で条件を指定する場合は、事前にレコードを読み取るか、暗黙的な事前読み取りを有効にする必要があります。 + +::: + +###### `Put` の条件 + +`Put` 操作では、次のように条件を指定できます。 + +```java +// Build a condition. +MutationCondition condition = + ConditionBuilder.putIf(ConditionBuilder.column("c4").isEqualToFloat(0.0F)) + .and(ConditionBuilder.column("c5").isEqualToDouble(0.0)) + .build(); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .condition(condition) // condition + .build(); + +// Execute the `Put` operation. +transaction.put(put); +``` + +`putIf` 条件を使用するだけでなく、次のように `putIfExists` 条件と `putIfNotExists` 条件を指定することもできます。 + +```java +// Build a `putIfExists` condition. +MutationCondition putIfExistsCondition = ConditionBuilder.putIfExists(); + +// Build a `putIfNotExists` condition. +MutationCondition putIfNotExistsCondition = ConditionBuilder.putIfNotExists(); +``` + +###### `Delete` の条件 + +`Delete` 操作では、次のように条件を指定できます。 + +```java +// Build a condition. +MutationCondition condition = + ConditionBuilder.deleteIf(ConditionBuilder.column("c4").isEqualToFloat(0.0F)) + .and(ConditionBuilder.column("c5").isEqualToDouble(0.0)) + .build(); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .condition(condition) // condition + .build(); + +// Execute the `Delete` operation. +transaction.delete(delete); +``` + +`deleteIf` 条件を使用するだけでなく、次のように `deleteIfExists` 条件を指定することもできます。 + +```java +// Build a `deleteIfExists` condition. +MutationCondition deleteIfExistsCondition = ConditionBuilder.deleteIfExists(); +``` + +###### `Update` の条件 + +`Update` 操作では、次のように条件を指定できます。 + +```java +// Build a condition. +MutationCondition condition = + ConditionBuilder.updateIf(ConditionBuilder.column("c4").isEqualToFloat(0.0F)) + .and(ConditionBuilder.column("c5").isEqualToDouble(0.0)) + .build(); + +Update update = + Update.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .condition(condition) // condition + .build(); + +// Execute the `Update` operation. +transaction.update(update); +``` + +`updateIf` 条件を使用するだけでなく、次のように `updateIfExists` 条件を指定することもできます。 + +```java +// Build a `updateIfExists` condition. +MutationCondition updateIfExistsCondition = ConditionBuilder.updateIfExists(); +``` + +##### Mutate 操作 + +Mutate は、`Put`、`Insert`、`Upsert`、`Update`、`Delete` の複数の操作を実行する操作です。 + +まず Mutate オブジェクトを作成し、次に次のように `transaction.mutate()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create `Put` and `Delete` operations. +Key partitionKey = Key.ofInt("c1", 10); + +Key clusteringKeyForPut = Key.of("c2", "aaa", "c3", 100L); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKeyForPut) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +Key clusteringKeyForDelete = Key.of("c2", "bbb", "c3", 200L); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKeyForDelete) + .build(); + +// Execute the operations. +transaction.mutate(Arrays.asList(put, delete)); +``` + +##### CRUD 操作のデフォルト名前空間 + +すべての CRUD 操作のデフォルト名前空間は、ScalarDB 設定のプロパティを使用して設定できます。 + +```properties +scalar.db.default_namespace_name= +``` + +名前空間を指定しない操作では、設定されたデフォルトの名前空間が使用されます。 + +```java +// This operation will target the default namespace. +Scan scanUsingDefaultNamespace = + Scan.newBuilder() + .table("tbl") + .all() + .build(); +// This operation will target the "ns" namespace. +Scan scanUsingSpecifiedNamespace = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .all() + .build(); +``` + +#### トランザクションをコミットする + +CRUD 操作を実行した後、トランザクションをコミットして終了する必要があります。 + +トランザクションは次のようにコミットできます。 + +```java +// Commit a transaction. +transaction.commit(); +``` + +#### トランザクションをロールバックまたはアボートする + +トランザクションの実行中にエラーが発生した場合は、トランザクションをロールバックまたはアボートできます。 + +トランザクションは次のようにロールバックできます。 + +```java +// Roll back a transaction. +transaction.rollback(); +``` + +または、次のようにトランザクションをアボートすることもできます。 + +```java +// Abort a transaction. +transaction.abort(); +``` + +ScalarDB で例外を処理する方法の詳細については、[例外の処理方法](#例外の処理方法)を参照してください。 + +### トランザクションを開始せずにトランザクションを実行する + +トランザクションを開始せずにトランザクション操作を実行できます。この場合、ScalarDB は操作を実行する前に自動的にトランザクションを開始し、操作の実行後にトランザクションをコミットします。このセクションでは、トランザクションを開始せずにトランザクションを実行する方法について説明します。 + +#### `Get` 操作を実行する + +`Get` は、プライマリーキーで指定された単一のレコードを取得する操作です。 + +最初に `Get` オブジェクトを作成し、次に次のように `transactionManager.get()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Get` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .projections("c1", "c2", "c3", "c4") + .build(); + +// Execute the `Get` operation. +Optional result = transactionManager.get(get); +``` + +`Get` 操作の詳細については、[`Get` 操作](#get-操作)を参照してください。 + +#### `Scan` 操作の実行 + +`Scan` は、パーティション内の複数のレコードを取得する操作です。`Scan` 操作では、クラスタリングキーの境界とクラスタリングキー列の順序を指定できます。 + +まず `Scan` オブジェクトを作成し、次に次のように `transactionManager.scan()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Scan` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key startClusteringKey = Key.of("c2", "aaa", "c3", 100L); +Key endClusteringKey = Key.of("c2", "aaa", "c3", 300L); + +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .start(startClusteringKey, true) // Include startClusteringKey + .end(endClusteringKey, false) // Exclude endClusteringKey + .projections("c1", "c2", "c3", "c4") + .orderings(Scan.Ordering.desc("c2"), Scan.Ordering.asc("c3")) + .limit(10) + .build(); + +// Execute the `Scan` operation. +List results = transactionManager.scan(scan); +``` + +`Scan` 操作の詳細については、[`Scan` 操作](#scan-操作)を参照してください。 + +#### `Put` 操作を実行します + +:::note + +`Put` 操作は ScalarDB 3.13 以降では非推奨となり、将来のリリースでは削除される予定です。`Put` 操作の代わりに、`Insert` 操作、`Upsert` 操作、または `Update` 操作を使用してください。 + +::: + +まず `Put` オブジェクトを作成し、次に次のように `transactionManager.put()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Put` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Put` operation. +transactionManager.put(put); +``` + +`Put` 操作の詳細については、[`Put` 操作](#put-操作)を参照してください。 + +#### `Insert` 操作の実行 + +`Insert` は、トランザクションを通じて基礎となるストレージにエントリを挿入する操作です。エントリがすでに存在する場合は、競合エラーが発生します。 + +まず `Insert` オブジェクトを作成し、次に次のように `transactionManager.insert()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create an `Insert` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Insert insert = + Insert.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Insert` operation. +transactionManager.insert(insert); +``` + +`Insert` 操作の詳細については、[`Insert` 操作](#insert-操作)を参照してください。 + +#### `Upsert` 操作を実行する + +`Upsert` は、トランザクションを通じて基礎となるストレージにエントリを挿入するか、エントリを更新する操作です。エントリがすでに存在する場合は更新され、そうでない場合はエントリが挿入されます。 + +まず `Upsert` オブジェクトを作成し、次に次のように `transactionManager.upsert()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create an `Upsert` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Upsert upsert = + Upsert.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Upsert` operation. +transactionManager.upsert(upsert); +``` + +`Insert` 操作の詳細については、[`Upsert` 操作](#upsert-操作)を参照してください。 + +#### `Update` 操作の実行 + +`Update` は、トランザクションを通じて基礎となるストレージ内のエントリを更新する操作です。エントリが存在しない場合、操作によって変更は行われません。 + +まず `Update` オブジェクトを作成し、次に次のように `transactionManager.update()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create an `Update` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Update update = + Update.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Update` operation. +transactionManager.update(update); +``` + +`Update` 操作の詳細については、[`Update` 操作](#update-操作)を参照してください。 + +#### `Delete` 操作を実行する + +`Delete` は、プライマリーキーで指定されたレコードを削除する操作です。 + +まず `Delete` オブジェクトを作成し、次に次のように `transaction.delete()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Delete` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .build(); + +// Execute the `Delete` operation. +transactionManager.delete(delete); +``` + +`Delete` 操作の詳細については、[`Delete` 操作](#delete-操作)を参照してください。 + +#### Mutate 操作の実行 + +Mutate は、複数のミューテーション (`Put`、`Insert`、`Upsert`、`Update`、および `Delete` 操作) を実行する操作です。 + +まずミューテーションオブジェクトを作成し、次に次のように `transactionManager.mutate()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create `Put` and `Delete` operations. +Key partitionKey = Key.ofInt("c1", 10); + +Key clusteringKeyForPut = Key.of("c2", "aaa", "c3", 100L); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKeyForPut) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +Key clusteringKeyForDelete = Key.of("c2", "bbb", "c3", 200L); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKeyForDelete) + .build(); + +// Execute the operations. +transactionManager.mutate(Arrays.asList(put, delete)); +``` + +Mutate 操作の詳細については、[Mutate 操作](#mutate-操作)を参照してください。 + +また、ScalarDB での例外の処理方法の詳細については、[例外の処理方法](#例外の処理方法)を参照してください。 + +## 例外の処理方法 + +トランザクションを実行するときは、例外も適切に処理する必要があります。 + +:::warning + +例外を適切に処理しないと、異常やデータの不整合が発生する可能性があります。 + +::: + +次のサンプルコードは、例外を処理する方法を示しています。 + +```java +public class Sample { + public static void main(String[] args) throws Exception { + TransactionFactory factory = TransactionFactory.create(""); + DistributedTransactionManager transactionManager = factory.getTransactionManager(); + + int retryCount = 0; + TransactionException lastException = null; + + while (true) { + if (retryCount++ > 0) { + // Retry the transaction three times maximum. + if (retryCount >= 3) { + // Throw the last exception if the number of retries exceeds the maximum. + throw lastException; + } + + // Sleep 100 milliseconds before retrying the transaction. + TimeUnit.MILLISECONDS.sleep(100); + } + + DistributedTransaction transaction = null; + try { + // Begin a transaction. + transaction = transactionManager.begin(); + + // Execute CRUD operations in the transaction. + Optional result = transaction.get(...); + List results = transaction.scan(...); + transaction.put(...); + transaction.delete(...); + + // Commit the transaction. + transaction.commit(); + } catch (UnsatisfiedConditionException e) { + // You need to handle `UnsatisfiedConditionException` only if a mutation operation specifies a condition. + // This exception indicates the condition for the mutation operation is not met. + + try { + transaction.rollback(); + } catch (RollbackException ex) { + // Rolling back the transaction failed. Since the transaction should eventually recover, + // you don't need to do anything further. You can simply log the occurrence here. + } + + // You can handle the exception here, according to your application requirements. + + return; + } catch (UnknownTransactionStatusException e) { + // If you catch `UnknownTransactionStatusException` when committing the transaction, + // it indicates that the status of the transaction, whether it was successful or not, is unknown. + // In such a case, you need to check if the transaction is committed successfully or not and + // retry the transaction if it failed. How to identify a transaction status is delegated to users. + return; + } catch (TransactionException e) { + // For other exceptions, you can try retrying the transaction. + + // For `CrudConflictException`, `CommitConflictException`, and `TransactionNotFoundException`, + // you can basically retry the transaction. However, for the other exceptions, the transaction + // will still fail if the cause of the exception is non-transient. In such a case, you will + // exhaust the number of retries and throw the last exception. + + if (transaction != null) { + try { + transaction.rollback(); + } catch (RollbackException ex) { + // Rolling back the transaction failed. The transaction should eventually recover, + // so you don't need to do anything further. You can simply log the occurrence here. + } + } + + lastException = e; + } + } + } +} +``` + +### `TransactionException` および `TransactionNotFoundException` + +`begin()` API は `TransactionException` または `TransactionNotFoundException` をスローする可能性があります: + +- `TransactionException` をキャッチした場合、この例外は、一時的または非一時的障害が原因でトランザクションを開始できなかったことを示します。トランザクションを再試行することはできますが、非一時的障害が原因でトランザクションを開始できない可能性があります。 +- `TransactionNotFoundException` をキャッチした場合、この例外は、一時的障害が原因でトランザクションを開始できなかったことを示します。この場合、トランザクションを再試行できます。 + +`join()` API も `TransactionNotFoundException` をスローする可能性があります。この例外は、`begin()` API の例外を処理するのと同じ方法で処理できます。 + +### `CrudException` および `CrudConflictException` + +CRUD 操作の API (`get()`、`scan()`、`put()`、`delete()`、および `mutate()`) は、`CrudException` または `CrudConflictException` をスローする可能性があります: + +- `CrudException` をキャッチした場合、この例外は、一時的または非一時的障害が原因でトランザクション CRUD 操作が失敗したことを示します。トランザクションを最初から再試行できますが、原因が非一時的である場合は、トランザクションが失敗する可能性があります。 +- `CrudConflictException` をキャッチした場合、この例外は、一時的な障害 (競合エラーなど) が原因でトランザクション CRUD 操作が失敗したことを示します。この場合、トランザクションを最初から再試行できます。 + +### `UnsatisfiedConditionException` + +ミューテーション操作の API (`put()`、`delete()`、および `mutate()`) も `UnsatisfiedConditionException` をスローする可能性があります。 + +`UnsatisfiedConditionException` をキャッチした場合、この例外はミューテーション操作の条件が満たされていないことを示します。この例外は、アプリケーションの要件に従って処理できます。 + +### `CommitException`、`CommitConflictException`、および `UnknownTransactionStatusException` + +`commit()` API は `CommitException`、`CommitConflictException`、または `UnknownTransactionStatusException` をスローする可能性があります。 + +- `CommitException` をキャッチした場合、この例外は、一時的または非一時的障害が原因でトランザクションのコミットが失敗したことを示します。トランザクションを最初から再試行できますが、原因が非一時的である場合はトランザクションが失敗する可能性があります。 +- `CommitConflictException` をキャッチした場合、この例外は、一時的な障害 (競合エラーなど) が原因でトランザクションのコミットが失敗したことを示します。この場合、トランザクションを最初から再試行できます。 +- `UnknownTransactionStatusException` をキャッチした場合、この例外は、トランザクションのステータス (成功したかどうか) が不明であることを示します。この場合、トランザクションが正常にコミットされたかどうかを確認し、失敗した場合はトランザクションを再試行する必要があります。 + +トランザクションステータスを識別する方法は、ユーザーに委任されています。トランザクションステータステーブルを作成し、他のアプリケーションデータを使用してトランザクション的に更新して、ステータステーブルからトランザクションのステータスを取得できるようにすることができます。 + +### 一部の例外に関する注意 + +サンプルコードには示されていませんが、`resume()` API は `TransactionNotFoundException` をスローする可能性もあります。この例外は、指定された ID に関連付けられたトランザクションが見つからなかったか、トランザクションの有効期限が切れた可能性があることを示します。いずれの場合も、この例外の原因は基本的に一時的なものであるため、トランザクションを最初から再試行できます。 + +サンプルコードでは、`UnknownTransactionStatusException` の場合、重複操作の可能性を回避するためにアプリケーションがトランザクションが成功したかどうかを確認する必要があるため、トランザクションは再試行されません。その他の例外の場合、例外の原因が一時的または非一時的であるため、トランザクションは再試行されます。例外の原因が一時的な場合、再試行するとトランザクションが成功する可能性があります。ただし、例外の原因が非一時的である場合、再試行してもトランザクションは失敗します。このような場合、再試行回数を使い果たします。 + +:::note + +サンプルコードでは、トランザクションは最大 3 回再試行され、再試行される前に 100 ミリ秒間スリープします。ただし、アプリケーションの要件に応じて、指数バックオフなどの再試行ポリシーを選択できます。 + +::: + +## Coordinator テーブルのグループコミット + +Consensus Commit トランザクションに使用される Coordinator テーブルは重要なデータストアであり、堅牢なストレージを使用することをお勧めします。ただし、内部でマルチ AZ またはマルチリージョンレプリケーションを活用するなど、より堅牢なストレージオプションを使用すると、ストレージにレコードを書き込むときにレイテンシが増加し、スループットパフォーマンスが低下する可能性があります。 + +ScalarDB は、Coordinator テーブルにグループコミット機能を提供します。この機能は、複数のレコードの書き込みを 1 つの書き込み操作にグループ化し、書き込みスループットを向上させます。この場合、基盤となるデータベースとワークロードに応じて、レイテンシが増加または減少する可能性があります。 + +グループコミット機能を有効にするには、次の設定を追加します。 + +```properties +# By default, this configuration is set to `false`. +scalar.db.consensus_commit.coordinator.group_commit.enabled=true + +# These properties are for tuning the performance of the group commit feature. +# scalar.db.consensus_commit.coordinator.group_commit.group_size_fix_timeout_millis=40 +# scalar.db.consensus_commit.coordinator.group_commit.delayed_slot_move_timeout_millis=800 +# scalar.db.consensus_commit.coordinator.group_commit.old_group_abort_timeout_millis=30000 +# scalar.db.consensus_commit.coordinator.group_commit.timeout_check_interval_millis=10 +# scalar.db.consensus_commit.coordinator.group_commit.metrics_monitor_log_enabled=true +``` + +### 制限事項 + +このセクションでは、グループコミット機能の制限事項について説明します。 + +#### ユーザーが渡したカスタムトランザクション ID + +グループコミット機能は、内部値を暗黙的に生成し、それをトランザクション ID の一部として使用します。したがって、ユーザーが `com.scalar.db.transaction.consensuscommit.ConsensusCommitManager.begin(String txId)` または `com.scalar.db.transaction.consensuscommit.TwoPhaseConsensusCommitManager.begin(String txId)` を介して手動で渡したカスタムトランザクション ID は、その後の API 呼び出しでそのまま使用することはできません。代わりに、`com.scalar.db.transaction.consensuscommit.ConsensusCommit.getId()` または `com.scalar.db.transaction.consensuscommit.TwoPhaseConsensusCommit.getId()` から返されたトランザクション ID を使用する必要があります。 + +```java + // This custom transaction ID needs to be used for ScalarDB transactions. + String myTxId = UUID.randomUUID().toString(); + + ... + + DistributedTransaction transaction = manager.begin(myTxId); + + ... + + // When the group commit feature is enabled, a custom transaction ID passed by users can't be used as is. + // logger.info("The transaction state: {}", manager.getState(myTxId)); + logger.info("The transaction state: {}", manager.getState(transaction.getId())); +``` + +#### 2 フェーズコミットインターフェースでの使用の禁止 + +グループコミット機能は、進行中のすべてのトランザクションをメモリ内で管理します。この機能が 2 フェーズコミットインターフェースで有効になっている場合、Coordinator テーブルへの参加者サービスの一貫性のない書き込みによって生じる競合 (グループ間で異なるトランザクション分散が含まれる場合があります) を防ぐために、情報は Coordinator サービスによってのみ維持される必要があります。 + +この制限により、アプリケーション開発に関連する複雑さと柔軟性が損なわれます。したがって、グループコミット機能と 2 フェーズコミットインターフェースを組み合わせて使用​​することは現在禁止されています。 + +## Consensus Commit トランザクションマネージャーエラーの調査 + +Consensus Commit トランザクションマネージャーの使用時にエラーを調査するには、トランザクションメタデータ列が追加されたテーブルメタデータを返す設定を有効にできます。これは、トランザクション関連の問題を調査するときに役立ちます。この設定は、Consensus Commit トランザクションマネージャーのトラブルシューティング時にのみ使用可能で、`DistributedTransactionAdmin.getTableMetadata()` メソッドを使用して、特定のテーブルのトランザクションメタデータ列の詳細を表示できます。 + +次の設定を追加すると、`Get` および `Scan` 操作の結果に [トランザクションメタデータ](schema-loader.mdx#consensus-commit-の内部メタデータ)が含まれます。 + +```properties +# By default, this configuration is set to `false`. +scalar.db.consensus_commit.include_metadata.enabled=true +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/backup-restore.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/backup-restore.mdx new file mode 100644 index 00000000..f97ba2f6 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/backup-restore.mdx @@ -0,0 +1,180 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB で使用されるデータベースのバックアップと復元方法 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB は非トランザクションデータベースまたはトランザクションデータベース上で非侵入的にトランザクション機能を提供するため、トランザクション的に一貫性のある方法でデータベースをバックアップおよび復元するには特別な注意が必要です。 + +このガイドでは、ScalarDB がサポートするデータベースをバックアップおよび復元する方法について説明します。 + +## バックアップを作成する + +バックアップの作成方法は、使用しているデータベースと、複数のデータベースを使用しているかどうかによって異なります。次の決定ツリーは、どのアプローチを取るべきかを示しています。 + +```mermaid +flowchart TD + A[ScalarDB で単一のデータベースを使用していますか?] + A -->|はい| B[データベースはトランザクションをサポートしていますか?] + B -->|はい| C[明示的に一時停止せずにバックアップを実行します] + B ---->|いいえ| D[明示的な一時停止を伴うバックアップを実行します] + A ---->|いいえ| D +``` + +### 明示的に一時停止せずにバックアップする + +トランザクションをサポートする単一のデータベースで ScalarDB を使用している場合は、ScalarDB がトランザクションを受け入れ続けている間でも、データベースのバックアップを作成できます。 + +:::warning + +バックアップを作成する前に、データベースのトランザクション的に一貫性のあるバックアップを作成する最も安全な方法を検討し、バックアッププロセスに関連するリスクを理解する必要があります。 + +::: + +ScalarDB でバックアップを作成するための要件の 1 つは、ScalarDB が管理するすべてのテーブル (Coordinator テーブルを含む) のバックアップがトランザクション的に一貫しているか、トランザクション的に一貫した状態に自動的に回復可能である必要があることです。つまり、すべてのテーブルを 1 回のトランザクションでダンプして、一貫性のあるバックアップを作成する必要があります。 + +トランザクション的に一貫性のあるバックアップを作成する方法は、使用しているデータベースの種類によって異なります。データベースを選択して、ScalarDB のトランザクション的に一貫性のあるバックアップを作成する方法を確認してください。 + +:::note + +以下にリストされているデータベース別のバックアップ方法は、ScalarDB がサポートするデータベースの一部の例にすぎません。 + +::: + + + + 自動バックアップ機能を使用すると、バックアップ保持期間内の任意の時点に復元できます。 + + + `--single-transaction` オプションを指定した `mysqldump` コマンドを使用します。 + + + `pg_dump` コマンドを使用します。 + + + [Special commands to sqlite3 (dot-commands)](https://www.sqlite.org/cli.html#special_commands_to_sqlite3_dot_commands_) で指定されているように、`.backup` コマンドを `.timeout` コマンドとともに使用します。 + + 例については、[BASH: SQLite3 .backup command](https://stackoverflow.com/questions/23164445/bash-sqlite3-backup-command) を参照してください。 + + + クラスターはバックアップポリシーに基づいて自動的にバックアップされ、これらのバックアップは特定の期間保持されます。オンデマンドバックアップを実行することもできます。バックアップの実行の詳細については、[YugabyteDB Managed: Back up and restore clusters](https://docs.yugabyte.com/preview/yugabyte-cloud/cloud-clusters/backup-clusters/)を参照してください。 + + + +### 明示的に一時停止してバックアップする + +トランザクション的に一貫性のあるバックアップを作成する別の方法は、ScalarDB インスタンスのクラスターに未処理のトランザクションがないときにバックアップを作成することです。バックアップの作成は、次の条件によって異なります。 + +- 基盤となるデータベースにポイントインタイムスナップショットまたはバックアップ機能がある場合は、未処理のトランザクションが存在しない期間にバックアップを作成できます。 +- 基盤となるデータベースにポイントインタイムリストアまたはリカバリ (PITR) 機能がある場合は、一時停止期間内の未処理のトランザクションが存在しない時間 (できれば中間時間) にリストアポイントを設定できます。 + +:::note + +PITR 機能を使用する場合は、NTP などのクロック同期を使用して、クライアントとサーバー間のクロックのずれを最小限に抑える必要があります。そうしないと、一時停止期間として取得される時間が、一時停止が実際に行われた時間と大きく異なる可能性があり、バックアップが進行中のトランザクションが存在する時点に復元される可能性があります。 + +また、クロック同期ではノード間のクロックを完全に同期できないため、十分な時間 (たとえば、5 秒) 一時停止し、一時停止期間の中間時間を復元ポイントとして使用する必要があります。 + +::: + +ScalarDB が未処理のリクエストを排出し、新しいリクエストの受け入れを停止して一時停止期間を作成できるようにするには、ScalarDB を使用するアプリケーションで [Scalar Admin](https://github.com/scalar-labs/scalar-admin) インターフェースを適切に実装するか、Scalar Admin インターフェースを実装する [ScalarDB Cluster](scalardb-cluster/index.mdx) を使用する必要があります。 + +[Scalar Admin クライアントツール](https://github.com/scalar-labs/scalar-admin/tree/main/java#scalar-admin-client-tool)を使用すると、進行中のトランザクションを失うことなく、Scalar Admin インターフェースを実装するノード、サーバー、またはアプリケーションを一時停止できます。 + +トランザクション的に一貫性のあるバックアップを作成する方法は、使用しているデータベースの種類によって異なります。データベースを選択して、ScalarDB のトランザクション的に一貫性のあるバックアップを作成する方法を確認します。 + +:::note + +以下にリストされているデータベース別のバックアップ方法は、ScalarDB がサポートするデータベースの一部の例にすぎません。 + +::: + + + + DynamoDB テーブルに対して PITR 機能を有効にする必要があります。[ScalarDB Schema Loader](schema-loader.mdx) を使用してスキーマを作成する場合、ツールはデフォルトでテーブルの PITR 機能を有効にします。 + + トランザクション的に一貫性のある復元ポイントを指定するには、[明示的な一時停止によるバックアップ](#明示的に一時停止してバックアップする)の説明に従って、ScalarDB を DynamoDB とともに使用しているアプリケーションを一時停止します。 + + + PITR 機能が有効になっている継続的バックアップポリシーを使用して、Cosmos DB for NoSQL アカウントを作成する必要があります。この機能を有効にすると、バックアップが継続的に作成されます。 + + トランザクション的に一貫性のある復元ポイントを指定するには、[明示的に一時停止してバックアップする](#明示的に一時停止してバックアップする)の説明に従って、ScalarDB を Cosmos DB for NoSQL とともに使用しているアプリケーションを一時停止します。 + + + Cassandra にはレプリケーション機能が組み込まれているため、必ずしもトランザクション的に一貫性のあるバックアップを作成する必要はありません。たとえば、レプリケーション係数が `3` に設定されていて、Cassandra クラスター内のノードの 1 つのデータのみが失われた場合、通常のトランザクション的に一貫性のないバックアップ (スナップショット) と修復機能を使用してノードを回復できるため、トランザクション的に一貫性のあるバックアップ (スナップショット) は必要ありません。 + + ただし、クラスターノードのクォーラムでデータが失われた場合は、クラスターを特定のトランザクション的に一貫性のあるポイントに復元するために、トランザクション的に一貫性のあるバックアップ (スナップショット) が必要になります。 + + トランザクション的に一貫性のあるクラスター全体のバックアップ (スナップショット) を作成するには、ScalarDB または [ScalarDB Cluster](scalardb-cluster/index.mdx) を使用しているアプリケーションを一時停止し、[明示的な一時停止によるバックアップ](#明示的に一時停止してバックアップする)の説明に従ってノードのバックアップ (スナップショット) を作成するか、Cassandra クラスターを停止してノード内のすべてのデータのコピーを作成し、クラスターを起動します。 + + + 一時停止期間中にオンデマンドバックアップまたはスケジュールされたバックアップを実行できます。バックアップの実行の詳細については、[YugabyteDB Managed: Back up and restore clusters](https://docs.yugabyte.com/preview/yugabyte-cloud/cloud-clusters/backup-clusters/) を参照してください。 + + + +## バックアップを復元する + +トランザクション的に一貫性のあるバックアップを復元する方法は、使用しているデータベースの種類によって異なります。データベースを選択して、ScalarDB のトランザクション的に一貫性のあるバックアップを作成する方法を確認してください。 + +:::note + +以下にリストされているデータベース別の復元方法は、ScalarDB がサポートするデータベースの一部の例にすぎません。 + +::: + + + + 自動バックアップ機能を使用すると、バックアップ保持期間内の任意の時点に復元できます。 + + + まず、Cassandra クラスターのすべてのノードを停止します。次に、`data`、`commitlog`、`hints` ディレクトリをクリーンアップし、各ノードにバックアップ (スナップショット) を配置します。 + + 各ノードにバックアップ (スナップショット) を配置したら、Cassandra クラスターのすべてのノードを起動します。 + + + [Azure portal を使用してアカウントを復元する](https://docs.microsoft.com/ja-jp/azure/cosmos-db/restore-account-continuous-backup#restore-account-portal)については、Azure の公式ドキュメントに従ってください。バックアップを復元した後、復元されたデータベースの [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)を `STRONG` に設定します。さらに、前述のように、一時停止期間の中間時点を復元ポイントとして使用する必要があります。 + + ScalarDB は、ScalarDB Schema Loader を使用してスキーマを作成するときにインストールされるストアドプロシージャを使用して、Cosmos DB アダプターを実装します。ただし、Cosmos DB の PITR 機能では、ストアドプロシージャは復元されません。このため、復元後にすべてのテーブルに必要なストアドプロシージャを再インストールする必要があります。これは、ScalarDB Schema Loader を `--repair-all` オプションとともに使用することで実行できます。詳細については、[名前空間とテーブルを修復する](schema-loader.mdx#名前空間とテーブルを修復する)を参照してください。 + + + [DynamoDB テーブルを特定の時点に復元](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/PointInTimeRecovery.Tutorial.html)については、公式の AWS ドキュメントに従ってください。ただし、テーブルはエイリアスを使用してのみ復元できることに注意してください。このため、エイリアスを使用してテーブルを復元し、元のテーブルを削除して、エイリアスを元の名前に変更し、同じ名前のテーブルを復元する必要があります。 + + この手順を実行するには、次の手順を実行します。 + + 1. バックアップを作成します。 + 1. 一時停止期間の中間時点を復元ポイントとして選択します。 + 2. テーブル A の PITR を使用してテーブル B に復元します。 + 3. 復元されたテーブル B のバックアップを作成します (バックアップの名前がバックアップ B であると仮定します)。 + 4. テーブル B を削除します。 + 2. バックアップを復元します。 + 1. テーブル A を削除します。 + 2. バックアップ B を使用して A という名前のテーブルを作成します。 + +:::note + +* テーブルは一度に 1 つしか復元できないため、上記の手順はテーブルごとに実行する必要があります。 +* 復元されたテーブルでは、PITR や自動スケーリングポリシーなどの設定がデフォルト値にリセットされるため、必要な設定を手動で行う必要があります。詳細については、公式 AWS ドキュメントの [DynamoDB を使用した DynamoDB テーブルのバックアップと復元の仕組み](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/CreateBackup.html#CreateBackup_HowItWorks-restore)を参照してください。 + +::: + + + `mysqldump` を使用してバックアップファイルを作成した場合は、[Reloading SQL-Format Backups](https://dev.mysql.com/doc/mysql-backup-excerpt/8.0/en/reloading-sql-format-dumps.html) で指定されているように、`mysql` コマンドを使用してバックアップを復元します。 + + + `pg_dump` を使用してバックアップファイルを作成した場合は、[Restoring the Dump](https://www.postgresql.org/docs/current/backup-dump.html#BACKUP-DUMP-RESTORE) で指定されているように、`psql` コマンドを使用してバックアップを復元します。 + + + [Special commands to sqlite3 (dot-commands)](https://www.sqlite.org/cli.html#special_commands_to_sqlite3_dot_commands_) で指定されているように、`.restore` コマンドを使用します。 + + + バックアップ保持期間内であれば、スケジュールされたバックアップまたはオンデマンドバックアップから復元できます。バックアップの実行の詳細については、[YugabyteDB Managed: Back up and restore clusters](https://docs.yugabyte.com/preview/yugabyte-cloud/cloud-clusters/backup-clusters/) を参照してください。 + + diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/configurations.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/configurations.mdx new file mode 100644 index 00000000..e9b77de6 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/configurations.mdx @@ -0,0 +1,293 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB の設定 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、ScalarDB で使用可能な設定について説明します。 + +## ScalarDB クライアントの設定 + +このセクションでは、ScalarDB クライアントの設定について説明します。ScalarDB は、Consensus Commit を使用してトランザクションを実行する方法、非トランザクションストレージ操作を実行する方法、および ScalarDB Cluster を介してトランザクションを実行する方法を提供します。 + +### Consensus Commit を使用してトランザクションを実行する + +ScalarDB は、Consensus Commit と呼ばれる独自のトランザクションプロトコルを提供します。これは、ScalarDB のデフォルトのトランザクションマネージャータイプです。Consensus Commit トランザクションマネージャーを使用するには、ScalarDB プロパティファイルに次の内容を追加します。 + +```properties +scalar.db.transaction_manager=consensus-commit +``` + +:::note + +`scalar.db.transaction_manager` プロパティを指定しない場合は、`consensus-commit` がデフォルト値になります。 + +::: + +#### 基本設定 + +Consensus Commit トランザクションマネージャーでは、次の基本設定が利用可能です。 + +| 名前 | 説明 | デフォルト | +|-------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `scalar.db.transaction_manager` | `consensus-commit` を指定する必要があります。 | - | +| `scalar.db.consensus_commit.isolation_level` | Consensus Commit に使用される分離レベル。`SNAPSHOT` または `SERIALIZABLE` のいずれかを指定できます。 | `SNAPSHOT` | +| `scalar.db.consensus_commit.serializable_strategy` | Consensus Commit に使用されるシリアル化可能な戦略。`EXTRA_READ` または `EXTRA_WRITE` のいずれかを指定できます。`scalar.db.consensus_commit.isolation_level` プロパティで `SNAPSHOT` が指定されている場合、この設定は無視されます。 | `EXTRA_READ` | +| `scalar.db.consensus_commit.coordinator.namespace` | Coordinator テーブルの名前空間名。 | `coordinator` | +| `scalar.db.consensus_commit.include_metadata.enabled` | `true` に設定すると、`Get` および `Scan` 操作の結果にトランザクションメタデータが含まれます。特定のテーブルのトランザクションメタデータ列の詳細を表示するには、`DistributedTransactionAdmin.getTableMetadata()` メソッドを使用します。このメソッドは、トランザクションメタデータ列が追加されたテーブルメタデータを返します。この設定を使用すると、トランザクション関連の問題を調査するのに役立ちます。 | `false` | + +#### パフォーマンス関連の設定 + +Consensus Commit トランザクションマネージャーでは、次のパフォーマンス関連の設定が利用できます。 + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------| +| `scalar.db.consensus_commit.parallel_executor_count` | 並列実行のためのエグゼキュータ(スレッド)の数。 | `128` | +| `scalar.db.consensus_commit.parallel_preparation.enabled` | 準備フェーズが並行して実行されるかどうか。 | `true` | +| `scalar.db.consensus_commit.parallel_validation.enabled` | 検証フェーズ (`EXTRA_READ` 内) が並列で実行されるかどうか。 | `scalar.db.consensus_commit.parallel_commit.enabled` の値 | +| `scalar.db.consensus_commit.parallel_commit.enabled` | コミットフェーズが並列で実行されるかどうか。 | `true` | +| `scalar.db.consensus_commit.parallel_rollback.enabled` | ロールバックフェーズが並列で実行されるかどうか。 | `scalar.db.consensus_commit.parallel_commit.enabled` の値 | +| `scalar.db.consensus_commit.async_commit.enabled` | コミットフェーズが非同期で実行されるかどうか。 | `false` | +| `scalar.db.consensus_commit.async_rollback.enabled` | ロールバックフェーズが非同期に実行されるかどうか。 | `scalar.db.consensus_commit.async_commit.enabled` の値 | +| `scalar.db.consensus_commit.parallel_implicit_pre_read.enabled` | 暗黙的な事前読み取りが並列で実行されるかどうか。 | `true` | +| `scalar.db.consensus_commit.coordinator.group_commit.enabled` | トランザクション状態のコミットがバッチモードで実行されるかどうか。この機能は、2 フェーズコミットインターフェイスでは使用できません。 | `false` | +| `scalar.db.consensus_commit.coordinator.group_commit.slot_capacity` | グループコミット機能のグループ内のスロットの最大数。値が大きいとグループコミットの効率は向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1] | `20` | +| `scalar.db.consensus_commit.coordinator.group_commit.group_size_fix_timeout_millis` | グループ内のスロットのサイズを固定するためのタイムアウト。値が大きいとグループコミットの効率が向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1] | `40` | +| `scalar.db.consensus_commit.coordinator.group_commit.delayed_slot_move_timeout_millis` | 遅延スロットをグループから別の分離グループに移動して、元のグループが遅延トランザクションの影響を受けないようにするためのタイムアウト。値が大きいとグループコミットの効率が向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1] | `1200` | +| `scalar.db.consensus_commit.coordinator.group_commit.old_group_abort_timeout_millis` | 進行中の古いグループをアボートするためのタイムアウト。値が小さいと、積極的なアボートによってリソースの消費量が減りますが、長時間実行されるトランザクションで不要なアボートが発生する可能性も高くなります。 | `60000` | +| `scalar.db.consensus_commit.coordinator.group_commit.timeout_check_interval_millis` | グループコミット関連のタイムアウトをチェックする間隔。 | `20` | +| `scalar.db.consensus_commit.coordinator.group_commit.metrics_monitor_log_enabled` | グループコミットのメトリックが定期的にログに記録されるかどうか。 | `false` | + +#### 基盤となるストレージまたはデータベースの設定 + +Consensus Commit にはストレージ抽象化レイヤーがあり、複数の基盤となるストレージをサポートしています。`scalar.db.storage` プロパティを使用してストレージ実装を指定できます。 + +データベースを選択して、各ストレージで使用可能な設定を確認します。 + + + + JDBC データベースでは次の設定を使用できます。 + + | 名前 | 説明 | デフォルト | + |-----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|------------------| + | `scalar.db.storage` | `jdbc` を指定する必要があります。 | - | + | `scalar.db.contact_points` | JDBC 接続 URL。 | | + | `scalar.db.username` | データベースにアクセスするためのユーザー名。 | | + | `scalar.db.password` | データベースにアクセスするためのパスワード。 | | + | `scalar.db.jdbc.connection_pool.min_idle` | 接続プール内のアイドル接続の最小数。 | `20` | + | `scalar.db.jdbc.connection_pool.max_idle` | 接続プール内でアイドル状態のままにできる接続の最大数。 | `50` | + | `scalar.db.jdbc.connection_pool.max_total` | 接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。 | `100` | + | `scalar.db.jdbc.prepared_statements_pool.enabled` | このプロパティを `true` に設定すると、準備済みステートメントプーリングが有効になります。 | `false` | + | `scalar.db.jdbc.prepared_statements_pool.max_open` | ステートメントプールから同時に割り当てることができるオープンステートメントの最大数。制限がない場合は負の値を使用します。 | `-1` | + | `scalar.db.jdbc.isolation_level` | JDBC の分離レベル。`READ_UNCOMMITTED`、`READ_COMMITTED`、`REPEATABLE_READ`、または `SERIALIZABLE` を指定できます。 | 基盤データベース固有 | + | `scalar.db.jdbc.table_metadata.connection_pool.min_idle` | テーブルメタデータの接続プール内のアイドル接続の最小数。 | `5` | + | `scalar.db.jdbc.table_metadata.connection_pool.max_idle` | テーブルメタデータの接続プール内でアイドル状態のままにできる接続の最大数。 | `10` | + | `scalar.db.jdbc.table_metadata.connection_pool.max_total` | テーブルメタデータの接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。 | `25` | + | `scalar.db.jdbc.admin.connection_pool.min_idle` | 管理者の接続プール内のアイドル接続の最小数。 | `5` | + | `scalar.db.jdbc.admin.connection_pool.max_idle` | 管理者の接続プール内でアイドル状態のままにできる接続の最大数。 | `10` | + | `scalar.db.jdbc.admin.connection_pool.max_total` | 管理者の接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。 | `25` | + +:::note + +#### SQLite3 + +SQLite3 を JDBC データベースとして使用している場合は、`scalar.db.contact_points` を次のように設定する必要があります。 + +```properties +scalar.db.contact_points=jdbc:sqlite:?busy_timeout=10000 +``` + +他の JDBC データベースとは異なり、[SQLite3 doesn't fully support concurrent access](https://www.sqlite.org/lang_transaction.html)。[`SQLITE_BUSY`](https://www.sqlite.org/rescode.html#busy) によって内部的に頻繁に発生するエラーを回避するには、[`busy_timeout`](https://www.sqlite.org/c3ref/busy_timeout.html) パラメータを設定することをお勧めします。 + +#### YugabyteDB + +YugabyteDB を JDBC データベースとして使用している場合は、次のように `scalar.db.contact_points` で複数のエンドポイントを指定できます。 + +```properties +scalar.db.contact_points=jdbc:yugabytedb://127.0.0.1:5433\\,127.0.0.2:5433\\,127.0.0.3:5433/?load-balance=true +``` + +複数のエンドポイントはエスケープされたコンマで区切る必要があります。 + +YugabyteDB のスマートドライバーと負荷分散の詳細については、[YugabyteDB smart drivers for YSQL](https://docs.yugabyte.com/preview/drivers-orms/smart-drivers/) を参照してください。 + +::: + + + + DynamoDB では次の設定が利用可能です。 + + | 名前 | 説明 | デフォルト | + |--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------| + | `scalar.db.storage` | `dynamo` を指定する必要があります。 | - | + | `scalar.db.contact_points` | ScalarDB が通信する AWS リージョン (例: `us-east-1`)。 | | + | `scalar.db.username` | AWS とやり取りするユーザーを識別するために使用される AWS アクセスキー。 | | + | `scalar.db.password` | AWS と対話するユーザーを認証するために使用される AWS シークレットアクセスキー。 | | + | `scalar.db.dynamo.endpoint_override` | ScalarDB が通信する Amazon DynamoDB エンドポイント。これは主に、AWS サービスではなくローカルインスタンスでのテストに使用されます。 | | + | `scalar.db.dynamo.namespace.prefix` | ユーザー名前空間とメタデータ名前空間名のプレフィックス。AWS では単一の AWS リージョン内で一意のテーブル名を持つ必要があるため、単一の AWS リージョン内で複数の ScalarDB 環境 (開発、本番など) を使用する場合に便利です。 | | + + + Cosmos DB for NoSQL では次の設定が利用可能です。 + + | 名前 | 説明 | デフォルト | + |--------------------------------------|------------------------------------------------------------------------------------------------------------|-----------| + | `scalar.db.storage` | `cosmos` を指定する必要があります。 | - | + | `scalar.db.contact_points` | ScalarDB が通信する NoSQL エンドポイント用の Azure Cosmos DB。 | | + | `scalar.db.password` | Azure Cosmos DB for NoSQL にアクセスするための認証を実行するために使用されるマスターキーまたは読み取り専用キーのいずれか。 | | + | `scalar.db.cosmos.consistency_level` | Cosmos DB 操作に使用される一貫性レベル。`STRONG` または `BOUNDED_STALENESS` を指定できます。 | `STRONG` | + + + Cassandra では次の設定が利用可能です。 + + | 名前 | 説明 | デフォルト | + |----------------------------|--------------------------------------|----------| + | `scalar.db.storage` | `cassandra` を指定する必要があります。 | - | + | `scalar.db.contact_points` | カンマで区切られた連絡先。 | | + | `scalar.db.contact_port` | すべての連絡先ポイントのポート番号。 | | + | `scalar.db.username` | データベースにアクセスするためのユーザー名。 | | + | `scalar.db.password` | データベースにアクセスするためのパスワード。 | | + + + +##### マルチストレージのサポート + +ScalarDB は、複数のストレージ実装の同時使用をサポートしています。`scalar.db.storage` プロパティの値として `multi-storage` を指定することで、複数のストレージを使用できます。 + +複数のストレージの使用の詳細については、[マルチストレージトランザクション](multi-storage-transactions.mdx)を参照してください。 + +##### クロスパーティションスキャン設定 + +以下で説明するようにクロスパーティションスキャンオプションを有効にすると、`Scan` 操作でパーティション全体のすべてのレコードを取得できます。さらに、`cross_partition_scan.filtering` と `cross_partition_scan.ordering` をそれぞれ有効にすることで、クロスパーティション `Scan` 操作で任意の条件と順序を指定できます。現在、順序付けオプション付きのクロスパーティションスキャンは、JDBC データベースでのみ使用できます。フィルタリングと順序付けを有効にするには、`scalar.db.cross_partition_scan.enabled` を `true` に設定する必要があります。 + +クロスパーティションスキャンの使用方法の詳細については、[`Scan` 操作](./api-guide.mdx#scan-操作)を参照してください。 + +:::warning + +非 JDBC データベースの場合、`SERIALIZABLE` 分離レベルでクロスパーティションスキャンを有効にした場合でも、トランザクションは読み取りコミットスナップショット分離 (`SNAPSHOT`) で実行される可能性があります。これは、より低い分離レベルです。非 JDBC データベースを使用する場合は、トランザクションの一貫性が重要でない場合にのみ、クロスパーティションスキャンを使用してください。 + +::: + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------|---------------------------------------------------|----------| +| `scalar.db.cross_partition_scan.enabled` | パーティション間スキャンを有効にします。 | `false` | +| `scalar.db.cross_partition_scan.filtering.enabled` | クロスパーティションスキャンでフィルタリングを有効にします。 | `false` | +| `scalar.db.cross_partition_scan.ordering.enabled` | パーティション間スキャンでの順序付けを有効にします。 | `false` | + +### 非トランザクションストレージ操作を実行する + +非トランザクションストレージ操作を実行するには、`scalar.db.transaction_manager` プロパティを `single-crud-operation` に設定する必要があります。 + +```properties +scalar.db.transaction_manager=single-crud-operation +``` + +また、[基盤となるストレージまたはデータベースの設定](#基盤となるストレージまたはデータベースの設定)の説明に従って、基盤となるストレージまたはデータベースを設定する必要があります。 + +### ScalarDB Cluster を介してトランザクションを実行する + +[ScalarDB Cluster](scalardb-cluster/index.mdx) は、ScalarDB に gRPC インターフェースを提供するコンポーネントです。 + +クライアント設定の詳細については、[ScalarDB Cluster クライアント設定](scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx#クライアント設定)を参照してください。 + +## その他の ScalarDB 設定 + +ScalarDB で使用できる追加の設定は次のとおりです。 + +| 名前 | 説明 | デフォルト | +|------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| `scalar.db.metadata.cache_expiration_time_secs` | ScalarDB には、データベースへのリクエスト数を減らすためのメタデータキャッシュがあります。この設定では、キャッシュの有効期限を秒単位で指定します。`-1`を指定した場合は、キャッシュは期限切れになりません。 | `60` | +| `scalar.db.active_transaction_management.expiration_time_millis` | ScalarDB は進行中のトランザクションを維持し、トランザクション ID を使用して再開できます。この設定は、このトランザクション管理機能の有効期限をミリ秒単位で指定します。 | `-1` (有効期限なし) | +| `scalar.db.default_namespace_name` | 指定された名前空間名は、名前空間を指定していない操作によって使用されます。 | | +| `scalar.db.system_namespace_name` | 指定された名前空間名は ScalarDB によって内部的に使用されます。 | `scalardb` | + +## プレースホルダーの使用 + +値にプレースホルダーを使用できます。プレースホルダーは環境変数 (`${env:}`) またはシステムプロパティ (`${sys:}`) に置き換えられます。また、`${sys::-}` のようにプレースホルダーにデフォルト値を指定することもできます。 + +以下は、プレースホルダーを使用する設定の例です。 + +```properties +scalar.db.username=${env::-admin} +scalar.db.password=${env:} +``` + +この設定例では、ScalarDB は環境変数からユーザー名とパスワードを読み取ります。環境変数 `SCALAR_DB_USERNAME` が存在しない場合、ScalarDB はデフォルト値 `admin` を使用します。 + +## 設定例 + +このセクションでは、いくつかの設定例を示します。 + +### 設定例 #1 - アプリとデータベース + +```mermaid +flowchart LR + app["アプリ
(ScalarDB ライブラリと
Consensus Commit)"] + db[(基盤となるストレージまたはデータベース)] + app --> db +``` + +この例の設定では、アプリ (Consensus Commit を備えた ScalarDB ライブラリ) が、基盤となるストレージまたはデータベース (この場合は Cassandra) に直接接続します。 + +:::warning + +この設定は開発目的のみに存在し、実稼働環境には適していません。これは、ScalarDB のトランザクション的に一貫性のあるバックアップを取得するために、アプリが [Scalar Admin](https://github.com/scalar-labs/scalar-admin) インターフェースを実装する必要があり、追加の設定が必要になるためです。 + +::: + +以下は、ScalarDB を介してアプリを基盤となるデータベースに接続するための設定の例です。 + +```properties +# Transaction manager implementation. +scalar.db.transaction_manager=consensus-commit + +# Storage implementation. +scalar.db.storage=cassandra + +# Comma-separated contact points. +scalar.db.contact_points= + +# Credential information to access the database. +scalar.db.username= +scalar.db.password= +``` + +### 設定例 #2 - アプリ、ScalarDB Cluster、データベース + +```mermaid +flowchart LR + app["アプリ -
ScalarDB ライブラリと gRPC"] + cluster["ScalarDB Cluster -
(ScalarDB ライブラリと
Consensus Commit)"] + db[(基盤となるストレージまたはデータベース)] + app --> cluster --> db +``` + +この例の設定では、アプリ (gRPC を使用した ScalarDB ライブラリ) は、ScalarDB Enterprise エディションでのみ使用可能なコンポーネントである ScalarDB Cluster を介して、基盤となるストレージまたはデータベース (この場合は Cassandra) に接続します。 + +:::note + +ScalarDB Cluster は [Scalar Admin](https://github.com/scalar-labs/scalar-admin) インターフェイスを実装しており、これにより ScalarDB Cluster を一時停止することで ScalarDB のトランザクション的に一貫性のあるバックアップを取得できるため、この設定は実稼働環境での使用に適しています。 + +::: + +以下は、ScalarDB Cluster を介してアプリを基盤となるデータベースに接続するための設定の例です。 + +```properties +# Transaction manager implementation. +scalar.db.transaction_manager=cluster + +# Contact point of the cluster. +scalar.db.contact_points=indirect: +``` + +クライアント設定の詳細については、[ScalarDB Cluster クライアント設定](scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx#クライアント設定) を参照してください。 + +[^1]: アプリケーションのアクセスパターンを考慮し、アプリケーションが使用する同じ基盤ストレージで、いくつかのバリエーション (たとえば、デフォルト値の 75% と 125%) でパフォーマンスをベンチマークして、最適な設定を決定することは価値があります。最適な設定は実際にはこれらの要因によって決まるためです。また、これらのパラメーターの組み合わせ (たとえば、1 番目に `slot_capacity:20` と `group_size_fix_timeout_millis:40`、2 番目に `slot_capacity:30` と `group_size_fix_timeout_millis:40`、3 番目に `slot_capacity:20` と `group_size_fix_timeout_millis:80`) をベンチマークして、最適な組み合わせを決定することも重要です。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/data-modeling.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/data-modeling.mdx new file mode 100644 index 00000000..552a0fd1 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/data-modeling.mdx @@ -0,0 +1,134 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# データをモデル化する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +データモデリング (つまり、データベーススキーマの設計) とは、データへのアクセスに使用されるパターンと、ビジネスオペレーション内で実行されるクエリの種類を特定することで、データの保存方法と使用方法を概念化して視覚化するプロセスです。 + +このページでは、まず ScalarDB データモデルについて説明し、次にデータモデルに基づいてデータベーススキーマを設計する方法について説明します。 + +## ScalarDB データモデル + +ScalarDB のデータモデルは、Bigtable データモデルにヒントを得た拡張キー値モデルです。リレーショナルモデルに似ていますが、以下に示すようにいくつかの点で異なります。データモデルは、リレーショナルデータベース、NoSQL データベース、NewSQL データベースなど、さまざまなデータベースを抽象化するために選択されます。 + +次の図は、それぞれがレコードのコレクションである ScalarDB テーブルの例を示しています。このセクションでは、まず、テーブルやレコードなどの ScalarDB が定義するオブジェクトについて説明し、次にレコードの検索方法について説明します。 + +![ScalarDB データモデル](images/scalardb_data_model.png) + +### ScalarDB のオブジェクト + +ScalarDB データモデルには、いくつかのオブジェクトがあります。 + +#### 名前空間 + +名前空間は、SQL 名前空間またはデータベースに類似したテーブルのコレクションです。 + +#### テーブル + +テーブルはパーティションのコレクションです。名前空間には、通常、それぞれが名前で識別される 1 つ以上のテーブルが含まれます。 + +#### パーティション + +パーティションはレコードのコレクションであり、論理ノードまたは物理ノードへの分散単位です。したがって、同じパーティション内のレコードは同じノードに配置されます。ScalarDB では、複数のパーティションがハッシュによって分散されていると想定しています。 + +#### レコード / 行 + +レコードまたは行は、他のすべてのレコード間で一意に識別できる列のセットです。 + +#### 列 + +列は基本的なデータ要素であり、これ以上細分化する必要はありません。各レコードは、1 つ以上の列で設定されます。各列にはデータ型があります。データ型の詳細については、[ScalarDB と他のデータベース間のデータ型マッピング](schema-loader.mdx#scalardb-と他のデータベース間のデータ型マッピング)を参照してください。 + +#### セカンダリインデックス + +セカンダリインデックスは、単一の基本テーブル内の列のソートされたコピーです。各インデックスエントリは、対応するテーブルパーティションにリンクされています。ScalarDB は現在、複数列のインデックスをサポートしていないため、1 つの列のみでインデックスを作成できます。 + +### レコードの検索方法 + +このセクションでは、テーブルからレコードを検索する方法について説明します。 + +#### プライマリーキー + +プライマリーキーは各レコードを一意に識別します。2 つのレコードが同じプライマリーキーを持つことはできません。したがって、プライマリーキーを指定してレコードを検索できます。プライマリーキーは、パーティションキーと、オプションでクラスタリングキーで設定されます。 + +#### パーティションキー + +パーティションキーは、パーティションを一意に識別します。パーティションキーは、パーティションキー列と呼ばれる列のセットで設定されます。パーティションキーのみを指定すると、パーティションに属するレコードのセットを取得できます。 + +#### クラスタリングキー + +クラスタリングキーは、パーティション内のレコードを一意に識別します。クラスタリングキー列と呼ばれる列のセットで設定されます。クラスタリングキーを指定する場合は、効率的な検索のためにパーティションキーを指定する必要があります。パーティションキーなしでクラスタリングキーを指定すると、すべてのパーティションをスキャンすることになります。すべてのパーティションをスキャンすると、特にデータ量が多い場合は時間がかかるため、自己判断でのみ実行してください。 + +パーティション内のレコードは、クラスタリング順序として指定されたクラスタリングキー列でソートされていると想定されます。したがって、定義された順序でクラスタリングキー列の一部を指定して、返される結果を絞り込むことができます。 + +#### インデックスキー + +インデックスキーは、インデックス内のキーを検索してレコードを識別します。インデックスキーの検索はすべてのパーティションにまたがるため、特に検索の選択性が低くない場合は、必ずしも効率的であるとは限りません。 + +## データベーススキーマの設計方法 + +データベーススキーマはリレーショナルモデルと同様に設計できますが、基本的な原則があり、従うべきベストプラクティスがいくつかあります。 + +### クエリ駆動型データモデリング + +リレーショナルデータベースでは、データは正規化されたテーブルに整理され、外部キーを使用して他のテーブル内の関連データを参照します。アプリケーションが実行するクエリはテーブルによって構造化され、関連データはテーブル結合としてクエリされます。 + +ScalarDB は ScalarDB SQL での結合操作をサポートしていますが、データモデリングは NoSQL データベースのように、よりクエリ駆動型である必要があります。データアクセスパターンとアプリケーションクエリによって、テーブルの構造と設定が決定されます。 + +### ベストプラクティス + +このセクションでは、データベーススキーマを設計するためのベストプラクティスについて説明します。 + +#### データ分散を考慮する + +パーティションキーとクラスタリングキーを適切に選択して、パーティションへの負荷を分散させることをお勧めします。 + +たとえば、銀行アプリケーションでアカウント ID をパーティションキーとして選択すると、アカウントが属するパーティション内で特定のアカウントに対するすべてのアカウント操作を実行できます。したがって、異なるアカウント ID を操作すると、異なるパーティションにアクセスすることになります。 + +一方、ブランチ ID をパーティションキーとして選択し、アカウント ID をクラスタリングキーとして選択すると、ブランチのアカウント ID へのアクセスはすべて同じパーティションに送られるため、負荷とデータサイズの不均衡が生じます。さらに、少数の大きなパーティションを作成すると負荷とデータサイズの不均衡が生じるため、パーティションキーにはカーディナリティの高い列を選択する必要があります。 + +#### 単一のパーティションの読み取りを試みる + +データモデルの特性により、単一パーティション検索が最も効率的です。スキャンを発行したり、複数パーティションの検索やスキャンを必要とするリクエストを選択したりする必要がある場合は、[クロスパーティションスキャンで有効にする](configurations.mdx#クロスパーティションスキャン設定)ことができますが、独自の判断で実行し、可能であればスキーマの更新を検討してください。 + +たとえば、銀行アプリケーションで、パーティションキーとして電子メールを選択し、クラスタリングキーとしてアカウント ID を選択し、アカウント ID を指定するクエリを発行すると、対応するパーティションを効率的に識別できないため、クエリはすべてのパーティションにまたがって実行されます。このような場合は、常にアカウント ID を使用してテーブルを検索する必要があります。 + +:::note + +適切なインデックスを持つリレーショナルデータベース上の複数のパーティションを読み取る場合、クエリがデータベースにプッシュダウンされるため、クエリが効率的になる可能性があります。 + +::: + +#### セカンダリインデックスの使用を避ける + +上記と同様に、セカンダリインデックスを使用するスキャンまたは選択リクエストを発行する必要がある場合、そのリクエストはテーブルのすべてのパーティションにまたがります。したがって、セカンダリインデックスの使用を避けるようにしてください。セカンダリインデックスを使用する必要がある場合は、小さな部分を検索する低選択性クエリを介して使用します。 + +セカンダリインデックスの代わりに、ベーステーブルのクラスター化インデックスとして機能する別のテーブルを作成できます。 + +たとえば、プライマリーキーが `A` である `table1(A, B, C)` という 3 つの列を持つテーブルがあるとします。次に、`C` をプライマリーキーとして `index-table1(C, A, B)` のようなテーブルを作成し、`C` の値を指定して単一のパーティションを検索できるようにします。このアプローチにより、読み取りクエリは高速化されますが、ScalarDB トランザクションを使用して 2 つのテーブルに書き込む必要があるため、書き込みクエリの負荷が増加する可能性があります。 + +:::note + +将来的には、ScalarDB にテーブルベースのセカンダリインデックス機能が追加される予定です。 + +::: + +#### データはハッシュによって分散されていると想定されていることを考慮する + +現在の ScalarDB データモデルでは、データはハッシュによって分散されていると想定されています。したがって、パーティションキーがないと範囲クエリを効率的に実行できません。 + +範囲クエリを効率的に発行するには、パーティション内で実行する必要があります。ただし、このアプローチに従う場合は、パーティションキーを指定する必要があります。範囲クエリは常に同じパーティションに送信されるので、パーティションが過負荷になる可能性があり、スケーラビリティの問題が発生する可能性があります。この制限は ScalarDB に固有のものではなく、スケーラビリティのためにハッシュによってデータが分散されているデータベースに固有のものです。 + +:::note + +適切なインデックスを持つリレーショナルデータベースで ScalarDB を実行すると、クエリがデータベースにプッシュダウンされるため、範囲クエリが効率的になる可能性があります。 + +::: diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/database-configurations.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/database-configurations.mdx new file mode 100644 index 00000000..3558209c --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/database-configurations.mdx @@ -0,0 +1,122 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB の基盤となるデータベースの設定 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このドキュメントでは、ScalarDB を使用するアプリケーションが正しく効率的に動作するように、ScalarDB の基盤となるデータベースを設定する方法について説明します。 + +## 基盤となるデータベースの一般的な要件 + +ScalarDB では、基盤となる各データベースが、データベースでトランザクションと分析を実行するための特定の機能を提供する必要があります。このドキュメントでは、一般的な要件と、要件を満たすために各データベースを設定する方法について説明します。 + +### トランザクション + +ScalarDB では、基盤となる各データベースが、データベースでトランザクションを実行するために少なくとも次の機能を提供する必要があります。 + +- 単一のデータベースレコードに対する線形化可能な読み取りと条件付きミューテーション (書き込みと削除)。 +- 書き込まれたデータベースレコードの耐久性。 +- 各データベースレコードにアプリケーションデータのほかに任意のデータを保存できる機能。 + +### 分析 + +ScalarDB では、基盤となる各データベースが、データベースで分析を実行するために次の機能を提供する必要があります。 + +- コミットされたレコードのみを返す機能。 + +:::note + +ScalarDB は、CRUD 操作だけでなく、スキーマ、テーブル、インデックスの作成や変更などの操作を実行するために、基盤となるデータベース上で実行されるため、ScalarDB を介してデータベースにアクセスするのに十分な権限を持つデータベースアカウントが必要です。基本的に、ScalarDB では、基盤となるデータベースにアクセスするために完全な権限を持つアカウントが必要です。 + +::: + +## 一般的な要件を満たすようにデータベースを設定する方法 + +一般的な要件を満たすようにデータベースを設定する方法の詳細については、データベースを選択してください。 + + + +

トランザクション

+ + - すべての操作に単一のプライマリサーバーまたは同期された複数のプライマリサーバーを使用します (プライマリデータベースから非同期にレプリケートされた読み取りレプリカに対する読み取り操作はありません)。 + - 読み取りコミットまたはより厳格な分離レベルを使用します。 + +

分析

+ + - 読み取りコミットまたはより厳格な分離レベルを使用します。 +
+ +

トランザクション

+ + - すべての操作に単一のプライマリリージョンを使用します。(プライマリリージョン以外のグローバルテーブルに対する読み取りおよび書き込み操作は実行できません。) + - DynamoDB にはプライマリリージョンの概念がないため、プライマリリージョンは自分で指定する必要があります。 + +

分析

+ + - 該当なし。DynamoDB は常にコミットされたレコードを返すため、DynamoDB 固有の要件はありません。 +
+ +

トランザクション

+ + - 「Strong」または「Bounded Staleness」の一貫性を持つすべての操作に単一のプライマリリージョンを使用します。 + +

分析

+ + - 該当なし。Cosmos DB は常にコミットされたレコードを返すため、Cosmos DB 固有の要件はありません。 +
+ +

トランザクション

+ + - すべての操作に単一のプライマリクラスターを使用します (プライマリ以外のクラスターでは読み取りまたは書き込み操作は行いません)。 + - `commitlog_sync` には `batch` または `group` を使用します。 + - Cassandra 互換データベースを使用している場合、それらのデータベースは軽量トランザクション (LWT) を適切にサポートしている必要があります。 + +

分析

+ + - 該当なし。Cassandra は常にコミットされたレコードを返すため、Cassandra 固有の要件はありません。 +
+
+ +## 推奨事項 + +ScalarDB の基盤となる各データベースを適切に設定して、高パフォーマンスと高可用性を実現することが推奨されます。次の推奨事項には、更新すべきいくつかのオプションが含まれています。 + +:::note + +ScalarDB は基盤となるデータベースのアプリケーションと見なすことができるため、効率を向上させるためによく使用されるその他のオプションを更新してみることをお勧めします。 + +::: + + + + - パフォーマンスを向上させるには、読み取りコミット分離を使用します。 + - 各データベースのパフォーマンス最適化のベストプラクティスに従います。たとえば、パフォーマンスを向上させるには、通常、バッファサイズ (PostgreSQL の `shared_buffers` など) を増やし、接続数 (PostgreSQL の `max_connections` など) を増やすことが推奨されます。 + + + - 読み取り容量ユニット (RCU) と書き込み容量ユニット (WCU) の数を増やして、スループットを高めます。 + - ポイントインタイムリカバリ (PITR) を有効にします。 + +:::note + +DynamoDB はデフォルトで複数のアベイラビリティーゾーンにデータを保存するため、可用性を向上させるために設定を調整する必要はありません。 + +::: + + + - 高いスループットを実現するために、リクエストユニット (RU) の数を増やします。 + - ポイントインタイムリストア (PITR) を有効にします。 + - 可用性ゾーンを有効にします。 + + + - スループットを高めるために、`concurrent_reads` と `concurrent_writes` を増やします。詳細については、[`concurrent_writes`](https://cassandra.apache.org/doc/stable/cassandra/configuration/cass_yaml_file.html#concurrent_writes) に関する Cassandra の公式ドキュメントを参照してください。 + + diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/deploy-overview.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/deploy-overview.mdx new file mode 100644 index 00000000..3a0d7e1b --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/deploy-overview.mdx @@ -0,0 +1,22 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# デプロイの概要 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このカテゴリでは、ローカルおよびクラウドベースの Kubernetes 環境での ScalarDB、特に ScalarDB Cluster と ScalarDB Analytics のデプロイに慣れるためのガイドに従うことができます。 + +## ローカル Kubernetes 環境に ScalarDB をデプロイする + +このサブカテゴリでは、ローカル Kubernetes 環境に ScalarDB をデプロイする方法を学習できます。このサブカテゴリの主な焦点は、Scalar Helm Charts の使用方法を学習することです。このため、わかりやすくするために特定のデータベース (PostgreSQL) が指定されています。 + +## クラウドベースの Kubernetes 環境に ScalarDB をデプロイする + +このサブカテゴリでは、クラウドベースの Kubernetes 環境に ScalarDB をデプロイする方法を学習できます。このサブカテゴリでは、Scalar Helm Charts の使用方法と、クラウドベースの Kubernetes 環境で ScalarDB を実行するために必要なその他の手順について説明します。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/design.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/design.mdx new file mode 100644 index 00000000..64fbd23f --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/design.mdx @@ -0,0 +1,17 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB デザインドキュメント + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB の設計と実装の詳細については、VLDB 2023 カンファレンスで発表した次のドキュメントを参照してください。 + +- **Speakerdeck プレゼンテーション:** [ScalarDB: Universal Transaction Manager for Polystores](https://speakerdeck.com/scalar/scalardb-universal-transaction-manager-for-polystores-vldb23) +- **詳細な論文:** [ScalarDB: Universal Transaction Manager for Polystores](https://www.vldb.org/pvldb/vol16/p3768-yamada.pdf) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/develop-overview.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/develop-overview.mdx new file mode 100644 index 00000000..efb9a898 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/develop-overview.mdx @@ -0,0 +1,32 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB を用いた開発について開発の概要 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このカテゴリでは、ScalarDB をよりよく理解するためのガイドに従うことができます。具体的には、トランザクション、分析クエリ、非トランザクションストレージ操作の実行方法です。 + +## トランザクションの実行 + +このサブカテゴリでは、ScalarDB データモデルに基づいてデータをモデル化し、スキーマを作成する方法を学習できます。次に、ScalarDB コアライブラリと、コアライブラリをラップする gRPC サーバーである ScalarDB Cluster を介してトランザクションを実行する方法を学習できます。 + +また、正確で安全でパフォーマンスの高い ScalarDB ベースのアプリケーションを作成する方法も学習できます。 + +## 分析クエリの実行 + +このセクションでは、ScalarDB の分析コンポーネントである ScalarDB Analytics をセットアップおよび設定する方法を学習できます。次に、ScalarDB トランザクションを介して書き込んだデータベースに対して分析クエリを実行します。 + +## 非トランザクションストレージ操作の実行 + +ScalarDB は当初、さまざまなデータベースと、そのようなデータベース間のトランザクション間の統一された抽象化を提供するために設計されました。ただし、複数の、場合によっては多様なデータベースを使用するアプリケーションを簡素化するために、統合抽象化のみが必要な場合もあります。 + +ScalarDB では、基盤となるデータベースとストレージで非トランザクション操作のみを実行できるよう、トランザクション機能なしで統合抽象化のみを提供するように設定することができます。ScalarDB は複数の操作にわたって ACID を保証しないため、より優れたパフォーマンスで操作を実行できます。 + +このサブカテゴリでは、このような非トランザクションストレージ操作を実行する方法を学習できます。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb-by-using-kotlin.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb-by-using-kotlin.mdx new file mode 100644 index 00000000..49608cf4 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb-by-using-kotlin.mdx @@ -0,0 +1,418 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# Kotlin を使って ScalarDB をはじめよう + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +この入門チュートリアルでは、ScalarDB で好みのデータベースを設定し、Kotlin を使用して基本的な電子マネーアプリケーションをセットアップする方法について説明します。Kotlin は Java との相互運用性を備えているため、Kotlin から直接 ScalarDB を使用できます。 + +:::warning + +電子マネーアプリケーションはこのチュートリアル用に簡略化されており、実稼働環境には適していません。 + +::: + +## このサンプルアプリケーションの前提条件 + +ScalarDB は Java で記述されているため、環境に次のいずれかの Java Development Kit (JDK) がインストールされている必要があります。 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- [Docker](https://www.docker.com/get-started/) 20.10 以降と [Docker Compose](https://docs.docker.com/compose/install/) V2 以降 + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](./requirements.mdx)を参照してください。 + +::: + +## ScalarDB サンプルリポジトリのクローンを作成する + +**Terminal** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-kotlin-sample +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](requirements.mdx#データベース)を参照してください。 + + + +

MySQLをローカルで実行する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の MySQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://localhost:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://localhost:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の SQL Server のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://localhost:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB をローカルで実行する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://localhost:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントをお持ちでない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を設定する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル**を**強力**に設定します。 + +

ScalarDB を設定する

+ + 以下の手順では、ローカル環境に JDK が適切にインストールおよび設定されており、Azure で Cosmos DB for NoSQL アカウントが適切に設定されていることを前提としています。 + + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。`scalar.db.contact_points` と `scalar.db.password` の値は、説明に従って必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-kotlin-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Cassandra のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=localhost + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +## データベーススキーマをロードする + +アプリケーションでデータベーススキーマ (データを整理する方法) を定義する必要があります。サポートされているデータ型の詳細については、[ScalarDB と他のデータベース間のデータ型マッピング](schema-loader.mdx#scalardb-と他のデータベース間のデータ型マッピング)を参照してください。 + +このチュートリアルでは、**schema.json** というファイルが `scalardb-samples/scalardb-kotlin-sample` ディレクトリに既に存在します。スキーマを適用するには、[`scalardb` Releases](https://github.com/scalar-labs/scalardb/releases) ページに移動し、使用している ScalarDB のバージョンに一致する ScalarDB Schema Loader を `scalardb-samples/scalardb-kotlin-sample` ディレクトリにダウンロードします。 + +次に、データベースに基づいて、`` をダウンロードした ScalarDB Schema Loader のバージョンに置き換えて、次のコマンドを実行します。 + + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator --no-backup --no-scaling + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +また、Amazon DynamoDB Local は継続的なバックアップと自動スケーリングをサポートしていないため、`--no-backup` および `--no-scaling` オプションが指定されています。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator --replication-factor=1 + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +また、`--replication-factor=1` オプションは Cassandra を使用する場合にのみ有効です。デフォルトのレプリケーション係数は `3` ですが、このチュートリアルではセットアップを容易にするために `1` が使用されているため、3 つのノードではなく 1 つのノードを持つクラスターを準備するだけで済みます。ただし、レプリケーション係数 `1` は本番環境には適していないことに注意してください。 + +::: + + + +## 基本的な電子マネーアプリケーションでトランザクションを実行し、データを取得します + +スキーマをロードした後、クローンしたリポジトリに含まれる基本的な電子マネーアプリケーションでトランザクションを実行し、データを取得できます。 + +アプリケーションは、次の種類のトランザクションをサポートしています: + +- アカウントを作成します。 +- アカウントに資金を追加します。 +- 2 つのアカウント間で資金を送信します。 +- アカウント残高を取得します。 + +:::note + +初めて Gradle コマンドを実行すると、Gradle によって必要なライブラリが自動的にインストールされます。 + +::: + +### 残高のあるアカウントを作成する + +アカウント間で資金を送金するには、残高のあるアカウントが必要です。 + +**customer1** の残高が **500** のアカウントを作成するには、次のコマンドを実行します。 + +```console +./gradlew run --args="-action charge -amount 500 -to customer1" +``` + +### 残高のないアカウントを作成する + +残高のあるアカウントを設定したら、資金を送金するための別のアカウントが必要です。 + +残高が **0** の **merchant1** のアカウントを作成するには、次のコマンドを実行します。 + +```console +./gradlew run --args="-action charge -amount 0 -to merchant1" +``` + +### アカウントに資金を追加する + +[残高のあるアカウントを作成する](#残高のあるアカウントを作成する)でアカウントを作成して資金を追加したのと同じ方法で、アカウントに資金を追加できます。 + +**customer1** のアカウントに **500** を追加するには、次のコマンドを実行します。 + +```console +./gradlew run --args="-action charge -amount 500 -to customer1" +``` + +**customer1** のアカウントの残高は **1000** になります。 + +### 2 つのアカウント間で電子マネーを送金する + +これで 2 つのアカウントが作成され、少なくとも 1 つのアカウントに残高があるので、一方のアカウントからもう一方のアカウントに資金を送金できます。 + +**customer1** が **merchant1** に **100** を支払うようにするには、次のコマンドを実行します。 + +```console +./gradlew run --args="-action pay -amount 100 -from customer1 -to merchant1" +``` + +### アカウント残高を取得する + +あるアカウントから別のアカウントに資金を送金した後、各アカウントの残高を確認できます。 + +**customer1** の残高を取得するには、次のコマンドを実行します。 + +```console +./gradlew run --args="-action getBalance -id customer1" +``` + +次の出力が表示されます。 + +```console +... +The balance for customer1 is 900 +... +``` + +**merchant1** の残高を取得するには、次のコマンドを実行します。 + +```console +./gradlew run --args="-action getBalance -id merchant1" +``` + +次の出力が表示されます。 + +```console +... +The balance for merchant1 is 100 +... +``` + +## データベースを停止する + +データベースを停止するには、次のコマンドを実行して Docker コンテナを停止します。 + +```console +docker compose down +``` + +## 参照 + +このチュートリアルで使用されている電子マネーアプリケーションのソースコードを確認するには、[`ElectronicMoney.kt`](https://github.com/scalar-labs/scalardb-samples/blob/main/getting-started-kotlin/src/main/kotlin/sample/ElectronicMoney.kt) を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb.mdx new file mode 100644 index 00000000..fa3d9eba --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/getting-started-with-scalardb.mdx @@ -0,0 +1,537 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB をはじめよう + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +この入門チュートリアルでは、ScalarDB でデータベースを設定する方法について説明し、ScalarDB を使用してクレジットカードでアイテムを注文して支払うことができるサンプルの電子商取引アプリケーションを作成するプロセスを示します。サンプルの電子商取引アプリケーションでは、ユーザーがクレジットラインを使用してアイテムを注文して支払う方法を示します。 + +:::warning + +サンプルアプリケーションは ScalarDB の使用方法を示すことに重点を置いているため、アプリケーション固有のエラー処理、認証処理、および同様の機能はサンプルアプリケーションに含まれていません。ScalarDB での例外処理の詳細については、[例外の処理方法](api-guide.mdx#how-to-handle-exceptions)を参照してください。 + +::: + +## このサンプルアプリケーションの前提条件 + +ScalarDB は Java で記述されているため、環境に次のいずれかの Java Development Kit (JDK) がインストールされている必要があります。 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- [Docker](https://www.docker.com/get-started/) 20.10 以降と [Docker Compose](https://docs.docker.com/compose/install/) V2 以降 + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](./requirements.mdx)を参照してください。 + +::: + +## ScalarDB サンプルリポジトリのクローンを作成する + +**Terminal** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-sample +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](requirements.mdx#データベース)を参照してください。 + + + +

MySQLをローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の MySQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://localhost:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://localhost:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の SQL Server のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://localhost:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://localhost:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントをお持ちでない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を設定する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル**を**強力**に設定します。 + +

ScalarDB を設定する

+ + 以下の手順では、ローカル環境に JDK が適切にインストールおよび設定されており、Azure で Cosmos DB for NoSQL アカウントが適切に設定されていることを前提としています。 + + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。`scalar.db.contact_points` と `scalar.db.password` の値は、説明に従って必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + ```console + docker compose up -d cassandra + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Cassandra のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=localhost + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +## データベーススキーマをロードする + +アプリケーションでデータベーススキーマ (データを整理する方法) を定義する必要があります。サポートされているデータ型の詳細については、[ScalarDB と他のデータベース間のデータ型マッピング](schema-loader.mdx#scalardb-と他のデータベース間のデータ型マッピング)を参照してください。 + +このチュートリアルでは、**schema.json** というファイルが `scalardb-samples/scalardb-sample` ディレクトリに既に存在します。スキーマを適用するには、[`scalardb` Releases](https://github.com/scalar-labs/scalardb/releases) ページに移動し、使用している ScalarDB のバージョンに一致する ScalarDB Schema Loader を `scalardb-samples/scalardb-sample` ディレクトリにダウンロードします。 + +次に、データベースに基づいて、`` をダウンロードした ScalarDB Schema Loader のバージョンに置き換えて、次のコマンドを実行します。 + + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator --no-backup --no-scaling + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +また、Amazon DynamoDB Local は継続的なバックアップと自動スケーリングをサポートしていないため、`--no-backup` および `--no-scaling` オプションが指定されています。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +::: + + + ```console + java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator --replication-factor=1 + ``` + +:::note + +`transaction` が `true` に設定されたテーブルがスキーマ内に存在するため、`--coordinator` オプションが指定されています。スキーマの設定とロードの詳細については、[ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 + +また、`--replication-factor=1` オプションは Cassandra を使用する場合にのみ有効です。デフォルトのレプリケーション係数は `3` ですが、このチュートリアルではセットアップを容易にするために `1` が使用されているため、3 つのノードではなく 1 つのノードを持つクラスターを準備するだけで済みます。ただし、レプリケーション係数 `1` は本番環境には適していないことに注意してください。 + +::: + + + +### スキーマの詳細 + +サンプルアプリケーションの [`schema.json`](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-sample/schema.json) に示されているように、すべてのテーブルは `sample` 名前空間に作成されます。 + +- `sample.customers`: 顧客情報を管理するテーブル + - `credit_limit`: 貸し手が顧客に信用枠から支出を許可する最大金額 + - `credit_total`: 顧客が信用枠から支出した金額 +- `sample.orders`: 注文情報を管理するテーブル +- `sample.statements`: 注文明細情報を管理するテーブル +- `sample.items`: 注文するアイテムの情報を管理するテーブル + +スキーマのエンティティ関係図は次のとおりです。 + +![ERD](images/getting-started-ERD.png) + +### 初期データをロードする + +サンプルアプリケーションを実行する前に、次のコマンドを実行して初期データをロードする必要があります。 + +```console +./gradlew run --args="LoadInitialData" +``` + +初期データがロードされた後、次のレコードがテーブルに保存される必要があります。 + +**`sample.customers` テーブル** + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +**`sample.items` テーブル** + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## サンプルアプリケーションでトランザクションを実行し、データを取得する + +次のセクションでは、サンプル電子商取引アプリケーションでトランザクションを実行し、データを取得する方法について説明します。 + +### 顧客情報を取得する + +まず、次のコマンドを実行して、ID が `1` である顧客に関する情報を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 0} +... +``` + +### 注文する + +次に、次のコマンドを実行して、顧客 ID `1` にリンゴ 3 個とオレンジ 2 個を注文してもらいます。 + +:::note + +このコマンドの注文形式は `./gradlew run --args="PlaceOrder :,:,..."` です。 + +::: + +```console +./gradlew run --args="PlaceOrder 1 1:3,2:2" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す類似の出力が表示されます。 + +```console +... +{"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e"} +... +``` + +### 注文の詳細を確認する + +次のコマンドを実行して注文の詳細を確認します。`` は、前のコマンドを実行した後に表示される `order_id` の UUID に置き換えます。 + +```console +./gradlew run --args="GetOrder " +``` + +`order_id` と `timestamp` の UUID が異なる、以下のような出力が表示されます。 + +```console +... +{"order": {"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e","timestamp": 1650948340914,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}} +... +``` + +### 別の注文をする + +次のコマンドを実行して、顧客 ID `1` の `credit_total` の残額を使用してメロン 1 個を注文します。 + +```console +./gradlew run --args="PlaceOrder 1 5:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す類似の出力が表示されます。 + +```console +... +{"order_id": "bcc34150-91fa-4bea-83db-d2dbe6f0f30d"} +... +``` + +### 注文履歴を確認する + +次のコマンドを実行して、顧客 ID `1` のすべての注文履歴を取得します。 + +```console +./gradlew run --args="GetOrders 1" +``` + +`order_id` と `timestamp` の UUID が異なる以下のような出力が表示されます。これは、顧客 ID `1` のすべての注文履歴をタイムスタンプの降順で表示します。 + +```console +... +{"order": [{"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e","timestamp": 1650948340914,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000},{"order_id": "bcc34150-91fa-4bea-83db-d2dbe6f0f30d","timestamp": 1650948412766,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 5,"item_name": "Melon","price": 3000,"count": 1,"total": 3000}],"total": 3000}]} +... +``` + +### クレジット合計を確認する + +次のコマンドを実行して、顧客 ID `1` のクレジット合計を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` が `credit_total` の `credit_limit` に達しており、これ以上注文できないことを示しています。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 10000} +... +``` + +次のコマンドを実行して、ブドウ 1 個とマンゴー 1 個を注文してみます。 + +```console +./gradlew run --args="PlaceOrder 1 3:1,4:1" +``` + +次の出力が表示されます。これは、`credit_total` 金額が `credit_limit` 金額を超えたために注文が失敗したことを示しています。 + +```console +... +java.lang.RuntimeException: Credit limit exceeded + at sample.Sample.placeOrder(Sample.java:205) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:33) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:8) + at picocli.CommandLine.executeUserObject(CommandLine.java:1783) + at picocli.CommandLine.access$900(CommandLine.java:145) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2141) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2108) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1975) + at picocli.CommandLine.execute(CommandLine.java:1904) + at sample.command.SampleCommand.main(SampleCommand.java:35) +... +``` + +### 支払いを行う + +注文を続行するには、顧客 ID `1` が支払いを行って `credit_total` の金額を減らす必要があります。 + +次のコマンドを実行して支払いを行います。 + +```console +./gradlew run --args="Repayment 1 8000" +``` + +次に、次のコマンドを実行して、顧客 ID `1` の `credit_total` 金額を確認します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` に支払いが適用され、`credit_total` の金額が減ったことを示しています。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 2000} +... +``` + +顧客 ID `1` が支払いを済ませたので、次のコマンドを実行してブドウ 1 個とメロン 1 個を注文します。 + +```console +./gradlew run --args="PlaceOrder 1 3:1,4:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す類似の出力が表示されます。 + +```console +... +{"order_id": "8911cab3-1c2b-4322-9386-adb1c024e078"} +... +``` + +## データベースを停止する + +データベースを停止するには、次のコマンドを実行して Docker コンテナを停止します。 + +```console +docker compose down +``` + +## 参照 + +このチュートリアルで使用される電子商取引アプリケーションのソースコードを確認するには、[`Sample.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/scalardb-sample/src/main/java/sample/Sample.java) を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/data_model.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/data_model.png new file mode 100644 index 0000000000000000000000000000000000000000..15a0e4d4bfd63de04a327dbfb87e91f2a0c70fd5 GIT binary patch literal 256199 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

~Yc(U=BA-+^pHe+Pgy%NTpx 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

#ALDXw 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 z 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�Uou1zp(`UeH?QQ<(HSV{?3IjS)~0RJN zlm-~4d}O}_61MA>$w=>^lW+8 zJl6d6nOt+WinG_7ss~Q7!MyC1!qq{JmiuWDPhvyPGlo5gKmxbvyG$=kd>k=) ztaLkC;+wd2S&1}a^OwLt9~sUt_A!>Pam6%zqKe=i!uLX(ehWs3^v$IX3^E?WBd#no zOG_n?n(_8q9*T;@tFaaoB3w#Ww~ok1pS~kPCJMt5bLsLg+c+gL)E)QXdQy8%_u+!Z z(!zS9`yw!ty?%9xR=!)nb`SyiAMa=#VF2Jf5CN#lR3bc8@Q#&L36Hc{MYIKcCP8>U zOybqtZNC@}9yUra_!sKlZb2gK8bAm0ppJ&a(!>&bC>S?r&<;5};LmKK5LmT4U_?Kxft zJ`KRgdRN`AQvoR(muHN)HfZ6JC)Z7wAqI()G-<_NY==MFm{xWgYb=i;R?|Z|{mwZ* zyGj?M?}2+UCw>c`TNKhx*e;6Au-M;y^d9l&lo5XDdo2B(g9*kr_Nt0I|QU&g&B#WjY?;9rg1+CwN-;REhvffn?j0&Z92= zG1lxwejZfuyL?|qKEBpJMlCwz37bMNnsPFkgjRz)c#|isdH`Z8qcF`Mw>4ijsfPou zuLz0xr}#aX=kULGUf{xn=2#I@>dF?f%DqEL=~!( zD~fws{6q}#SRBS?hJ$bvC^t1w}Adc@_I

*uwm@ReuL9%8;gCi4 z<)cWVM$p$1lfvz4j=lbsz}|%PUVQ(kgjBHK5i1u7?ph0_?4cx1BjTR2GJX;p5Tfhb zWkU2afl}@;#1e*y!jKtwyz6qb2a}+(fMXGe7hb#o3uM?rQyKi{V=0xR^gkxk!bzeh z=%DFKK$Xzdi@?N-nxFrkOOjIGJh0hd`|pu4hNHPd>Fwj^LoIr7@cO_w%anc{is;ov zOdTcko(DxL?JoUA0NzDhc<%|?tQ^3|?Z1Uko`Ux}y>dBGhK0ZiNi-GR6yeHT4bq54 z=Ka92zagoq-r_fS`V_K6Kg^rNUvWN}@aT4QIq3b`b)i`Eb!&!pd}xgJ`58UW1}zr4 ztyf0v*KWL1I{BF8VBA3o(It+UW;@;1*RoA zMf3;kAUn0p3I|AxU#&8a!`@em_s;C40ry{kP0V)b`Fn>`1K{tvAnDHhp>gW$OLyMSqjtiu_q(S%n!{}1J6>F zcs!qxW09oqjnhug9J={^#%O&(i6&mS=PfxJ?xbD1Higa`rYw|3#-HS+tj*pe$&FOa zZ~btV3dUN#4VeRUwzb|83@n@4|0l&k+3gt2JjX3BwrIr}{N)NChi5a|JXE*L{VSsG zYPR~0j0Ln5vg*h=fgH}Ed%0zwh5iQpiepM%th2(kHxn^;fiv8^vwEalR4^o-@LqxH zjyOA?L_`i^B#$NEwIjKeKn1AgcYrQ=obmV-7I-sKLP1&poLi0vn&uF$`5+b1^5rdt zJPwU7A=2ACIe{vEj|nH~Dv?&`M@>N>gjJwy=RNTVW%k=-yH+2DC?E>7)1<`gQqU`W zf4?35KWLvaIZ0_ToknopO!cM_5|tKRCIRA3HqyQ*h8xGJGpFTbfBKiDzkZIu=R1Qd zv26>&BV*eil%o7;Bl?}r>IOf3;7hTgu6+hdSK(f`xH$VnQmWUgwTJ-mFI$THPVJ&u zEA%7=@hnc|(@m(uIW`2wXm>I@S~|Mp*r+uckieLs|DB(Hol-8|L*XZAMOv%nZ)XbX z_u4h+nLM(!Np}Er;A!@jK*Bpqq#d~xy^C>HBk#vG{C&=X_SW95O%jE{C>1 zW1eB@xVF$v&9~;GFY|be&jU&<=wfFR^PqtD-F_Pelc*IKrBujIF2!>ddxD;LF|9(O za28`sNG-{5`*uJeAa?2|F8jc!m(j^={__gg66xFEV58Ck@Af~nsY*%e0GqKJ^3MQz zXCV3$jpa+z#p^8r*Gbh5!MMk-$@gf)*?&q%IE4kQ<|I_NlE(+Z%)a9xNyoZQ`3ec` z)LH%=aj%3!WaZYK^8Pdq#E<84+-gP3L`IBiYPj#`?)y+lpC@>TyiBY{7)tOUZ;9XtK}f{F#65H#Yn{F z0pho?E(cbVM)Q68^=b$WU6%=OV2XS#uh>!l?$!^(h?fpe6*fW|mg?>h^dhq%Ss+04 zap)zs`^Q#W8_MhOkwe+o+(w?N9iKK+vcg$x{!GycnEjEOm@!j{o5@XwNuDt0-4u5kdIWAwF5VV{Q(RZOQcrF+9`6>aHyXw9F z`hsA~hfzW~8vbXWNn<}`)4%Tld0^EY!oe$*jyR4(rICNZU7A8ujyNBP?So?ye){hD z)sc>?-zQxve(LZGa{4QuJ%FP2M_?1*<=)@K*oGrT9gXxzG!CGkyQM68uU&)_=QvmY zh^DPrGKfU~7yNbISEnj=`)P6zl;V#0fDC|$xg{ioH{rfpkjQMV4lRI6#!*NkhEGE^ z2LGX_^Hok(XH4$8*UPD2eu3@4(DIkAq-4IR@i4E-eE}PuS8(Y83^(P(t-a8h^@(Mm z^9WdDgs}Syi5KCW1W|Uxbek+V(LW+Tt_=~k=3@QG!>F8MLy4qz?P}^WZ1(OFjGFZj z^o>MZ5CiiZSfC(#n`N{T-Ky}t%TzlrA1I$#Jdyd`t0) zLU-IN#nYQ-O-YcEapQY65A{!!!f@{C@He3k{nmLwK}!D^bB0cuQCn=c4S46B$Hg`H zTe|{MwIUV1M=bAwIxgT!b%^0$x^+mxHtL`ptSvf$AhQF~ghB9R?gub^9hg6*)uVAP zf~te0e1v&;$9Yvgtta006F%=8Y~(vXZp_g7bAY~->8;eE+3O!3KW@_H^fYDgtbFT$ zefu)?jnnDeEIXy^@D{P2&ohg39me6YgG4nbKfq`TyYvv zvRQIoW%f>s!?blc$4`-4ZzTGw>xQ2z$HpRy-?sox?>y|^12B}Q$A84eumTKWcN|@e z$x*>MLfe>}E1FU_dQp;EhO!#UoU~@~c6P)_)`7Qm_t=A+^Oxg*U$WG_KAGV)`J+d# zn9LWx=&>d^=)7d`F-2^)mI~#BkN{eCaIXDy)v!4V2%XVJePHypxedJTM zL+fJ#H+D72QIkfgYN}!M69wz%pK6$DjkNPEJ?Ui*!HDQ>!6 zq*%R-#vQ=tXqIfcy5UO3=6b7r7bknHx(L;OHSxker0S?% zUfD~_5rr5pSy1wI$RX6|AN{-)Pr2SO+X6YEdlkDT90A0@jO$b*cTh;T!6C&sA__NuHhWfG+d{iUgD zSUDz;1hfn}6y5?BkA+r#QM2qO^d`vYP5)d`TKD@+i;rve2h-4_WIc-3qwz&l;%MJh zl{Mp!bkz3sS4ql$zc5=gG49h0IUSo9A#C4v7^LTmVU0hTcJsU(V~LAz=75{ylH*dg zd#D6x3AW5UgiJ%iN+%rS&xH?)pk$r9`Xqo~i|9y$_1_=24O*{l4)4tV8D3V2dG*D5 z-2muAG$^WP#xo@>B|Tr;IPXV11>6kQ+KPk(j6$&6{}XbbXzyiKDf~ys{w-ABYGr8gbVIyM zab~RT%6h|MYqjx+nWiKNXuer~?xymPy|vPlg}Vp|tE)z*{KQN4T6D8}xKi$cp^q!W zDI#LxNo;{S+@Z{jx5DOjPQK!M@>p&1a;5|HV!~9hH>;fdwCY=(c8=}Fo3u``t1VyI zb)9dp*4~v#&AZn7@PgI(-_(Zr`hy`u$HsiQf0!ea_28=8YIDkJKktj2U$(dxaDVWN zfa!0FkH*y`J%e<0xoVh0t$l?WHe$G68F5VN9~LZrnA_K9EHg}RV1Gei>(6|dXUb4; zK&Q#%$Nax8cT2|1}(1y=b$)pBRVn~1H-ofp+@{7KCwzwAMNMc3mpWuh6?D75Z~@y-v|Otm7Bz= z8bs?&krg|(5uMV9e%+ptpT|hhLvR3dj}q+H9ZVM|DwZhr-th`qCLB#r1=%)fm9{3o z(Gd=z5tbk?^y-e51~Y5&k3RHX08JB-rLLcBzyin~;zhwdhh`v(?;mfa14Sm2w#e<8 z67`BrzBL{opc~uY(yr-zf)1h*;u`lzoV1j>@HQ5zxsd?%3gTa=Ds=zc;&W&k3dCYI zMg@kWck2WmAaQ1lR8Bb?b!ozSCQYYK%@^}C^7+caZb@fo0nwU({e}^?&U=fPIlSZ~ zmOW`@+AHeSEpTr#xtlChz*6*FJ&xVx5gpHz_DhFN&lAR+4=o^%@6P9F z(lh&qzz32CzjNHr+j66%EO2!ZyD6}?KTA?yJSNWe*NT;ITCHJ)*>ITD2JZ?fTEJD0 zOMf=ZV<*i;Un0$)M{Ce9kyg~C%$k~Ob)uno5>7rE8P;-dqJi6q7k97I-XQpzRi)b^ zzpuy&W(JX}(;q>H2=qY;K0TG22?9uZevf>YJ9wYl6VaArz-hCX7O#LQC|f*`^b_nw zxzBt}ho{_qxSHNd7}<($tB6|?x{g~)c}$sh1l_JhMG;E(CNi?3g5C#H!ym4=Heq~^ zZMpYd_~|}z@q5ul4ix`>yfJua0Zbr+avUO5^}JknW`ku1a^1S3n`n#r&9KT!3=z@BFXH*H+H0Q1dsm>^bp- z62Xv5jLW7)5mMSN3a0RL|B-&yRGZK(=^JQ#f*O@tqW zR#glw1T96W#R2%tfET$amZ|PIp`)PlEP>Fxzk72#t*x!#EMlb@a5vokR0?U*L;+>h zYMvw(`_Z9KC})rZi*NubuG`{zL@qldrEzX+q;cz-4jofR{0B18s(Fxazn%DJw>H`} z8r_DAK9;85>ruIF+0{&f%?3jbGdXzHt~AsG@0|fowhlkMzLK&7+v{Z@ri!|-uyfk? z4dHjUpxRopukP!feMX3^ir{_QXhpdZJ|oPQf`b>`fQp+iNJ6PTIAWb^Nt!NXoTIrS z+Y2X{1iDPO=F0zEp~4ODf2yTDivIaqlD+$Yi8s{%Eqoz$X;%gkpfdaCefT{w>s%$m z!A3>azxz-}CCK1OH%P4vlnJ!l5W2e3Z2|!<9SzZbYO9zDA|muwC`CWV?Y-5pBhTi1 zW7RY0+@)76ouA4+X8C^sYBPuA8-h6$gr7QY6wwIZUid>? zbZg|35KHX^96vqgHx9AXL*>0PZcTPlYf-(|WGF&D* zRPg49Gshj zmXAJNZhdGsApuFxG|?s1*bym(wq>3Zy2i(2glNUvGha*tULtGXid9g1_YyiXI#dXf zcA_s-Po|!8XQZ%S(6O;^0pC`ht=`zqzs~j>s-fHA*aq~7O7CA%0+@x=?<9LX^_mA6 zhksji4_(++n6-mQXI6{!%ZJ#ll5^~zX^KJtmeRR}-*AH}dkPFroH$h7`VTS9X=OP| z2d@ckb{&Y1M|uo>!G>%)z|*4@QxhzE;=k?Cyj>L^XQi8qk5MhKq=b^8cSM?b z>-@^b^8wgSRxD;7PIDRXQZw;`eOi9|G1dziF~d}t?EJWdwIKx)UuHg>tY1FNe@95w z>I~q2BIV|l-#RiBI3-%-{a;7+S6>)r5o|wjdVVr%#sqs3nNf+14>`&I7%eG zqlfOe=I$ZZ`_J9YYPt5kZN$-w>oM3XRdCIBt!@t^9A@{kj8~M1JcaH+6^>u1TW0`M z*OBSyO9;oOJ~SQsA>Z={7G%y9vl!O8d+S^e#r5ep2}7o}Jd3f3BrPbAA^tKUw{!^;f!XS#?7~RlY=ZdyfB0_@9`zcF zy2UF)rKKSiJ^u1k!ZiAJu)-R_eY(mX>)?AOu+!;fIr!W`RY12$z1sHowwk10x)QFx zd5_a-`!VB%9l)yqDjq}AFR```X}!M6X_$+g9GJWT-U{@2`_pJHg{Zd>H=UptQOHqV zY&Ewy#0ry?v0`HspH|BE)%T@+?8CXt374!WirOu}mWWa| zbYP3rV{h2vg1)q)zG_N=9vY8Jhk4RChcxZail`Wta($eL5HnkRR>{nvamCQdf*dVJ zn83?G%cv~->FQ$^1W#0MAwo1qW8BDV=N0??L8uZzQBau5y+hAuQI`P`m!ggeT;(q? zHPAF?;xqb*Z=zHVsU(C|-z6+3=3qvHed`tN|38}E!mp{vfBz;#RFom82q+U#P$>}* zL}1e05|Sz+-JM6enY84jyCjtuoze}$=xzp#vF+S@f4;x_KiK1($Jwi{>v@R;WNfP9 zdwyLEzC8%f&=SCD=9@nS#s8CGLl{$5;I9ZSVg5=Z+bn|Qd|*$(3F_t`kwvlSmO4fh z4Sj%0HsPb^a+%(ic0VO7x0j!+51ha?dPF$7Q2&Unk zt|o~k-Ve|w4Jr0~AgLxLc6f;5f3mPDY1LAENZ;I=DRzvaxsm3H8xtW!c7GHDtY@p= z%)4$p^t4ik9kSAXuxGOvI$T+Qxbx#`tG!b8#EJ;OKL``O+^yQeT%3$Kc)D(?;HJ2+ zTt9C)7Dv0p1FKpdJyjQJrdXOV0K=x)gJAe{%NS{4f?aH1n|&>fvbQ`2iMP>|?TDvY z(1*cJ#YE(}L%z>iIUDHlhzn3&K_!4&3z&8Wahku!jTVRP@ljVwRW_($;f;?>mN(t{Kw$C zqzO8__jQD1XXA7iznB$9b|pByBY}#`aMeEgOLA2x?ZBu@l;nB8(5B8$HKvj7baE0? zM%6p6OfWnmFKoRKtJr-#n2nZHHy>$-p-|@_9)@|&wGS29gZh)w$A)%>iIrIMX)YuF z_jTvT~B*QaPT03u8CT zjRbKk>uz2+NFem;2V(9c;ji<qXAm};7}4C8kkf97*v(aYCg+kO!SGdg-_ zU17;@i@VbF{8iU!vcW>La-5;F0eIosvdNn*Kw7H|`3fyU?2Hn%g(a!1r+)flQqrxc z5{P4EYzDM4dV=XOPG~%tP?dY#PW29su6hXjV%Wj&?oVd7M; z%*Ofb_HhK#Ub`H9eY(d3ZkPW9g|2*IbPa~F+B)G)N|cQDZDp}umLLO^L<<}8I57SW zh*H4Mi~Cc5Iv7&nwS}ZpG6*|>TVnqlK~ zRrS9LN_!V2VbMOuwJvz?D*DJ zL3XrKwu~P~{rlZ=mTQ3A=d{)X%QmFd5cef!voDn2VKk6m&mpRtYlZ!4i>q*9K*z!( zf3U%A&lN}eI`NEd0@BH!TDN^k*&)+M;B(oZy-D_kqbZ_p+-9R z^>VJ@2MB`p9q>T3Q|vCmd8tQ@DC=Fj=Xs<=LT7{Jgo5WT zK!LQSg{p0QxaOn9v4Y};o}9fs=nzeF{Gd=N(I}O(#{uL?p#}SlqppR1!VQ>htLazs z52OA9W2(PDEM4U%i#&F|KX^9ONawU|&1>iBxH%E%u1fRXg@gM2g94$KC2u~OJ*A!= zaVXNa2JHPGkmVW}x#x1`E~8gcTJlRW9Mnh)4D1lbw>n#2#JQ0fwj952Wg9Z06MA}E zuA}Ct!T5`izq(IrMf+gF`(fN+QBT9B7$VZTAa8mQT?Q^)aA@k_TXwPg1(?NV{W5x}-WdS*l;` z!-%>^H*6|nf*T_8+?8hUui}HruCQ~SZM4p!V$$Ay4+S3uziS6__#Sh)V(6pU-LcBcStRPf5JxqgrT>K#{?;|m^vEmCA&8uL*p{I{0EO4`r~3XI_K%s?)c3xmge{tLXqe9 zl_Te02HQmbI%dfr=K_x#T(L0fH9#Js^5JGy9~f1PWq`SL)qoZIMuCAHue zzVAr+lu)sQU8m6?`t07|`yG1g1^EWV;-gxv2&gV}AW(T`drfinx8r-*y34<+o zor`X?f&g9?6pos#^Em{EkUxK{6E3&>R}PqL>$N#hI(Zuzz~B>%EPD+@wzSZcF<>bC z;iyXn{|wl%sq3WVp7?t=2yqvUnCSM0V|zv(9wIS){agDD`(;Z=4Trh#HK=gjb94aE z=(~vA|5JSGI@e1!b9CW!x?R(Cg?m%bMYxgM$jD=@`@J?CxJT6UFQ*sW#l_lI~WNt)KDH zjz>d)Wq~SBOZmnBzRO`7>Mz}0sUM$^CEHuvz8Q29@yf9v*aotZWS7QZ>gqZEY+>9_ zS4c7_*Rjzu8!PltGONd9k!$e1^qV)|H0IxBI;IIWJqd`Pn|)9&I<_W%2kvP$Yv#L&-!T7tRsvS@Gd-aK)_5YTcdOy4=urm`j^>^#wfc1;78}xynqtmHo^c>) zi#sXEe=IChbo|>nAQgRQ0vPJP&8zn5b`|{w4%4l4GrzTiVYB6HcPtl3Vd?xmnHIpr zsju3cYaomLmXMJsON>vKG8NA$i6BRm2Xa$W4R1ATe7eJ<}O;mgCXEzpuGyrYNnEiK2gjs#l-OGoNFuRTfuxv?ox? zXm+!ahVukDjPzV%Ed4%}7#Tdja0GF}1%VIELm)37k4>6f(C@J@N~o=XhtiQT>H2Ks|1exwCWUY-s0O8YNg~&P2=BsZ%;Zh%JiX z_b_l4jSaEEbHJWy*qWEAt(LbO^Z=Hl6^nM&fUW>`{1cAJ#?u}8plIEDT|{pW3A89q-=xTIW1Qw3`i=PguX<#E97&618Bj1U|fq! zuw(}qJ)(aW#4% z<5qbTGV(s}3oMa3ZxXC|FMDt^Uwj&-=lGBYatHjw9Af_2o5Z36>5KPlx>Yl+Z@4?= zOFa$lFQY1a4Lvn&bV~Iy-*A5qrEWd%_#(4y2sp3fm7!YpLgx#T>>ATUFv-d0zLaK&Hb3Vr#f*0uMh(KLJ0Y1HjA> z=IwW5MmDM4lUy$ghf$$KP(yh`RS_Z%Hw zgH=V+|Mx}w8Sp#C#y%v?(2EX&TP=QlaC0$f_l;IS%czzCV|m1LIhO6`S5eU~-tr0G zrdA*cjTADqzuH@q9dPXm8NzZ^g!1@(hsC;U<%WK+#woft@IomL!Xrq=>y%cyFW5Pd=OO`(zT5 zAk13j6Z2o4VX77m3B(?6FQvV4YGX!=gQy9G7h*~}b)2l|k%5)5H)eLt29S}MEkke*e_-Gey_3;mGss`^DS^RP%QJECsd=trJ;M55Pz13T9UM^jh% zFUSJ;5?f>yyW}ME(_8TIK(c^-xrT9p&uhq3_z8QBONXKWjwAWmO!1$KkZXq*AF4@_ zzx;2{JY$j-=a<^ETS9IHiRiZc*z|;9d&iA+2$Zksg@U;DY=O;_?_)^XI|V0^37rk{ zg!rBJtFUFL>FvOqTKN9s^Thy&SMJk5Nl?V+uP2emGHUulikM3>rGV!+LYQV9wpOxv zK99C9m2jq2sSzgJ!kONzxab%ki4m-6ngfqi0WPi&ILpxDUuHuYam}anpn#$C)*2DQ zI9uS$DKS!$#`3nM3E#!Ebxug0Z6;Wf&;^=b3T|cfm#HyV7d8{ukZK-_#xEMdWj8WA z+mc$RF=gOLa4S}E{GNDag>w|Df}%f+@LT+!U>9-e#e=5u?8iVM6iZWRBTc)%6vtwm;KS#%uK7tu zKF=%D-)G_(eBzz<(`Ld-b%|?3G90sH{80MM56_S2MNZvYm$~sUDherMQgP|JlirVT zXC)_#l&pktxX78V=jq*E-#p|ZY^fvEf=xA}#Aa`QZ1U;RYbXX~oX1uEO*Lud4*mZ7 zNEq7Cos@ULx>N}Cpv3Bw=_Q({T|R9{tQIN;_qYjas-a8TZ@HdB}u_l4;%K$SlIMgJ|C_#kstf9ejzTfK&$ZouT$7Ca?HC1pi%oM_Rk`ej#nzofnGeu zcK5uV^?u#Ko$sDbW#6_L9ePFggl^|QQxE7U9xF4X{Q1uxrA1cz;(|1*C9?<9`x0Z{ z+|nDj)KUumu_ozKz1t^ummmoTuT1cLeUJwaO^+WG!aE}%Z>@v1oy@f=SM8ofBTcn5 zA{6xCJ)4<0h!%b>Z^}%*M4u@euJ~%nO5lJ6UrXnKGhSPgF5Co(7L^z=U}a;pk+_R8 z5Pg?X7Se&jm76t^gQ>mp%GpH6(k?g0X&DXycxnJ@$4b&@k6KGk*$>})OWEyHyy@NO;wnc z2RV0W`0fQ8T$bArr`27aB6g{l`O?a`@s=#Xd!RP_aU*MjZOOAOWYM{PnbIlJ0~23wuO?M|s7gI*@K%IY zE88!c)X*%!uN%T}>!NQJxil7S<*D&8usw&&v~r9aLKd9J?)I1_Z1A0Ab(F9l!l3RY zp(Sod3p2p<1IK32Iet4GT82M+20kmL8EK_P?$y}L7HwM#Jxa$Lo{*pP2Ig(sbi3ObBo~4!n zY*{eq{6#lZOX3Ns&L&ju(s<`R)e$9E5V)rd!~NIdeIPKHeJPXUnHn7FR2zZ$mRugG z?!OSF=khdBfDW5{rudwgf6xJy<-CzE?k z-5>>+S~D>}(%|T=2&IJS;_zLxHf!&G9by+>E22i3B(RiR-#VS-?da(L?1*5>uY zTJ7leAipdkYd;^%n;B2FG!z&eaybklb5gpM6;*gvQ|>7CQvWHim@H-^vpC$cJ91-n zzQOhUI@mDV%zBMiVC$dL&}r89pH<92T0T5NH94!-O)C#t61z|cf9KflQ{B}c$A~Kr z{Ei6`G5Y0vsgi-*rpZ#dg}mT&pA?)Kr-*ov{f#C~X|d{a<82~f29Y8IXUhxYH$5Kb zx0xMhBs4XISyX$z-LdEArqK{Sjn^Feq<5cOU^SXS^u@pkoIJ+gS4?g9p2RQ5n&yVZ zwx0;WwR>sRkAw>xH-Wv=DfHylq!dnfx%{`&MqV->rC?KcU+z+Gd8Uj}uP+68u>;=X3GT&&m_9##ms%|!~ywAW(#*iJ8WRvcw zopAz&RY9QEDgk}f1{HfT6vV?oEj;}Zkg<5GDRTSh=v|rUw<6hyKX?aL)1wrNN}wgY zxiE?VeQgLCvQ^PH-0b)wdY1Bl)=r9lIe*lB^?refrZ*S^b(Po2Y7R2sT0mzWI_IZ%~ga0 zWPW&h3sf6Mx}o$FZJSPAfr4r@Q09z1?&pF2I-WvcLwsL#v9LQ#ppJOH-f6@It(C28 z1T6OGiAwMBVk;9%iz;B9vtC*yOIL`@is}jSUgfNZnYbTwuenX8X)ddfq{8;RTAC47{qB^6n?0r{nXEvZyNb3-}C@!Tm|a{ zv1#3_9|>j`H}>QgXaGzqY5MSxtDV!=9m)7M!$Ug*Bug-3rbE#j@)#%J=&Tg{C!xp# zxXi=EK~=x$??Rx9chvi4!3(Rrdv5|KNjdeDQ*zwfpC9ri8y?bQyPvc9an{lJvQ@9B zxThQrrHgvOa4TILY>vqc* z@3QJ_e9UqhsqMvHcewDx1K7+(@;etdy+Fx{I)`UfjKtr5(gQI%~F=wmG$^u}?w?uQ*A%pdhw zN&P>p;E1PrFK7*Gksg}qKDO|od0|cN99WzB_Rr0-z`accu-kkh<~&wV&RVNh*ni#{ zIJ10}C2~hC9qti(gWzZuG4TzEx4(n)Iya}dS1WhMgQYKSyBYcb4}Gf=N3V3|u#4(Z_x>Cr@HWTCf|Kq(>5D1TwFa@#r$4Z<`qadaEmQ`9 z*)_N5;shnNz(g)Do_X(nE{k*Kg|sk!X}b__LYMLAjsB6?_Dlv49YV-VrLeVEc;k}& zmB~uK(0Weavf;K{u4SpzAC*t>($bug8%I3ug#)|;*~hxg@yLHW5ZOOBZCqf|F*z07EUbR)#nqr_}@8*?{hb078Hy==IB5cM2=5kzBZa|{6 z{X){5xN^Sr^ynRO3&!TvXMX6q!_JgkFxmI_4))>r7UT;qh?Ftv%!9&Ot_p(I3KJy> zY}M%~>KOTIn`EK!w5D-?WysYt+Zd<1F5^3HVj!>`70&$}B1M?-?15cM5h50Da`;43 z`27`qKgA>xSdRMmlwOcbrsdjwzh;(4W3oH#Bn|4CGjddQjIv!Hf|E72g+@F_?T_v- z{8>+!760&6+N&lpzVvZVPJjfKGy7ZhGlnF7tDE9Ca&>8-6Rm=1YuIMhodF7`@t1To zCeY=-zakS_JoD^ub3}&zFM(JLF!}cb&E$6=gSmC6#}2vI9lPG%3l19cj;O zuGDWLl3WkuiEZ0n9^ksPaKmT&377e~1j55pUR@bHehtY(&GcTkN*CL?ixrU_S}72b zmLz!0hau>y)Seesi>Tl3`Z=WkQ-TXUBc+O)xHjjPE<}rW9Ybnaa{&SD0Pb;qA28>- zD-sI2?X5C5w}J*}war$r6Eruy(66)g`LpyEHIhgbD~d+zHYy$Toj0;aO}$oB;!2YZ zi+UN0AwoE}Gg!Bv+j%0>+k(Xpia=A`)>F$7sTD-ApmXx2cF`r7-$5=K?b^^CW?~Eb6M3bTkq-)`o;v|gjwom z2q=wJV0Wk`C%}zw9Q~>ezfTeOR6UOy#2kmJI-68B#IKfT5gkuX*sT*a($mACxMt2i z^hI;Bd>kfM!)#d-%+cPo>kwPc(awb{Qj8wV023=LAuk9)&HH{_uN?>+j=RiqNd!Kd zmz#7{XChctOQlw5SVXgm(8~nf#UA%AglAOd4A#wjb7#;6#J_PDZ-f>6j=uepOy(#2 zS`YOSO&&W_wn36bjO1k?2V<_mAxZ6(?@q1GPk+&#d}=YTI=thr#JJ4amUHd5$e4Qh zkEYPdTshO3(O=ug&ja+xG^C(5&#DsD^C1!aoaH6HQD05O1e=?Wq3H3l@@mGqd~gGp=GZ*3Ehi`lEt*xL^p7GUkDk=$STK{uJ`Kb5fJ3(NAUsn55z`J$s z7V0<4Ugu}(HAEx-`j5)3J`PkwlT-fYS&z*b@Hw(5`vp=Ri!g~qrV!}jHfdt}So>(C zwqKKmYr^oT#k>4+vv;x3i)o-csd`Kx{BdZzgL}-PF$f0>``bsr&29pla;IWKHlXfB z)_n7mVWG)Cr`{cTa7gS7<`839VI0F9(>bZlIVi087dzdViI^}aRE`_z! zv8e)YPrv;&64*_8AMUSlu8}WD%|$xw_!-ML82>9Bq^!e~S2m|LRo&XY zITrI=^ecPKAuo|tk(H~o`8d6#5dXSpY{(0;nktD|+g5JH|XTKAw z)405f%i=vQEXwlSq@z|J0r-wqhwbd`9&m3XpetMD55Moo>plZ;Bi&;raM56qUBBd0 zlsup6O~W6jDH-2l#3ETXM2jk45z-DHMU6EtY;JswVM2dMUMo1523|`t28lW4QpqC( zmGJ!^MIeh;sR(2={>+cyQ1EG0t5~38Y}={fl9x{XwTs;!Q&! zNt0xG{KQ!b2T?`1l>j4V0Y3S#*j2mj@j_3Dqo*Rb_3UDIYLB*+;@)RKaQ%P$He^feN+<;ql`ko)goe= z3o=LVbG(S)(y+|7>E&4tsX~^pcqS0K1+1^&WW-h_xY_UwEk=6*%z!vQ{W1EG6&_mN zCU65wRA>_SadEvET1WmfJ-`FX&$I0yo>tetFLhnI!+3457_Z}f?E>Bt!^RtV0Xu*+ zJ;w;ffMFz(s(3p5RL{*;Z2RGe8RR;D=APZ5zdI1)B+B~nO5{5z%_9BK=tTA6F}MA* z;0kkl<$E*t=PACP+>~ULb`stR@iUdb$~b9Xp&LPJHrg)Z9OExs&$eaF<1irO@i3S% z=e=?;UzWO?JwJ`F|3kUB3}BXmVG zB`q8$*5w=k;N_3+6skvsv3oqWif;doI9zW?_!H!luT|I{4_(j8xG{v^pnF&DGq5vy zjKG(?OZE++AH(k#qFlNexvFO5fuoPKE#%#t_0$Ss|G7kOK=xd-WmNbaNm^Ex%sBc;Q$`nF~S;F8arHQTDSeSFN+6bTpe&QPkOT3?K_B_f{kVw0olVqj6g9IaL zFKp${@pUmX z`ndk_vFMMdS+@`5sMd-0hz$GBkpj_nzGF|Pm-pN(x}*2DPn(-AM|pfNA`IRLw$b5X zX~y86seF(8bfXl>t3Bu}P!37w6{?wErd#QM`G@PA*Ow|x-~l=7~acjG8@s|g^gpnou6Qh zaXhheft^;b>5LmM*0}$z1Jd-hbO6kG*0|?1C zyDZd(4|t$aUY{rQKt;)daLeDy>#Qp;@n!-EW-Qw@iCWo>Uo~JjX!Rp}R~Kc1*nSLN zG>~AGhoegfn1Tk!iFFIO$DdCk-f=q;Ti^dizgCHNMpw94V4ptT&CZN^!p5O`;cz=S zO?MN1F?uevUi%Zb7TG@9ccgy(o`e`-=1Dq4TK8#)eV2p!CZ8cX`(0RHF0GF+>xFiV zyrm`e(Xov)KU6>G zY+IP6H*){Hb5b1W*UzW~=uH{Xkr!ct(>jJosgoi4dZLXUTYZApC?74GaJ8F^l}dki;Z{vA$O$=1$a4pOFXB1pvQ2!(>WTso$Hw4(K3D|?U_6|+3psrj)$ z=SRfe`6$?YWPE@*-z73tZnJ-Q+y`n!6}J3c-26@=yjifp}JbP*pTaY=H8YYWw9NfsEma zu7+oj`c+42{0}M~Z=XNAzv@0AtQ~%ZJF;MJY*zJRjx%mfrsC)?Pq0(XubbBWsotw3 zWM2eqQL3*Qeaj#CO)_L(0p31C(kYx80wn2uZl!Xy)O#R$9JXyTM2ORMj^Pa)HI6Ua zL>BbpBFArI%e9|?>bcf-8ixq6hX?gN$}y{j|6WrV-w0fl0f&AJ<+nEs!Azh>^#e_p zXL+SOjXzSuF3Yxw?b*gW^a~K*BN=GE_7Ue%95suOK(u$z*q|3-U+-ikm=7JnUirMf zbFNz}Yaxhd7cg$27Gf0k6mMjyH<w)mSjHAsr}zsQyeg@Mpv}b0}6}jJK{g z^$Q89Ot!Uw>~-IOjDAO%zr&x=E;=p7s=)H+C#L|9@AAdUoGo3;HYK%i1clIcDIE48 zOADiV{@93F2!!4`7QDs7?FmAgV20i!ou0|JPvyaCyErNB$drq_$8I-|H&)Dg08Df7F!OoGZW$otu_ced z%8;6Ll^PH$iQCpj-4nx3WK|Vkx?lbz4-)4n!b_emH`3#Bk#l?FgTU#X_?2s>?-;X% zk7$*&!U#!W?-RrIT^>@(%Jne504a4uh&;^us*#Q?g>lM|3DBvto{85cUlJC0AsHAhJ0Wo;_#5# z8_2Ky#y1^JKZsv>GsSrzUb((r zx18i!?lEBHSp!=d`{|vhiVMe&^?R0kt4ww06=7Uh>yjPF zz2-iN%>Frb-x>K+70gyZ_ykeKUgl`X^%5X)Gb&Gtk;n21w9?d%oSg$v9UP4A7kUNf zxWo-B0?HkyXNMEA)(ZR+M40C7&iU=6O2JvrTQd{0o<5kr^L#)g{EKh~)z;15;LwWU z-M=d?5A;;Q?Jci`a@+Xxu(zgy4u)7`&zS&;ISwp@sh1D@}aC z_KW`;vh1H+8AL9hyz=DNLt#J$Pc~&|tevdr z(tbi%4Yn(9Pqr4`-7@yttFhRr-D~XSC*={uM!+tePOF^jNJfhA#z^A6%WO?l04FF? z#bPu6=N5+C;bxnbuD6KC;BI24u^@MOYN*xy;JaXP`9<1v{0evSb8mzDS)>Fc_5|^E zd)01ee|~o8`1e5SXmb-!KEn?K$MOSSU7F$@L~}1_y9>YgS2gsR!++ia=di--k(MHK z{Yllmdc~aE7c1qN#?!}SzBlj^vjIGjT`Th>)?PTw^-<|bz+b4J>AUUiiw3OIcTsAQ zzauDL99?GBD^~tj1kcAePC0>ZCoj+3Dpu`?p@SR#-PFxW)Dhf<6~$wfrm^>AUw%(S zo_&XHIUJ${rVLmO+dHdOjq#>YFi{nXo~@4;$ROW&FwiaiVhEiY0_KZdm~8fiGoDdRuxxjWD7R4Tj(g3m zobrl+$2dLw^;I!&h5{PqHFz-HY^YkI+QGc;UGT2I37zDOFeM27I)v^YK`pT$)d^XO zX|SpgQ$ zXa-VlJu|0gg7O^Q99lAc0KvNI%$%#3yr&_28GZ)}fi6r8HSE3)LMt8==J-B|O za?S3`wDB#SxHX=8+b!3}k!aZMyT*(6u}R&n$H3CqBu@4F);gHtTXhI`6)JmR#yt}K z07RS}+!u)wq2mGbR9Ox0u4jJ&v+4TBG})l=p*!PI7Z7E2zIE7mp|`r-(7WBIs<9l) zs()CifIeUVeA|H|GU@G}5b1$KfRSWT{zW0{o9JZFGg_eh&17ty(W^Jd*jEZGL%${g z(~My%16ieGf6Q$bN7Da>w3Zf{YuPeMg|`24>Q9xqqdxaijpd8nDa-An>Z7LDP!v9R zF{Ne=+x{L*HYfFU_2jP}fAUlPE00T=eB%4Gg)M(_o4q+y%W}14&95}ncxtFMc6X&z z9_9&u+ciK76(`NF=Ci*sGMP3J<;B5O?;-~7UC-omGrTKjameuju%HwvZMCerd%weEm&|J-8i#HQ|Qj`ghjw_$vf!SwA0%+lil_t@XL|qk;M(LHyDh_^AVN%wjVkN#FwB zFMk4ZlA<49TH$3gx(`S9Ng|i3fq>^gC#Y#$XmXg}Ty(w*d%U<4aEUm%0E~Q>-XPhLi|VFak>*~{buT=&Wq#1F+M`Bw;Q&=&pWr$ zI(LBO6r83U6C?!m06}#%rMH4e{X|qQeqMR0(YN`>_yi*NICT`draJKTInknAemKTR z!MkU?=*CC=f3@PJ?zNUz7MZlcFAOeTet6|K+|rrJX|`}R>chNLmPn20*wLrG(4$a| zUqzfzFqO2s_T1`;iJ6allJyg`T%&xSXXxvs@K&!YQvvRME8ZnFLx!-Xx$Y?jhu ztK;+$OTS;AkA9W$uleW_CO0G&BKRX))jJi-JI#97q+{UcL)nl8722P#5;O$bPiMQm zc<9@M5`I}>>^g>ck%Uvb9OHQh+3|i1!ejCSqv&TjckOw=ILcQ>@4~ILktt&7)M34U z4|aAgA0K!7!3rQ(@OcKk2;9u z`QL~bN$p#}L@|3ECs@Zwc&CPg8LZf0B_oK#sD=S2AQ^#NLx|9a3rFt-fgk&gr%f@! zp)?;p4>)zi=vIL--5NLX=YXk)iP9QXrRW&+Chkq}O*HU0Sm-50G}`1^e4jf(-Cayb z1Opu&#~@qo7R-VyCnRZqr6kutC+D7iVq6h&ooC!(z8jg0)p?NEsiHCc6$=^e!WCz^ z{g{+Hq+5>qx%TUSlb7!!8W>T1_^|7>p#R<1Z)6=`dm_vfsv?6=hUk+IeO`EXDY;bEgv`pkEh^6yy{pz=gR)Mj)w&h(FC)^Xto;(sE;Rh5 z1U30%A#3&YMlR;1gF zuHN0~C+W-#@u`mivX85EZDXY$Kg6fBNXm_i^psI zv%_+QvWP~ckx4=Vcx}a zJf8hC1n5V|)R?Xzb1`=H7f9(%;EZvfR6ac^2*OT$k5&qrl`zUJU^x)}KHr&Pc@k{P z*22TJ$6*8Ck-7oBwdz?)gB_H`*~pYWXERf$}gnA zKF=DT&!i6X8# zOlMhdrJRrzJ&I^E`TJTiFVUWvk= zqY&EvT$kq&YOQ0IZAp(;qVs$}h2OT&@h2vyJ z#S@rtA=h|*xZc@Dy&yy$ge=^A`{{DZc14wZ_y!hrOt10g<7M~JY6xY}_uZ_aoC*8T zUGG2~9iaWnXR#%dMq(Vig#~}Fe_R>5%mx*W-^kp4J_D}S;D=_fIlesk;XgvEB$sma z!-q+LRP8MW_Ro`-x#csW6bzJzLj#q(F1??3qA2DSOtcJU|9eXxuVBO9z4o#Xr|HkI z{7}!$F?XaXS>Py~FjJY+TEZ0^r~75cz@>P)WVZFQQPjOSITfOp>SuX&wp6-U|B}U) zx3Q;2qH`OEEcqv+_YvovJC6!z{|+SS&V>GIjEG$bN4q2m9sb=fY23(go-%Z!V|hYG zm1Bs(QjH}?+GxIpnVjw`q5JPA@qq{#OnB1C}bEEC#UT^n?U;4p(tT23wE0ZBmX^h`!837crz2i z^Nrg!Ki#5{spR~4a?>f)@t+l(CAHgoa838yX$7Vz374s^?4~Qt@BZ0*wZ|7^x-&`gqDogH*KPs|^>6#0gD>8KyEH&>TG zXA4>^W{J6(lVbf(czT*5jBZ>*d$FF;Pu1VPA78)64wJ6~SI;6T#>k39dG@qBk7*N> zQw4K%9ts&cM4@g-+YX1M}PT-#uY^c z;38KDydzRe_l1|rgB=Xr;P&mz;Qb8|LR+xIl7#m)uW#lTXzWHEr!}$p__u~bI0ZyNi>Lbj zx8WhnQEqs-R9I8JKbq5Ixnoo9D+pVjnSC@%JF`xA-RdX^G8e^gj#YsiQdqrde@B$EAfH*!C^q_S zpRDN5elXlJPE3<9Kzm`P7}K>w5@jJA`&N|gF6p)#qH$@5rdGE48#3V`G0FWuKP@mb z#mC{koY>Q@V{Kn*2S7RAC#DD|E!F5{h<67tOJ;{~g3-4t)en(pmkc92?S@uscs^!8 zN^Yk0Ky^ryn(X*WnPexu@Q3RUC=(#JQ~c-M+beJ5q@bBo5;^6Q(b_Tvi0slwC|_*- z>%_?rAy)fxPk1hCUO^dTFUnzp-;Kx7ssiRx=UNMebIJx|$@W<4!fu{2G;#lijahYF zSQKZ%Hjgn!Wi8krl!9iaU?rO#dlI4~&@;mOaa@co6)6wiEH^Kww@er1sOW`scJ)o0%3#3ew6nf>V2| zaFkE>%${&2ZZ^rA@HanSLPS(bN;Z*zue5=w*oY%nhLa)`qNhGx7r-%Hu>jwyHO=4g zHGhzeKAfA$Gd_YWew1`W%Dg{Q{dbdk1fTd~rU=GAj3Vi9A0(2*5~;_se&5;Z!Bxb_ za;3nlowhJY&Ij`_6x}swvmCN0hGzMqT)JTnDR5=mlN#^}2ca0}Z?LaB+Y61U;KzXi zs#i4FH`_q9P9MmVdB=Fe)Av*LK#`=^iF5#--0S1Mt~}x`F(}AD=FjZg)8j<-4S><$ z5_5WoEYPPCu;puh=uk-;fTlam(YVfVa)smIc30b~R#%Y^W^7@!CL`0hp5I4T19qGX7tPI; z5QeF7JtZZt#UV2B=#x?`Hf)w?l+dUQ67r0ueo?;=5ZzJvbk zeSeS*2x7dilp}b&k`s>lR_H7kfkR|{go@iX>@jZ%@kqlRYav|+Belt05}m*SjZ`RQ z0sZZ<{BS*9dl6Q5p>VIvNZIvZA_gW#}fl)-*j2fwtG8OR+HN zLvBp!_ENg+*WZmnmpwfOHm25IGdK&@YeD+QHCdgtF>q%=_i~~g0c1TrM3*0oUfNns zg-jOUt~_MVUarn$9#7y50GrDsc=`Kb{mOCu9f;;RlpzF6DLE!aR6EaQJmb-0QilvB z1~{W$Bw}qw2Nf2%7m&+K&_rj#e$nT4B@b7e{we&3*_s;%RFvV+?PRSAe#vn_cO05^ zlfPe1mmKwQf0k%Rjn3QeLI8M4eMSfUPT1pkf6<>J=Tw*_(=KZZJ|j*M<-bQQ;1)_W zvB;yWq`sK*S39p{~CK7i8b?CCMK$!~=HUd3t#td)eelI!&<_Jc9hwEksWF>_#@I=iU zC}?FlqBkqnXox^|ySV#1v@&1ophMv5qGL=kW+Kl5Gm>(OO1w*Sn0aglQI&&(Uedn1 z!M-7ZjSUwyXjcerp$0Qun;`YZji#ZictSheb?HepEl;$fZ`Y!Vg?OVLHjqCjIBCc# z`_54A)DcD0wxMP>>})~!zzwxU9$;+u>2ExfmibV3s^6E7YBo+&VXGy>hMJq)jeKi+ zb+z(p=afe3ZM~ZKylvRekXCZ`J2chN`Z*R?uf-i)n$0_C=SJ-ou ze`l-tdcYKZa$swms{d~6b3?Yg}|v_pK!`|$-AJCL@N%_e#k-Q!eY z@0$Gmny!wSU#C+-^s%GRSR!9X+Dmcex%GAl(rIO)6Y(E!vUn{cTLipZczv1Ke&Y2> zpohf#zIBCNF(^+`Ctq6+x!V@8XU!HL-mBGajODV(P}s6O-u~@3(^%oq6{ET3H^}7r zCrM}{X18u@GPC^i-_u&}E^3j4>WT^gS38hHMDh6m#_~zjxo&V!XcC1P(Vnr&RU$5$ zhaV*wRrdE14$ps~h4yS>3)>|F>|(;=UIW>d19|-|&3+gHlKCGDK)zEcn}BnYl=Y6v z#?v~?Wu{%5WO&@uHxMh7YXjlF$Br(~y;X-vgQCFivgXpg)!SbjS&+{v^=V!c7QRZ9#pVQ!{0 z-1yBAGSV~1N!T}IfNQJS4bVTiarvNSxD00x_rh5>$`+%^X>Vi-13^kQ`|x1~>mi7@ z6*TEW9o_$kYb3bY4z>S+S`*=v?kVe^pvd1NDZQX~%mR|HV?{R^7=`IzK2(G}4i`mkujGORgH*RvB?CqOu8xF0hW-#50*{XlM!KTMa6w5n}}x%c0LQnR_*`tUSseA zu8NrCs`p3+vo8*lDUKEAPQO$1?6L0S*1P&nSs$_P zS4BS(_odNf6d9LJM3X&DRv`b|^*&49kmA&x@`iQM6)x>Z&F0_y#}Ijm3M@{V<=<-U2u*@+?;U>6T);RO9u4ja&fN!s&N0<-&Im6;_BwWZaS7oT?Gf+!IPca{XRoYz`NizJB=)&MmHO5XS&hW$&m;aE)T6Un8UtT04TY{@wb2b?5ms&ug*zH{TrQ3HKP{KE4K%CO11KC?8;&}TY zftSQkq){2b9o@bL)Q5sJ2Ca-#bV5q&@M$h$<vbjuQxMyq0y>&Ek^3S(80I5Bg;kd9ldNr1dKM zI+>rj#?hl1MGCUtQZ$j@Sz~wekTR}F}%ZoUj`7 z!CJdV2CC*rG*f_e_!Hu^Ae+p6T$=M)rK!Sbm>GEWep|<3eL0ZtQwpRP0~x}=Pm`E- z)d2ml==m78SYE1!)LI5yy`wZ9Vdq*R7@)ku#MrL55AS^6@0e*~Y5!&xcDsE(W8Ont zEY<17&!DxV8IT>yo<&c$YmEc=fbM&a(m{KB)8JF@`%>N>HQbq$Lx|1 zghc~0c1S2&>`0F*W)YJ;RXAG`Mhw_J!t(yUo(Mfl0D3rd!pUXq+9y|?esUOZ|`O0zk+fwW~f{o=?)D9Qn zj;f|&V0~uT?{!JGlz-r0P1(FuG|UhVPwuz#a|JB$?mkt#L}uM-u~~T_K3NO=B%l(wYHyju9^jrDT-|F|@TcmoRb|{7MMf~x zoNA+YWc!(s=PSVxR^j=Yp{)}pJRP#9m7%3fL1%Z)oQC^PWS-Wq!g;vwx}5aA!_(Hf zLlM{p{s4Q+vc>G65K$&phgs0HW~t&BnE%zF`P;Q0GLrk-{OFkzp05Cg@*9}0ptu5e za@5};q1r)(QIecNjtgyoqthT-IkN}3sQ@i7bEju$qcz3LpsbsW>3NXbuIcn%Uw= z2RuEt9{r5@881k$mP!*NX~4Kv9f>#arc=Xn-(iPib2vlk@|1{4kH?O}WY~1)m2w@l z*l|UGi^p`cccD1%0L9860teekx25D*`SQAsIRJb~GmQGXD|m|=xN5#e0;szNL!_Dl z%qxCz!wL+)XLTpA2w$&k{_t-N~k{t{;+d{OG2wegtwSz+W#_GD9FpVh_2t+ zLSm`XAEp?L!lW>3oJ51ukO2B%5PSn2%tS-7jJvq>L^$9Z?F4#Y1?~)~VqwRID@Sl& znjO$#CH*1>!^<<2jiMhu2rMpG2r<6ZY!&i1&tL1Im+NCaYFlw*)y7GH!xb}KJ?~YO z!_WRO$lM^sNtH*skpC`keTPNVJU2vls$gl z>D>|8`$-}}GD^d}&%+e>bw})2tOfsgt#Gi9dx7a)t{NNAayK(leoInHr3F|t3;3XV znu5O4WfSrUJ6gAkU{F2D{b~sY;`?yTRbq*#RkENT_aP}G+&r}F3fuu)y;7=o@;G#2 zDa4O(Y4id_B?%0A%lH}+`(Adb4%#|F%*jW{`r&8SpCCT>!wI6@$0Yexi*c#==O^IHlVc)kDA_;=nft71i>P60^p&@Wd+jlJy!g@d|OK%e$LFLYv|$`)Tog z-0aj|GVSj5pbwJ08;&$$s$G&&S#QMht4wFo^_a=Y|2xV_?*m8MLwi%wI=gG z$(c*^>Xy{uwbTj{7aYx~z&kazJ4{L44s&n_yvq*dA^B7?NVj3SPk!3sucm-o|b{zkKXbI8|_4p^AEjWM;;+9{Q3 z+LmQC@fRUh)00g^8CMOgq`>X%P71+~U`Zblk%qlDDc1Akdirab$At#xB2z0i#H%t3 zP=#TJImRmF1y7z>zrj~GTAO-esGhJ#(vBO(-P!?Hi{oSmZdA{k^~2pEe2$%Cx((Ed z&88jHFgu`V6EWOS3%bRD@GMyMbG$_fb>8tfpa|`2w7nC+CP~e>T;~GJ? zz*lFT%>)iMe!4`ifSbB^t#$aG^peZ24tb?;Dg=z`&W&cYaV`0~I?KOq{Br6&u{bSv z1$9@o#NyUNCibS{PCuqZ)^R00KBH(G_tckp-tz?y=swJNJc<=?l$hBkpinfRVlpeC z&5hWB`G5pAhB4h})r{6%0oDjY(0-(^VK$qS*9;7bJ($5efWH;$gJn|^w;QmSGk3V9 z9k@fUS>9A*%t7LEApJVVwS~?OpSp=;(|5xXm|mV?dF&- z;8fQNy&skV2?LzG#MDtsGpEQVMZe4LSd>VDo*W@G1yV7Ac_CZU_N=runEF(ZqX9!# z@o7xW%AZj!`QdAbbckQDyPxz|lbizW<=uWr}*JB|i_RBpv zojDvloB&Bw-QHp<9(2Q)2m+Me=ku@9g{BsT-zt)>X0}szv*umckdfT0U%>9*4lB5` zvig`Z@`cCM$4srD*ke{daLa2ACZr%fI*dT=1}nZVWQ~idSr`Yfqfm?9Tl{fz$y0QA zL%q%whuas{lbGz1Y|M*|d>Q0ZO_vz zpS4RKc>&AmZr<;+vKxsqzVpS3axN!Kez~eu$=JtT(DhX!U@Y=XaN=5+vhk^4P}Hz; zcB%)*4@qoH*^Z|xScBu+GAQgW)c3*+6b4ezbk~9Xy#}c(0P>ZqOxzp%sq&>BnD8sR za=tDGCf_NCUo!^%yTAyz-E%jmu(!-V!Iv!P)6tmAx+q*=h)*v9Wd!S_R=oFGc z@uZqAnpB3jJZ$(;5h7n3%tq=HWMur&@~4~AaN7B>Tnu9pHuDs-iQ2jC9O$xK3( zkg*)%n%WskmA6hH>4z=ELAq*_NaaVD2{;P-@W^EX27WE0hnP`A)~NXbSgbgP|^9r$~6qod%?@@Xb8b%t1!es=oG!6)*L{T57L@-5oGT zd#6q-NsZ=P-NXF0Fi6R8<?U?w2ayg-rTc2bvkv%v~n)P`%tu5 zukh|@ARO=8V;!(=XAWm>5COYkR8;}*LNsIgU}g3py1G9LAS?29f*80-NrRQf=UTyf z>{gDp@^fEMosee|x=O7Y(lmDhpMbx5CV-+w(yj}i-??7{vejT=MGsW=(Ca&E5db<+) z5we3QxQOyv!9uL(ht45nCeYHgkLlYJI~mCYs2stQSqFb*&KE@B%AMa05e!qWNW>zJ zIBuItT@>F@1*J)T8liX3P_FPDUG{L@%;lJ+)Q@#&j8(ALW#A2+(Eoee;CpUdN`u3F za?4DwC_1NAv)z?V;l8ZGjyFASDZ_|#eH38jkF4XJ*pEfaL~q!F1f-OTuYJwHJe6+P zI6Q&AT9t6!<_GLaFe`qO-P!f~N*Wu0qRli!51)i;q0JML8a!U$p;^Lc8WhDPC& zsK*OC4rdP^IDLKLWsM@;5R#FIb@uDtg>sQq_&`E!1Ic={sB- z943_{|6aSpC)W7RcXh3DT7je)7{zbQl&EW^;iK#k1uMo;7SXnT9GkXKC3OqywWwTQ zNP(}zt~rYwnnU!YIkq^y(Dop+?k1PiJA`ilQ&3))$Ny&AyvU>(jrT1`Q90;Q=Q;1* zS|!?6J#624De`Oo5|LO04XJ|Zt$z`=uM+9Y+R2EBaQi~VpTH~u4%0F`W_v~GaNOdH z8!x#mzIt{T@h587Do#MyY&-8(uB@u7giG9dkks*h@ESq#u>d!I_c4ij$1ukEB==A- z`!jzJJ@3?;8c!_4i0AA z!#~jyF>ko&?JnuSy{^gNNzLItBX^BxpU>96pN2EFtt<%)59!unnqjrY2Vyd9hh2xM z!L-kkncKl|Y{j%R+scGvux^ejwee0x7kY1iC1nIn|^MAi+Vo zr0xxL^2^esAl9-@^NHTO@#Ou?TM`|3ZL62Yo*Mt-!LRb-*XX@XI!-$N;+8qTAz0SY z$9?P3bV>nYGnjypSQi=Q#U(U~boh4l@%;h@jXp52&T!ZS<}`2KJE}=a!}Ct~-prup z2ln#!ntX@2S*nKO*bM_#pep*(a@2z20^oyWxd$Zt}cml_H|(ZU3S z%P(LdZrfW8zI2)NaC3&0SYIv7=lb7?)cO=|mpDcRM6KGTMxKt*`xTmS`Y_R0J*Eqm zwZc%ZT>G5%q;~$t?z?b_xkt7)Dr7jNK1=bO76qPL6WsL8-j>s@(+M28aofX+Sr8mY z9m3l+3p}nG4IwJew#I)mcA^ zxLLnTKo6DFP(BiaGanDKR&QOTxB^sXd3{e*!lkx?_GcY9MyA!r?cT5xCqH^{t5_;W zqS`{lnM>Jmy|mgO#5g`oN4P*TQGGntb@SDCCp!5w?h1vd64v!A{W$G$LQ`#fQX;bz zPqq$QGhDZ6p`FjJ*`z6R&$2z!{*A|V2)}xDk@CzYiRz*58EW@S58XY+L$na5A9lbiG!x)WW}S+_oop%C!eG^?_j~ z=~0`}JWi>UehA?ow|W|1jO=-)Q_7=jzWrfgrQ4@wFVX7TIN$rIh_*A6S0uOA9CU(Q z-!%jeU6Nm-KhVBYfJnlx-^iRxU!Zlp&4x4LPJ)D@i)GKw^Nm#?AI&8Ay8m2TE9vQ1 zLQc>qSbx4@KXC1&e);<@6Wu~%#X8NzD>vERE=sI>Q=-ROPGU{a<>MZTd4jGXkqg+w zt~_f5931*)kw;-ye2pY*XtRk-uf1T^4l^?o?4KuRD4sUrZ-_xTCr3)}O%YPdNFZ+v zw6^(-p*Sa0u6cb+E7TIq{^{>=swx^!7qQff(}JrX4Fb14PjcUxK^ij&SGpMtS;x_J z@H+Gu^&z~7xecB0vg7&(-7}j*_?nrP)&?+&+{UP2W=~k0c&@6<84Ekhnm&80!N?%l2+YE{qCk*7;b3x%QvVQl3qqJ)Bf{)kdYH z%&-@zIPPEE4WTkU24Aln(jeEVbt>1cta2EoEaWq03JL<0-wG^uk@2 zD}0RunkA|Z!yQ84m+}FR2(MfzKpJ&Wv5A;8`(eXQkz)&mq-VQ-xT|_@J!>JVemv*u z+Z8()-rP6XYyY4>X!Zap2Dq6wFdOCw1)Pj-DM|2;%1`c} z?ji1{YQi-35bx8#zi3dQsmsj$O;l&87Q^3Zs@)G{%M-;N#@2*liH6H5d2+hO?G7)x9!pmAxFVaR145B`bcc46RV+N_+Kva$#-6_3zd>!|>D704t__}r1X z3R{KcQ<;Ra+*RXUT;@HYK`<4I7zEnX^u@+P&SkZ>3$q|;b6mea>SJ^Pr$KJ7Jp@bxg&h$oD&`BW4UC=#4hDYSvvwTO5lS)UAs~CF zx%*tfDb$i}=PNtCLrxmnIR6Hjbkxec%gU|ETfrlZwH<|H-t0f@sG-mOR%y1Uoii8` z*?2Gg*R;ZbYRC%}iu>d6*E}WqdJDlS_Bp7hE_nO{!>WTgB`>h28tO;Oca#+G*LBL$ zKwBCdd*E3ahr1q{uWg6*Im#ZuCNK%H3++LJujcrL!zyy=6Q4r6g%vv5ESXlESp}#s z+`oM^eq~+wumuc14WB}aJ79RdZ{e^*Q0_W{{<|4=UqWUme|hTL7? z>q7eZTIdYGsQquNJ)+^MQXGi8Le#OyYI15WR;a@meJh08t?Js3(t^==3Dxw7x6M1L zfD=w18AvKho8fd)Z{X{)N*rT-gbe%zWc8Wk*-l45)8nK=_(G4yhYP6V3lfF0*$~-< z(e;k*A?%*ienZ3j9q*qOip>$Fv(I>O&b%6)6$?vDYvR^p5rsHSf1Xi-2T9&tCV`bv~O2id#>=28Ssw4HG-62()}fFiL-cbxm_ zBwcc==C51#qjR9?1R3GmLm97b8YpgKc)hkU6f(Zx)7pOciRv-@)mp*Wr86|FdSL3n z_AeV(+dVk$Gs(D6hYQh2QMBc=u05F&`;~r6?hKz_ZI0f?=l9y0vYe0tRGTKj=(Kb5 ziJhGO-9>Eocx}rHp=;8j=XG zC-lG2su#QVApLv};;##|g6cczpI#cx*$fBGi*0QH!&B!jsO5P3KTc?#mV3y_QD^^; zk>}7t=6=m*uE<6y^mZ!*u`SBCzZ5;hb>R`H7>~&a zc2P*5)E@h|7xH{IhKKWN#T!NeG|z5T4KCV!a6{3!X#GT8OQ=#>(@uSHGmnanjTa z%4n$nOIvEivF@jx@#K@bd9Fcgae;s(Nz)Dw>bYTxc@@$+%?oqKu4F5J$OKJ4eVzvs zwGlb%a21Cd#hYix%-3?a(5wtOZ&`1sB&ss&XSGJRXfh<0@K>6o=<@JtnKmO$>_0FP z9go2{Mi_>@ZrLk8INkjms7+*y(*ohoQ@2EU3a5D49bV z8D@}S$TTy$Noeib1wJ~B#6vMd`z)Y**^6ygnYy=ly%Sq4M)M3K zY=!+=o-JGpdo~?q_gH8Dh{Ki^4{sPOMRRcarR%axyk%;b&bw`3tt(FD7gcf~cXID# zzMX#SO_a4`)I~_9qXj1t1o!pF9EU#|zA=0o;lx!1e*Bkc3l@{4)1E`5P2eS{bbt0F z6_fu7Zp?Xo5U$>fd5QC>N7B{D3poHE#O4IWyxVF69|b}Wb=rrU4=BlR_byz(SIOVk zOZvifQEVsmI!mgsI_mR*v2@mCm<@~;*xq3hjck{Sfc!@G%i>9roZENK|gWP zXr$%R{ypc@F->Wt&%ko|JBn-hj_3fJ*jm=At9)HYKsTF@1Xl5jqHR5||fMi+$tqR|sB*cBB^%_ld^RkVRo>iYb)rpy*(` z^EmaN&h47wy)F$Q^)s7I8R*yRFD)U`hA&p<4%Ql1>hnopKjOJw_{g&n{0TV?`Nlvq zedERazUErHDQNwot0VeeJrgx9%@Jy_E&mTxR}K78v>myVQ7NNW;ysgI_*j_XHeW}w z+)JI1Hy=@9nm$o>ZRW=DnI+fMJ1I!=mnf~pBL}J^-d^6U(knF7HXjvGRaObS@ZSb; z-ka$k+Vm>nZ_{9l$%v@)sOuTU0C%F-8;iG&w!W=b&*N)fSsiK4Q1ndPc2Gu5Le6zL zh?`M4gfjRoE?Yd)z6qej9iH5FZr$)X!Hol#!ysN8NfhHQ%vg%^qRC#2KH)97E~4GS z5#2s6jgm_Ja(NBsgzFRWznDZ%u)naWs)_+qE^$t&${P4x<}I`d1jve&D(%i zP`r(GAkX!bty8hD@pCvci8> z=tNB#@}WvCWEiE!)r@BTia<%*JyxRdOt;-o&SMTGfN&=Akd{$JG)6LTJM1Qrnyb57nvv{8B}i=Cm(2&C|Q z&fN;pnIgzgC3f87tNFmRqoMZM7{z>1-R=}g%4sJO4&lmjL+s=QP#>c&| zzC-+T;{UPOe>^)&^my<8z1+Y4QcHx76NhNKX95?&-2dsF6!XjfvBJN?>HqDYTqp=} zh2_lc8+!l0;|8*P?I-we|M}l2@n4%BVkX7ec9F2D_ZLynf2ZxgZ$>O4gXI5y2mke4 zmIy7b%*K+k=8o&Rzx97z@?U4Nrj@4opO!mk5JgLF9OKuqK6pOzAJ_h0OaALVo46lw w{ZGrC6C$Wiv4vvZ_qaL;0ZVS3UGtyfHHc(@&xCe*e3GTry3@(EP*9i#_f=kd4+}$C#1_rl52L_j5 zZ?e|=@_*-^bMO7|KGf>fUAwBSx_8yDI!Z%L0S|`~2LJ#(B}G{+06+r+07@hlvH@6< zEXY9?k8ED6z6O9w2=1*pIv!Js2TT5rRNEP>M_h(YjU2GHrO)K1PTuYyU!P;p6ut2VlT(YyUV6F{Jyi#Y zXPTiyK%%gTY1+zP==-lO)TlRmlA|N@pLG{lRD;cgyKpclF>}Xj7^+4;k2Yf02~WEC zDSi6Jc%j|j$g-PUZToe~{}96PTsc`*+0RFD_vTuL#3qwMa%|(;KD=Bq3m{TDdJd(b zpZ}gB&M5rxJ=o0~J!r&zYKS^F1?3LtSw)w6pWWn{ItbGx0wPWJe| zpq4oM`?*zq)&%Nd+W$G7RNGu}LXCH{Cv0VY`c>UPMX2`760%zPxjCWY*)L(_Y6nY> zo~nlBl|C_7X)AKuu}s=fFs_i)C|2W%6Qje*-sKZ5)kPzG&?Wvhs?rd|y6enjPyON?duHOcV6flIW0kD3jCo%1efP=u(e^l%X4POjw9&Ac*;JL^uiV}B=~h_ z|INFt4j#`?`@_(iZVb*W^bRugs}7Ap5UERRm9Do@Kexs_|2a_u^=}4ncMlwC+7H}MuH zlpEy*v4U(QlM2IoW!}QP9j9WMv7Ys=(C48+FO_k$p110$Fnl1D#W!HV|Jf3Q#mAig zj8zuLg8Ws7s zq2s~cS`)~bsbb~W6~`8MKPbuvv-ymCiQHWO^&8?OcQBNhOH$IVz$nd>@Psk`yI?TO zx^$$FG9&g|k_3`mz06U@b(kH07~!}aO2X%Qdi`bj?;30DxDCOhYS3iButUrWFMO(Y=Gg} zqr_aK9%(EZn9g&ooM)^h#Pb)zw%&$vJU`m^qY0G|LP|IZ(rQ?;p@d2#E%4_q49Ww@ zxhf_RBr~y#4s@JZ%Wr-nW{k)kH^<2V_nT^_B=st#!0!f^e?}xJNe_fmN|X)0V>Q%;kjgMVEdL$qKSSG&2ZY z{d)-AYopK%e9Ca5RCLfF0d;?#1-|c8w&#`!E|A_>iFHreaR_81@KKvjfr_U=5*z&Y z@t(`v%UPE%McNC|gA94lR(}B?B1n?gH4UuAyagLGXiK#y(dI(u?Cv@M(IhNMk&#)C zf)JtrKFH8YVFiT?0sz#9yf60R70?l2<=3#a4&}+sgLPwFF`R_Epa=j@g*Isd1x%!t zxlfXM(Pp+F=0(*JDmPVRBaaBeY0QLf=cOzsQh&~@NJM0z0VaLDP^kWrp*ME@OXv)) zQfN0Uf{)Gukjmz@nAx^l>0PLGb4lteo_R=z25-Z3aqX3dHRK;a zq0k?H`hnFgFSH|vS3ujNRsVOHH*YLFJugb`A-KdMB!>kyhWM5>2{fdHcmWFW-Wf=R>j8HTOM!1|fHb?At)Knt4v zeFui;Zj6;+I6VAm#Sa>>SSi3GY5vV+BM8 z9k3nLCj$Y)C}8fxj@k+u=dLJJQ1u7;_%~SV-*Ksj3_)3)_sq?w{RPw=KW}-)49R2H zLe%b`I#7s0R=+g7S6{*B1lxJj3~UjA+vzd{0ihr#G=edz4uYd|*Jkk)7xPw})%$CT z@~0ZFa+aR$UqLv^*MV?ieg z@iN-`9VsPQ!r-!<_o&K`xx>b@RU>mhMt*G2b6qAbK=ogPlLwOq|Aw2g2ycti82H?# z7O)MaUlL9bJ;x?eP{zVDP?-qTNc_xZH_o?{WJlz}w!EopxJ&rnTzWwqGwy=}Di1m_ z<2DVaVCE$|<{P4DLJE4)*YZpWBt*6%NHNp|6{X-Z+vO=fULI|(qSojQtP#&FS04;QAL4V9K zylmnV$=W}QQY*JEceb0quq25$&t2`mzB>FuCn3CwM}UR~V7LPVi*ZqQlH8Oxz`(bN z14KK1`b`_%z0rpi^Qj^gT(uO1!CF z)a7il`1YyZi68wqDDY{`<%fi63DKjN#eI`a6D!0}@rcHgON(l<{8?7@;RN@xD z5N*)4O^sZZ<{Y=B z)mZr;t{dFg~Uf91CKryrlD zm{yxAutimm8N8CTBzSEQuyeMWUgm;tEuXlXAPvI{5f@sP=MQu|O8sK6r|3s3+@@Pk zG)!BY7|32=^l2$-dHn4;c@bty;MA1huR|GUvx}lyRIvie9tX95x|2*+W4u>=dA+gn z(O)dVwOx<;n`7gx$7s|N1Dl1a7}|YGuvy2-8U~kjgw+Bi7@O0mo%c&c!CxlM9iQrt z$)|N4YX3%WXKePOcBU%5sZEL5pX+;2hSj4$Hx8LQ)8VwBmIIB478_=kj1yR+6)>P4 z4@22FvFZi^{p8gEeVUx-FnTEu!nae2{AG~iZvp!UC|XwzO@JUkZzPZ7tQ5&s4AIsh0) zzJEj{_bNLhRT_z`EA*TdPTS@8-evDSh!LC`9p}2QD&D3KH2s4-Na6 znZ_qvLf3QjH8SF##cyY4blb1*&xTh1EK*)xw+_&w5~y$U)0d%;aUbYv16T27T@S2W zsN>1h(cYLV1dI)agOv@31Z)1E_mTZ7XTYJ?QOs}Rht&`w+Sg_$`nCW*WPzVT3(ayoP@h=+(DI#OFex!6S^w$MdV#SQx+;FLZ_8zjYd`-qYs#8XF)(WfP;um#k z59={ww^ONgSnJOKx{a;9JJ+1OwCuD3yVN14GxRg~)Y~+t7Q7!{TBR%pZ{)J%^Al_T zvc-xeHo-MByEj>wsp*!N zh|YUcKOdv`J2TD56Oy+Zn&kcNqQP*-4f7$uiM8#@kIz|*yx6F4B{;!R;4yGHCi$tB zbvt>1C0pETGq3f8&BqN=uX$coFXlN1L^;@_%Uix%jxM_=N=2yk26@^bc;R4B(qj7|aS3}*df23S#Bc9%_JRjZ|r1kP%D zalClRo!*<+h1ao%;La=>UxTDOLD{M?{~PCrL&SYuWnEfD=FY0y9Yi7c&2IYE@=Yj; zin`ya!Gp%FLi+*O=hxHSV|VK@QAz5rOB;XoW*)V|w#oy1W-!j_5ELCbyAJHRpz^0D zWpv(3z2Y_|S}qS)RG4tTNyuwhG&`8(`%Ru?m*mWKN7uvA2LWgC2^Zs#2P#&S9f*|n zMMjV$ubZz+8if<#{BPO;+DrrgbIisbI=cHac05YoGAjT$f#m0`rs4o5=3PIp9=$a& zUm>s@lhM6W$zV)b@yD7QK9}X_eQE4mbOX>QnoL>;yz>;KdRNY}gShJqyowQgxKZU0 zw7ufT@RD@Re=Eq@hWmVqZ=_tXiE6&*T-I4j=cT899Agq@<)%-b*H}I@1>T3OwwbT_p8stU*-KsPcEt+)#Kecixsg|_yS!SHIYtYrKL z*KePb)FBd2aoR5`;jb?~tLm$tk>H2tSmDUzZ2XWEu8_R8zp_;J^fH8TTm^EJm!AHS z>mRn z$ZO-$PM@f49V2ao&!`z;QfgSqFo;ik_BP zPtMNNB2PI{ZBQ^j+2Q{hBm0Y|jaYIylv?o+&DgVmZ4`pw0^r8pi#qsZuiHXX4PPG9 zggI24zA?3JtL3g*>a35eq~R`{moTgSE@r51(GLkrttL0`3oNQs&uBOe$K^xEM)BLK z;Ona#L-l?hS#T7uIE+0pljRr9U#8{H$G|2TeafA^j*a*h0h2!rY$@U`R7?euZ)aQ| z<8pJ>7j)!Ub?|IC+csWXW_99*hdGi~Jl4aes_5S`0zk2$Xu!2>*GG#@E-H*w>wXrR z#Gy~~Y_p6WkNefg(p62NcU-5i2odJIqT5cQf@&CL5Q(ScwzOVaT;XVnPX__~^f|%Ug;R zr6&l<-lIl`N1ZrY1!0-tm5t(b2 zt3_4)l~0K4Yo@V_b}O7Y;Yofhp~!n?hIM64lBDl!^jhrS`4S6VT$Z3=aPwSC)MG6o zp7M^8ol2bAgKLvLB;v&m$V1rjlz6|me6!Fk}Pc53m8DW&NF3G>Q{FPllzMo~;ctR;RopQcvYc^WuGe^OjfP=LLP4hF*C!dqG4-vu z&c6-=jFT+bL<0$e%Gbj3@qF_@Hv2Qbme)n%aMqD77uT9~#gWGT9ml516dyu{`|BWq zcIKC=@QZKn^9v&+JHJvbHS;A|>~LHG9b$){mvTO6vVvzs;(#Et&2;3g6y55LCY95) z?%I8R`ErOBM0SN*#@XygLWksG0Mu-3{c9t?HDQTO>t&gUV6KRAYMIvuasXKcnWziR zn=SgFH%K(u<(w9wy~me~fDtE)+r91%kryy(Re`{=>PQ6|^L>Ne^Ash_&8u%HX={?f zDWuc1d~iq9i@H#L{=i4$r`WjlW0FpCgpzztXz!#Dz6|d)9x;Dv-$3!;e!0Af_E7qRuFr+Qf1U59dXnDOg;NXJ3i;`mu~mQ zu}!d)7)@EDJ*q}oT;s3lK>Qib=+q}+){V**Ic(7dN9^V=InQ;znTQYfqT{!A#pTPr zXf|%PHzgg(Wg{7MtI|-Z@qPPE-MMb~Gh6BmdkQlmBFfSxI$q#`GDMHfO8@zoKBxE4 z@W-8zXL(P{dH9Ypd7lv!9rd%C5t)_L&6RzMNsM4-UF)HfWrBn`f7hJR{w>vAcEox+bcI z6CBJ>N|(2VLzrAEy0DrlcBo*|SFKDVP-|BOTbrZ}#|Y!t+qn$f78FU>AQcAKk2 zJB~exOx&LQ>Vy;hTbfY0pzcPYy!Y(DiJ=pFChZ2TR&W#&ed4gVw;l=SA@&HdE*EyD zjC&U?tV7Y(>m*>VFO%Dp>MvQ?9{eO;);;eJwA!S@mQWx5tp85Q=~qeIuvZTwIvB7V<$?QY2I@0x_kRJhjTQ3 zS=9B(A?RVD-)k7f)7#RQ=`rxk=D6C;+v&pB;|o-mNAw0VfFN%Yt9b_5AKN&Ak8#&q z?HnlFa6&hj_b5Huyac1(DQ$+1BY~lW*J@bejG^HwJY?n5t!Kyy>=H^xD&`C1>He-T z=;CQSk%W2}+_g^E?DFZ}OcLM$1$P~>1t|;!EVZ%bXSEl7r(buU4}SD z3p)KxUwROr7fcWA56*t%U$Ayj06@zpsa?X7*5|G{$z? zXix`@8b8saNcdVEezk(C0W?iSmX{wcj4v$L> z6{qDnY#`3N^!BX(on8MYoB!YNCYn;mWZyXLe5O?;Q$^xHaRMMs$ksy{5;{`Ew}$+0 z$Twrnu*q^XX{k`28(gzyNg#oz7Y_e0jr4^k!e7~bzElh;7M$3f{{$9{a0j47U8Puc)L5w)@ae+^-HRyJ!UdeDd*_ zji1%(BqF;$Haq-v`CW4PiR^)E>9@F;ahw^^=$Eoj3J68Cq5t>R~q|z_G*hEG{55XoUU;q@vX>Fb+jNH z>Mo~_mvew8iqN}&)eFI^Z|1j;X1~HWP$hU{PaCkzfVmiyRe{Y)QwoSk+(n+#_bjg{ z9S|e0$oE!S5Mp>g0%sSt0Ppd53M_Za0e>cExWF;(t4j+8`tZPq>8rDzXP^7~;hM9Q zw>RLaLbc&d)u+`Qd`cVmKu5wW^&dl}624n&oiG91^oGEPJX3-}8rpK<;x~L?Wjd)a} zGJMaU+xy+0v(VS@Q45{uakP(6;_$D478r3=VTwRm#Qat3v`(PbURoa|^@6&ag04aD z>Hp14SC#uj{kCa-e$D)`fCoICc3T3c<%^k3|9`=Nf7Xv`J?!%$EWNVRkTUX4x6~ny zBM>QKzZ6M5gaQG zb`Yb)rTyRDWbO6qBG!=kgEB%OYeH(M**Rfpmh|R)GlZjj^G3LM37^`w28InacB)(v z_Zp%rZAson>M2DT>L^V>H;WrV2{P|YaSw*4)D~Hh206r1v?niZCpX+*JzS6dDBbcw zs)oCt{W)!j4Ss#O>~6_&^*Ng8u1fr&wfMMxd+fXYXtWIv*5&fqpNHbZ<7SBDKxoB>O%|=?sY2^&F{>g9b&PL%)n^wnp?UEx zlPMU$tmxhaij?iIrv|pMY6lpcq z*7m5Cyt<#`3yM1yv!OwLDy<>>%4Q=#>{D%AqqgC4i0v}g(4jLcH+Y(;5XAlX#anV5 zng_F)@S88?;pzpJUiHL!&KdLlKa@U*vICa}^jID8gh5ZSk^|3ml6^Rq9N0_Eq&&B& zC=Fj-8R6C%a$~)7(DvbII6(ain|LdA-+7~X z-WvuyX4kd6teQ#@--|>61_+#Y>s>|+U8w-aUe*-px$V=Dz>52fOO}8S86tg4f#Ad6 z-xBg;5Yl@Bz>>-BcNkJGr9Cy!*x35mq{TvHz~g!Xajhs7cJQ=oDDmNZ5aOH~j0;|EH~)Ha`SOdy+LFcYua0VJY~q z1Mxf${}h=n!8HE(_cS|_LMu4|a-HRYt^w2_et}&;%JWrn>!S|1=1qopi<7N28ytA1 z9;!ZSw#m5~dSmKeGWPK)ZPiU)Jp83{Cvvw&Af%G%1MTQ$B1xinz}0JsFE`wI>lDql zB!yf9hdCt3ZCZ&6dPq}58|Ofe$c%p6C5d%8TnwQ8NvjfNLq`s5ZMFcQW?vZ^3q%7z z*v}-god1--mw$bGg2W_M8OvuEHIF2KRkswOnzkh;0QqZE&@-9YuFCer2eR$BkWpGm z6_^#N=s?gK_CQ0Lv8uL}ckMXWRq5U}sBZAL6Xc)f4jw?C_xmL@ON>IEGsrn$cT=dQ zykvjD+1cWv=q`3D9tW@{1crfCi2P5pkpt@I1-_3Y@ z?J;;!f7edoF;sj5YIwC3EAd=D`Z6Mv9DxFF< zzxCkW=j^R+_xJqw{_%d!=MY6YxJ61{nbP*NvPYyVC=Qf|1szdHHKj@6iiY?Sj7cnaTGV~>{R*o(Ib5xdNSWcMb0Lw z5hn9(qPxka?eDeiRAl6^+N=EHMIK)gC1CZfeKI}9tVSJAbF%px>|w$SQxpy{TQus7 zS3kC&Vse=bjW?Dp2DZ4E;l;z1?m6?USCMnenXhtR9rp1W+^)L4!J1I|#`0BymoCvc zEJ73vFlh^w4>HT7#u<6^ABG{RP{#6Y&RaAqKLjUh@)VO)ddGH*_usxb`?Xo zmZjFSjiufz47;pfw0vtnhi?n%?b#@B$M@yV6y7}Km7VuW@UAqfctm$`r{DP-f6nem~>OQ*o+b3l< zeepyN`r*EJ6)*hw47X|S_1;#aef6@OlLQ0nm4eTn7Ksy5RxA+@EcUj3M)#xwKB51) z`Q;=#@bsv!@O=#`7kjC7d8z{o-&AkfV2&T(5h0?TSW=>TRW|zUhOxpC;~7(H>j+W~ zV-@u*GwX8r$V^lCmkKHTdwE$7r$w?nmK{6i+06H%P_fI7G7UTGH3bjA9;;NrYR#e+Xl)l`y3ZwZ#ByQJ?@zOhoSTqH~^f=V5;y5Gum`x3m6C2VVbeL0QB9 zACC9GANAj#u&$yAHS~JU{x7e2C+|a5w7tQ=a`S(%Klm9c1j{vZy#M7jpXtEj_IJb1 zUH&JF{qKYP=OY6We1jI}g5Ow~3d+aifCQBx zfklW=NlZ%&awv|k!5vo)A^ zZ;9eCX`*l*x!kYqtXAU zp`6^@=T4&R`3}B4^A2lfeZ$P9ow0Xe?^i3WgI4OWGLzt~bGS5q$if86S&uD)V_^9a zP6(>qi848O;CUkurGiz~Kedu+HC)mtdR|-Q8m!f`7=1DmGn`qgtivRZ6WhI9wWZ^__`1Q4TT%S+#p`$dV?9_j~$5+%( zDUPraH`m5r5FhU|{M-vJ3)MPellFM+uP(8t1;4#Jqu$B~zA9685kL0-@&X;W*{plW zzTwkmTe~=Wg6~%avu_gun81y#h=_Bfd`_10q-wTm_s+o){-U6S{1iW-?yXOWzCuWX zvFy0xE``}T5`=c!1odzrPV!)6p68N9f#o3k&gb(rrt)%6{nLdc^l;@sq?pKNI4;+y zU>I>TeB&yis^5?y{rGH^dP}OkZjB+d>Px+-Lh5Jy>`bFl9lC)Pj|z;oHKZSL{k*4y z*|7GSz_r5$p~K7PbzG8;tsdWPW1d#%U{0RGY!TG6WmskH#p9Ix3pV2c9E6BBu&s)E z0f%wVt;X@gO`e_hqkZ|ECbjA-qi>uevGLDI)Oa1(=?s7{*E3tXc|XBp^>O9l?!qQb ziRU>gM5~Ejf%viQsp^eYx+cHP(vW_3NkHlON?&zx?uX8f&Bejcg1PRDXAbi{45CRj zhz{KoXEiFEmKcv_j`k@V7&J?*!zuWjZb0t-bF%)b3rzYwDHL_uce}o=B^*_9a&a|& zd`=zI>|aQTO1uI>9A4pCc1`|iaiV}g@GzV1QZ)^+H*Ax$@4UV_=C;5>D(K--7c@eh zI@frS+mhae;6xP(Sh=RW-7V-7UnctCBnYf`+(MH*A>|NjLoP6r0>`7)e)P)g=wOS& z%yxWkurOnP<>)Z4^4o`t$u+qhAH5G~Uy=l?zC3tD>E+V*$#ZYhDDC;L>duJ-=tN2n z8s)vNh?CojOv4X|*Ba>(TB55N?BN#?RD^gK%l1ponC-j6JfBZu)w9-C<*r}q66P4v zTtA%EK{_ul%H16o_hl8FmhJlKH6AeEr>9oiDNi5kY4>NYgKFGZ zF52S)e4F{2{j`iYE^=}{U;nL=S){g8)QIQSXn{q4ZVNA&ztciasnqr7YtMuZ%VeV1 zY3-MIXJV=CXWC?^cszF<)GHh^i;9X2(F+gJ*SPOZ)b{XCDQC!qgI(c6zj5}Xf2(bL zeQ%*ZPab<u zP*m@L*;QY8?~$M&cYZayhMX%`xRw$_XvI<3qYp3niPDtN&g7ZQygX;E^n@ch-l?WTkZ9tf%uELP$xr-9KH7qC ze1G*V<>9r3k5iGl@!?|dpTmTYk2l;)=%_3D#5WJd0QSYIL|;>^#6i&kF{(=NV9{v< zD`%vZMB_Ii89(eGw&^Ces#pWsHH5^60P?#oWVp@{V@dT$jsd$TKKhC!Z&G#}xdkLBOITTwi0eQYUQB z@S~?L(@CbmBAg8XX6HR0zUFz;eHjEf`G7A7=}g^wD9Teqae>(;s#+S576ed@@TM&9fvomiB_KRFcK!!8-W-3oU+#! z2fLrAD@&lsdApvcQwARH_SYc00tY)Yd6v3u`g(dkf@7HS!)FZ+Vy%!s^DURf4)X7R zeOqAI7!uns@>n?R6Ki*M-YpEFueF$)sXd!<&SMN!ZW~QfbQnKJK~ycJuN41LR|MAa zdF{`U*a5JE4ZEz}$Rc9Z^X6u6LfY5tBM$r$!k0xT+U4(7crt5++j4-a(4;-$0si@> z`QEIlx2J`QPNnrhp}jGbuKA2S|7DP^?a2)qyg|dX&y$V?PA}0CgTvGC;I^7}I6dEe z#&QKA)7hTLO6R#inxe@iY1VQP9rq_m5dcJRc0OHs_gDWmM{m* zD1%MXWqS_L76%cZy;$dQx`91klLIG$5~7!tsI)(Q?WTb1O4U}nU&krF#r&HYwk>oZ zR!(U;4w@$h;QGAKaU{s7dwup=-W2kTMCcQvFIRf#2?V?Mq%!2<(idLpl+c=WscP<7 zSy?rjFXufI+?6=TqG4#8+BXwxk3LC$qvN^pl9tL;& zJrwoYY1SQ*H@f(%gEsM%0**P2eSFX!%Zwnq`m%$Ae(bX0=~spC(r44JchR>AUu9S4 z{5z8zswUGsx|Omor^=5G_ok8_T?)zbK3G_aYqNcZeF3+XS^?g{??)4(fH3V)re{=| z3YRz$L2G|4)vtTKI`ov1rjcLIsk9>p_i&sK8YwT|d(v=Gpeu@td+Sn#b$23iwcj-L zs_8D>sI(auRL|G*rOtT~r~me0BTMOs($}6#0&b~-vt=21TGbw|bqm?|g~Rm2(-w3O z=GAyHJ3!P6>&Y($Nzeblp@irc@T14Mmy^JKHICi)?Tqymci_H0ko$giT;IcTKmRp* zJhzS;{)rHzj_&~|Nx*e;(4_g9*E)6iS{t9y{`NP!)kZoK$FJ@yRdi}Pu4x9r!P%h_ zUqyYWI8WdCa%tid29Y|bdZOT0KV~PrlRh)OFB2S%ORtsYy-CHzglff8V!D2$5a%^f zivhJ#DRQ6|exl{^?LC@v3++X9ofSRlx;FiITCFKLC8K<;(b4nh@L(!E#@dd2sM57? zaja_id4vUB0DHEb_qQP3kEgx2Z&~mZ_Q8rksVtQs=*ezo`K#Eq&89FnqdQbj6)%si z`0%Jo6nKLI8n(rop&?!^pKteBy@s}q%=ateKPTOBiGtlQz+=UITpBy+V1Gs^5(=b2 zY}NFUx?bfeZ?~35nV|j;l&9jz@7boI8l-5~45PI&`hr`v%D&Un#!=S|9%i_Ps5f9c zaB`kO^?iFH*es0ML)@2(n;31~EM%4@Zd3*8)WHhJtdt6X7~1<)+lv zpYlM0I@}H61Nm^`0jkR|hf1-JZadKT*uY7iQkrg6e^`_baXl+;|??p@H|6~B58E4$tmzMorWauyH&I1Ve%E(NCF7}j1LSp&5 zeRXf{vkV9kiNuht3MxShC@qfW6sjFeoDd2Ig?i~~pQeqGoNlGdbzxIdf+L>)bUVJM zaA(6}$wa!7WCAM(!n*aEVss|wNCadbsUCn9=d&3_U#>P2Th+Rfd05dVdtbnzQiRqF zCBI9)-nsHz1_$BXwPB_&z9%jP1DE1q(mY7(weecJ$on~fx&SSD<8qQ?sTd|_o^ykQ zkFn61*z_5q#B@C7pF+6;!*L{YnsFOb`AFTrvm}tv_^WJ zzll^GEIb^!mwJUz$yaK8!ERI;PjL!aQ{}FZYf;IXqTsb@@L1&LC9myIGF{WHF`^5) z<`f*H`HCSZSxFOncBs5TO~8e*>tEEyA}L52zv4uwPh_hXHdPjUH3Hd>)#K*wEa)&r zW^CA;Tn{$-3*}ljEUxZJdPUlT0)OTtif?bRaOztFRD;)!BZ8mJlF_q_y3R7iEU2zCJa!UIYvJHCir zPk8&TJzq#5>JAp8XI@rGyFIcy)N`=LyT)?3q&5Cs$usy9|7mJgb;t=W;nB$I;GSNy zH%!AYC0jff4vWdrER|AL4ox8d^+5-a9itp*(7W}rer%XsM@>oN4(?@laI9h74C#I#P<6e79+4gt2 z*OXQF>caqP|HAEl1>_>GSTZn~`?y|`le{BIh5%r>6@}&TZKT{@`EB}8P}Ne&upy`t zH&c^KYW7A~(!~x6OM_Jb#I59D-R3s${N3d!~ZPTW7O@g{TQ zb;Bj5D)%j?)TyCwDNhm(*E5p6m#01lu|$C+!W^_2(b=#o2y>w?0qArm9aQH;=%>zxh~NbmB(NoO7p5VhqCRt2&Jhv zhc)}M)v58%vogCxdksXf8wJh^kuOPWYsY!=td#T{&CZ&D0)(|@e>Kcv1m3}X=L}7s zp4DEZ-0p_gM){Z_Sp8p38hr3&B1HEZ8|}B<9TnDTs-};(SpkHnKni*8sPv9tl19SD zOawKF?>#*KIj9<8VQU^JwuqeNOjm_PZ{|-QfpAZIP>ehIni|#tN@vq5{g2?p6A@01#V1W_3$b*k( z+@o-o-ZCdAM?GWqL<)dyGv+OYUf!yfi{WmKSGhNw#lC(&>Qw8JPW8c(P0%6nt@}Hl zD`rhi)2$?HhD%L5lRqcpALJr-e$F|D*!7$H(wD2;1aH4o_M=Zx*df0K^PK>IiR0p) zzqwZ*rvB7#gqc1ut}Llm7AmLZUdz^GbnXQ2s#|ucD1ib z--CZUDB-)g=h6J;$cQY!Ykxkle9HG4ryvuGfxHXAJ~9Xs2VCg72+TY+)0k zq{|ZmS^RP02Vu%`ubqN4C_&I%%@8_}6g=8#Kkw*uL5@9d4`)qBYWsF1Ok8s<3wJW; zr(-8Mhgeu+Gy3*gC{bT>6U@lOUo zC{y6$P^ewh!?yG_(YRON+?7J+la8~y5HB0U&3i-c#wRRE8e(*jlCuNNwYUtA_IQCP z=>+#>-obqRTl1JQS6|mY^qSoPu#nco6YonE6Mpz2_s5#l_Ze?JDq?Zm`TF*>vhou# z21M)rXBu9o#eq~ai{zfo66b21#58eDixn00PgVfJ5O)3kzBJQP{~80I1fkJDvjHg8 z{eWlBj8_$D#BZF~3ryq0YC3~hJFZG~!jgO;_&Za`nQeBfY*)>c7XXV!01oRax1WJJ z5(8hdXKU1a$DJ`dHs@DMXmEa2!Z;k)RNbgRGWDpb<@z2wL0Bg$c9FVM!pzdL<<(2H zpYc$5xQ^7#m9Z+LmKWF6BLS33$J8p-aanJrde0gJ{$=kp02@dUU|6JEFz-fFHRTT} zvsh3Nv_2~#_L+Xf=z2VX_)GDj;0f1vJ51aCURBMz({|p)s%NV8%sr@PnA!8+w4XW& zfEy($nd6#c=k`Onm7O5n{p8sd)f_>=h3vvfo|>Jf7kV1Rt@nkORp?}1OnlUIj$qSe z{lE_(%@_QxcIFP;6pvYSuSI*6@gD83(MHKMZS?Ev+SSHJ8ab?tjlOd0&FvO`A<2fZ zUNvRpH3<#O|MFZQSoJaxegO6K83>!|F9e+k+ZzBaZfb+hgNh1-EcrBJr@7fJT>gdA zv)Izt5nH3)|i3T>ug2)QQzgETek*`p)r3-akYD z@J1+iG7x<5*|YhwrBU?vl5ygVo@%MKIru4_Mk%KVdhQ0uVa)ZjTMpzGtoAQJF1u25 zRGqE;MzzFh_$r84?4})wJu2}aM0h;PTD(mz+nqXK>kGkv!Up zIDcx=_opYMI1l-yRg_wL1|9?G8Ezj+(#5^AXUD(K1;!}%64s{ouz+!HC#TV4H4!2f zj*ZhR+_oN|M6g-8Y5is)RYnrQ;qSHmeX94H8KV)fd{aU|0}wItmn z{_#ig9N2ok#<+Pr9r*nhJAhC|NI!rGD~Te$O7M103j!a8 z*8w4NbgR=HdyUo`rm@t8^0ho=|&Yr|r1@4}M@e^|{=zXlTl62YxH9LRN|QM8!t zc-ZZPKB^i*c1|03F4xJTUD@P#d`)jsX>3%ZO?iLX+P@n=B7o5ULly*7(F@m}b4gdD zUDb;2aUeLmX7R4jqmBbBacYhzgyj(9 zM&o`@rtOS`2+X$8N~sZlN%Fmr|m6PeoG@a64wqc_CrN zp`LDXvi+48NMvd6{M%zCl7TFj^-w4MDL7|^TJBNfn-md0QgQ9 zc2`PLoJFooSzaHEYfVSGqI+r2%`>ds@_!$pS}UF%Z5J zpbud8<4j>*0nfhH77`0i_mL0D6Metxc}9u=u?cnbsVkYLzTNUd+UxD@v;pk<+1@>C zCFx~cOA>di7`S1rNZtM&F;N3Ixi`eaKb#rpH^h98K@+hHR+(qO^z9Z^fV%>rk^ikw z4bTZ*!2Z4*@Q=!Sz^00A-jRa6Pxk@1d1Q>DPkPL4rPBLa2!4E}m;%CpY9CKdPKv7R zk#lBL(d9=p-CNcE(p5@gU3{0E=FZDL1JBeVjGu;-)l;E{%Hvi6gw4(9d<1=ZXxqHC&>8@vH z717uFsTAViURV#(#BXOgKMjnyw)Ng$(qeY@rA6qpMfap-4mH z;q>!UrqWgm)fSTTg1#oKBu+%A#Lw_!yKD<|CLs9*qWQOQ;Cl)|=--D?c|&JtVBkfe zI+$M#Ta`XW2Yy(M@`=iowXWJw1=IX-lgGC!Zi~P)q{P~p9K({XfY^6L<7)!aNa`Q} zfKZs7EuOL&C;H5S&S*H=uS8p?&%|1Hy>e6G?3b{Wdh3Ux!ESM{$n9z8du~Y|emt)D zr=@iPhxn%S5djKNMb$i=IPme6TVw784s%L7(>yh1^0`AxB_-Toa22V0xEgueLeIwK zHHN91EOPdWS&iVh6LMT8SS)@G!QYH|3m`B4YE%@lAr2?B&8}&1Jqt`Uf&lo}+ts~P zWWTq$v^rq$jD+9fV0UA+9-r+am^I?XpP#vZwA~;iBK{JBh$vbYd$S_g8!zMj~}aBG=jb=ad@AWX9PdZZ-Z zUR#g-Hm|R7|L(t}JM zMwQ6-LFa?y8q9Qa0RYmo?2mh9v9ZAW$SX?7yP7(OnvV=t>a?VxUSRkb&~C03AApIw z15I=7bz`SM@r}Qj3P*^PWM4${RS_f*(O{w6BFs5J|H#rW*AqNVU5WP`5qw-U~-Bz&a zmFM(mIP*lQBgX%nO7{$rVauLzU!T2f+(Xjv&3W9DhlGDxqNOlpW}e=nF9D~Ji-)J# zbtaAuVrvz`J2)?{y?2`@Uz>6_m+DAQPvbHMR`IM6*K9W3>K?)btmVpn`+r7flS^&%O&#H0r&vD)(kEK%bL% z1HcpVy$X=E!wa)DOXb>xjywj7%#;-)S4PT}KRlyk3%x4KIPW3A5WpUoEAvE-lX@k4 zwSpH}5Z&(@0vwr&P#l9m%>G33bpaD{_h{~)(7wNW51}lGT*-qr@jbhLPK8(5eZ{&8 zP2|Njfd4-^o(lWwfDETgVfKD;wkKwDj>p2>+z?FX?dq`4e+1Mp8bH#}YO@5mwmz^^ z$u@)KcT`RHB1yLn9AFyt3r^8Kfpa=Dl3pNeptP{?ALy+bo*G7*;`;c@v7id_qyI4)5JWqArH1Su|Ek()$U~n`eMaDqx6- z;)li5|C{e7BEX&nq5{7#PnGo(e=51R@+MiM@mPCMuk7aQ@weQ&Evr_$k?65wq(Npi@WVX@glV+H+41 z6f#o~Kmf7bLbjHM>G01n2Safy#l+*&6q*0fPrI2&ma^xZH8JSrY9hy3-cir4E)MqEHvs=$LXgV|B~Q@vNdZ=$qD-v6PaZT$V6wTvA#`uT zrzMWBU$NW(&3n~i@_GZVu?ZNK-i1FTZ(N&hJ=2;OHU*~GjZJj@8=x$TjIpk0v^53) zf==XY5FUoYOkmI#<9bf1BfmQ@LO2jcO~)-e$i5sDGUUTf-PistTqB;rsFNOKu)(t$ z3yhi#LH&nbWv%>r6T$+?&6eYqN8dEhWhAfyLh9Y=4v=Q4Wo2dAjay#GXe2#ti{oql z`spox+~*scy?I`}uk-i-)~!*;4~QOFO4ntsVLT!*=8UtK?Iyl%c}bS>CXjuc^?k>H z@E4&Hm{+f|P$}}q72!+WvIpiVDXvKH_tpA#AZ8I?rpG&XPjYfpxR^4EixSc+*76^z zYk#JV)xid%n^%dUS=o zG22hKFdz|2AWepW5}ZW41@J!#+dKg&5+5fCbVsUbpCf}?Nb--RC+6nn#H#jHcuE{R zN}e5|MXN@~2d)tBGxo-jQEm^@Vbs{IZI!6K&lFl)Ny0rlG1P|U7$BgV=iwKa`~!P$84vqJnN@5Q>rGGwEx*dhPqL9Z=KDe z^9aK%nItvhltOo^|6xWPEf=i`^2kYUDn9|}Pip10S9ASQJ>Dz|=%_=3=8@3QIoP=W zbds;Bu}ab0)u)P`O~O-Te?Nx5KOU6)>FGh$E*!s25zA!}!S*y-z`dj;mbY-UlE-R@ z=EN!TU{>uw_qi&-KvZ{~CZlNeQaT1`_Y&YGumVHYGXzS7@Sb%Sqy&q8T+FEm35~sM zCc4@@?8;(i*=MFk@thYQub-;HlD(C`Dp!j~=2UYCpaMPvJE%1IT?q4S#|jL>+FkT0 zxx$?9xS(ogZf;kU2--2b{cjC?fcax)Z7qi#sy@T2ULXR9OP3(dV|bW-4u&Zp9R>r^ z#1#LsoE9L&@<{^5QAoJ4JOa={TrJPj>0ygZB8SODS^BSc5eB^Ssm|pp>%uyqS+vR* zOJ+||qL9kqAWozRu#(5-e976r9y`6^oa<`EJpd07V2Nz`-KwEyO00k&h~&d~z-}nZ zh^qW!ibl)ivGry=96*u$_M;$^8rAt>+W|V4N!O|sCnx8}t~BX2indfJfnEX(fR<`& za`(m8U4YOfu8|w}eHt`{ONgZye^Kp$TCKpYN=3RP!LE9dsbbd<&w{@-STke(Hm%-M z>sdE#^I*gJ)awEnx?g`WaQItcj3UA9QBl;)s>lSCQ#tI%gG3HeG87bPu~S19d94+e z09HqLb{5D<&_R**9IMugm3xd;5QkVM>IzwavF`l*{NfweQb01a`9uz4)+>^Z&h{3B za+XZ~paY*D+RNCleSQ%mk}TMmk4}Hs_zZ?F7Uu<7-Js2ujpA2zW}BRBC8VFa@I_bu zQhNN#I;fCPIg*iwR8c;&O~t~(g63x}pCq2^&r6`r8HfYyePx`}mlkh$4wqO#%wKVh z>bMx2YITRRC4GH;*~;8DW6UYy&(7r(dP2i>!=WOx%~Zc(z_QDSlY{!`6>-M|$C-)3 zCQhWjMH$*lHS*HqrU+)YXVTGF2huE9OLvH~56*V#4cb9{R za2at<8dq~V9-`YeXM~Q*I~Xzz&THNCHSN&kl_oR_Q)bHrf&)|hRB`ucYq&FUZUl|v zysVl=n>GOsJGFv(197y8yRStb;D64(^udWS>xjZhPgJLM}O9FgD9euph>+8M+R131&pK3e1P4|pY1@!teeW?#-O^emU~Dp0@Sr_ zNbcD~3k!S=TT8Ha&FBRCrK`rt_NAtH| zUlY=^64RfP&1n-`9C&>TH0xhXJtA4P-+3r5N-#N_fSOW0l2x}_OZ;}DR4Fke6G0+l z(C;GHE-ZnWdKe&F>V`C?YIz@Q(4J@klZ)O<7Na?uJQksV!v0PLCC8iyiqX5UXT}fipze2S`I=@DbxGlh*w?UiwaSKthzC4=`3oM#-u1!>Cu$!yw#!;ez^{tovvJlpQm{5X^Q`DG>lDLcx4{Z^(zL>1#2DAsEAwkaRq6bdVATT*iF0)T%`Cz49e13#yn#ws0W~ zz9lo;5gQDO-gXLy%slDPtL5;{k(udN3Gtx|Ls~N-zt!_XCeV52j_&=;qR-CDC( zsk0lJn&Qe*%Zo5c@Z=7i^1;9qX}uE*|4}D)U%-7cjLmaSdi4jX*s0%!57ag=XMEiR z1#0MUe0{JS)(gq&IFY+iay3yWUy?=L<-FD)bK=$1RZd0B$9-vg-X&5qkih7T|ie(+4 zk=J8tnx=F1!5Rd+i^HP(TmdaKlc*+H!MkRm%xajsd^R}<4=1sFAs?_aRP@H{AK=d# zeQf;mE`ZTTVDj_3k`wV9q`1rTCtm>(7a%O=`H*-R`@K<(3L!4(0$W&-m@!@yo-pWu zUHhK<4qdk%_Z8~I6-ws`1_pA(aZXD2J70N5{VDe%g#abc>Zg<2w_N9a zwt%olKA^+@{qfxZIx2jV8U?0f-+G4afR#aBXOdiJ5`O7`SzI|(RYU8(WA^52G}@;j z@BIMw9l(@3#+D0jjk~W108NHjn?Y~L_9LNv;X?qh8gp$yB}6!rS`(n$i?(-C6^|bs zZrROeW+2-DF+EQv4%z$s!@n4n3s!}H24fEm8cr>a4!dYwcDcJq_&$zNN!1W2tMlfi zz}$kc(g!`3TE}s9fLWhyG?mL=f0DyJF561EA4gdzt2$GUq90+_mzhn304*bdNquwu zx~JKyv|E%3?HWMARO>#2Aqva*{xlDM{F#~iWTw+P4m}+9HlbbzyS%4>oJ%* z&?JGy2C&bjU!eU#U3Zm>Yae~}emykV{V}xv2Sp+z24Kj|E+X5U4^RiZJ2OKpLh99* zP)UTU74mhMc!EeQU8-E1y-q z6t{#kgBpzWnZV{9;ZVS0Xa>qLs<#gbm|S$UPLBcH&JI$|00JRDV5Jo3zr_JWZec*s z>OF+;vm&$Z$=!v#(h$H}7kmzQ`Pxu-B58p6JKIE2k;6|?6QaEm&mBMHB|JbbyBc5- zj>~P2l{hzRayizG!=#x@p$(~5(q3GmPEAMO0xURj$5v>&C@q}+ zZU0r%uY(vT~orFe)c!gE~iCj)ADd~%Q_bWx_f9%r-g@B^AFr5PSanxSL?y55(dlzzVDmf)# zZaqd)&CSqhcxWhOZh|An-kh^&9bxv|43p$(u8-?c>_wF&t_fM)72)t1BVGs)H_T9$ zIQ1()+!O-D&vFpI&{^O9@~j!CM%eok04m510D6`9?hN@zh(s?fEj?Xk{bKJSkYgxR zuZHJ+?8#J4^FBI6e^~~d=)K6nu|v89k1K$Kh3-ZR?wSJSfigKHcKq)H{rr>vEl`BN z?L6HBB)p(YK8Zn~b-nIfR!bW0-qcl>^fs)7UQq$PW-i(cF0$yVOiSvC7@z7#ExL3E z-CJRipCwL!KqIhg?U zklo?V%*;u_=I{o9*+GJgRm!7plmX6RIe3t|#quDfp#vj<5WdrmbI5J#0&v+sO*8Sk1W1sG5iW zirv|w_kpUlzosd&X5WY@bGF!hUiJ(Y{e2vQ5NObD4Op|y1wd|*y$|8_yjvsoQ-Msm zACc2?Al+oOfN9Ui#lgay(QHRZB>_pxG_A`;fg(S`F&5HP{d21Ky$2!n{|Ti_2$k+x z6KlLZQ&Zz2dV*T%igtZU-+bIje1&GB*!0`-{yB$Bz2cY|E$-d68r9D$t^zh4;%0Xc z&}C6CKkp%rB6)4!NE?|d#f@!m5a+gHJ;61|**ri>S#Woj`uc{G%2up>+jC#c6UeUY zIBB*jmEFxHi>35F=?G@%ZUnwAslh02t7tI3Qy9T8jc$M#rI6?w=v@Y$PyK}cyDfq^ z7!0v-p<5HiGRc2mUA;^M)fLIR4AWzCs)v(V8l{(Vyf$u|`-EZ?1EJHtn=YVOib3ptQdUVLRa$&1D>620A29`iN#-BH^@$P>IXX02vAOxy2m@# zLmDLujzX`c;(okoA`#N4rpbW|*Yte&febuzPId*DR|_eb4>wRFmoMbL`B}n+MV;85 zY`3phG*GWxNO9J^fFUD^%-dfh`}7P@et3fm3-$|XO^%Igo{$QW1KJ%`sPRuaFLCt6 zx&oJ5dVs0X8g3@OetkXb1;E>a4#Nup=Qksjst71G z6+tvnbx^#2;&dBw3#jr~F8H4lAyp5zqkZ8XyZ<*?5Smq|@V6C9wL`b!Q(-GeVv zO5mumAFHkFaPQ^ew?&75+z0ybVbu>+(NadpHuHI_A&BJa4{#YF4vZ7X4dZ%MQPBOP zbp^bxekR*tPNF<3#McDwJ=kVRR2Drv9wxki`c}w`9paHv>I~AkYo{;q-?&dF5AT9iXk6xr%+HH>Kd5v;%U$7hs5i z-mwKhk-sL@fwlqrNO7u@BDi^grKw7M6tu@+5N1jk9(C6)d`CPEJs+;VuHT(38Z@sZ ztQPgwmF+uJ`y8w-H} z@!}N85a7PlEZ(RDgaQa00=G&0J%sz}VQqJ@UoesSenUxKR<=+YwU5sc*v4HOtyWq> zf7RA1`C({vczC8?NmCNS$1rkFKYa2~6?s{WN+F^asLIkZGaGHK@^q>UKL%f>J#qx( z=;!Srw9TqH8wM)&{z3+Me513R^1O{8tRtzw#R8ZvTHtJx&QlF=uWO&3!$a0!1UV?b zN>7U)?g)T(Hs#AISlGIYgZ%NN{gC234?iwh{vdyS$-Yjv0j#8=d zf!99_5b*vSAmGP^AWQ6L-6KFf4qUDsEFY?+MzOgd3 zum}aMA@Y@)rlzLK0mb>(KbXlxl+WH^m!zYA3bt4!Zbf;2YvmM__W8& z!XtBsRYRJh*>w^w2#mSHq96*+ibvZ4VkcAe})}6qPS52SpwjN9(Iz+QcH5hz1H9Q>tjs%&e@!mFdyV zf+yNAb$Zp;dVKV)@8Xvq9tZTO3xi>FBoob2@)sJh zFtGT~PUy^BzN!w0m9tnE2v{7niDU4<#4#o}^)hrwF4!`OVxGutX8kOqu6^pkcGay)IAB$e?9cMryWN}|F&u)?Up@y3c_Bj|-dBo0s zel0sc#ZL>QRxc1y*Q6snfa2gJs3`a#y-B9@m6IDur@nzC(E7!zhpo-J@|)N*ds;{g zLgfYrd12>7G>-V-c@Sa0cl!m}6{y|&NsjtAF%P?HS_-=E0NXqPM;c8+V-DW9e;IQG z<9%$RDJe|y)$%@EOBm*ro&>iL5E6JWnS4t=Nx+$vmnVNvzL2=oS97!ZFl})`9Lv_$}|wfxIjE`bs@db1Hj6Mff$G5qh%xtMn~a}H(DX@+CSH!M}LN^ zrisEQy~eaBlLt3!wdh2Msx|2Lv$er6Wa2pr;8Ch_NW5s*cB8b&kPgsO06v9GA1#=h zH%b-K%@#!fq@uK^=j_(?YKZt|#?pFFI%@%hJQ-WZEHejzY^MarKK0d@@qIBg|EdJj z;~y@-0X^%wbTeA@zG4TG@#6;g*izUQvgSb}B?cBFL-64kw|XN|!Ko6+RyG-RtTrpT zc0crZ)4RrBC%vL@8Dq^&M>{E*f%`L@%)?kmC`*QexFj9m8jjDvhgGpWl|7B6b+j$( z5=;y92GdGMd<2e}T2fNdkqP*Ye=Emd`oMHGRAF&f zfPviuk&=WtK7N__D7Q)#O9BCp*C=9s=L ztjtbCF99mz6>&=&xf|-k6B5Mc6&dBBJp`w zIeq*5e)Vu~r5ONrMqrrP1z=au8A-{`xPsxgb6K@lcv5%Nd`~PgdHAADnXzlXLT85D&qOD z$1u1sZdr}Z$yZuUk265M{%x^;pt#ASEG9ln5sc`1{82?($kfXdHK6R38Bf4fGn0&S z>kj{rdm6s!y&rwTdFZ?(W#DCL5Mwe?;2I;t_1VtqzP3Dea7`5Jtw*P14|axN>_0RL zUuAvRSUgi`4Zy3OgW`kG5$84tZ@O5E<2(@>Fd=68+stD#{qNqm7O|d!1Bt*|ns*;S4PLOxL+Ku40&S6D9C$P}Y=OAtt+EI{Xivye>8{ zU?u#C<|d{0Hz2EJ0Xxwp0Cijw8K~X852*=8!Oo7LVN|6!AfHn;502`E9X!gk&cM_P zQAPTiMqpWB?VshuX<$KWEJg_|S1 zDg>ZHVMgU!J;H6Q1<&`PnW_gq{Z`9Zgwg^K<{#jS6k6mz1%>q!ujz!G^Sp0_&Vox; zXevKO^8d2ArWdO{@ObsY;>HPJZUNEY9A9o+*Z@)>C2T|q%k3v?qhRz@E;?}fDJn^^ zV==siBp@AwW7B>B3{+RK9iZmFqG>WXe=3BN^5*=7gO;mGpJewQ-7NI9evozR+mDY0 zJ>~7IdftNJd2>(vBIF-}`;U$2 zt3By!>U6n;h+dmYV0ZAcy-~ea@y-d=xayfM%A1Ri267X97H(Zuwo}b#qyNP~|D_m4 z|5~OwO=2q`y#dn%j-6BVvYh^#KY1RAD(quX5pLn_ZXX)3|(p+_V z6<}~n~ERgE;m!eF2f~bm2*OhyF3)0iC>T_uv>6=@XmU2_> z&M(fquplLBJq3`cCB!Ue*>3gq3|h;K^z<=@6K+H3LQ-O15C&6o7@s^eeyjH@?5oxr zqq=DQ_>wnpW$?%X1&se5VxR!;+y{bA2nECfY5^LRA{3(GoS_oz=9+5?o@o0GD z9B5ZsYF~}TZvof{5j_A>)dMIF<2~SZ`^{ZzfRa^vD%S0PseU_M#>g5FmXeuSqc?Do{qg^J`4}5TF@I9QuuZxr( zD4~Hq0YcDQu=kIHZn6nqmTjT$!Faf4S+Z&mpT3n}RpkknlT5w?16N#q*#+`=TL?VM z-<^y9;n~~Cbf3qgc0$+o@l1hr!OKuUYSbO62_!u!prd1)4mC+rG}af^v_`n1v%8%T zDJQ?E|IT!B*6oRk(a6Yyo{FfD}&oG ztPqtG5+qVUpw}Cxr0bZlHwhIi6hOeruAUY8{KMp^@an#x`B-mSKIuP&3*RNwFNBaq z-u2?N=?VE4|LV0|m8ER7_rGSzWn1{-&*-)!z?)FS5C+ovP9jBd3r7x|ssT>m_D@kQ zj(23S#bI#5h+(2_`Y0S=?xRN9#}m@@^6lE}(cNxK4iO1o_PIwEH=^>Kp)InOjUMZ2 zO_%@2su9E#ucv?!w-yYZ6-Xl)abU*O+IxOp{iQzbVIur%7umo02C#$~Aki9hhhPfF z_lOw_D_DP)1!3WDsHm}v2uVuI{Zet>4Cc!PXI>?LZ z`+R$x>py}m62X5Tpsd3JpO^W61q7hXhN1z=>}QxfQU2sFHIv7$FyV!4AsUbZ4A-i{ zfbOJ69?`=t2J%(+FEee?$BCI%?$kpk*t$E;pUm%0k1W;y9X*rP0)b~Ksd!GP|L6X{ z%^&|Is`xd3D=P6QTcux7FZcdZRtY6^E}b0W^FkpzZ_qaAmz?d_zhJ@^VfiwDY;U-L zl%g7nTaEc2*|0$)2B7CJ=g|EBUxlw4=m7^iJa=VXT_Ghu0HOb_2!4{5&mlSNFXOMI zuMQ(j1lyP2o-Y^aT`)C@*?)PNEwi98VrIsEll-5{b@Bt#f@~Lr7XMpo0VU3&19+bo z_w?g5qpO(3U{_-(!kyDW(E7b`|X2^Gh1Z8-?>y=If9mm4np zV1H2+wmDRDib8)q|3;%2`G*DTe=Q6@3j}lwvOK2+@RNYuO#ce+pWiZ&fum3oNM%$2 zUCE6~2{85+vMp)x;U{VMK32eNVn0fWBJ1xBRa~iW?Qh}2OY4ZnmZSYmJoqgW?=To( zdMJ>uI*ibU`~ORyfDlUt+`+kBjC2cXR+OI!jJbHAuVcUrIBxmqrUyiF<~ubKAGSwh zDrXluT|D?u3ijq}64Cz%h>`>lQ0^uL#y=1JuM26T1qQ%@b8Q3H%+3&31sOvL!5)zC z@smK&->E^XrX;E0b7LjhbNw_nMu+&X)Pd8(2Tm^n{r{3W#xLZ{H?q&hFm)pQW>5-L z%!otaeSxK6(C|sHk{Ox_B?ZCHAibV2EdyX6K|*4$K-utaD2FOl3w$0$EC~hKMc#$E zI_FE(f3MAV0l|!D0a!9nucw%X@XUuZht957H!2bUvi1blUUmFP3A+n z+OZ`Q4X`!Qv5Lb!YK`n7YM^CNWf;rJ7iYTE_UK&fFUrneX8@J@LR&ABT-V900Cq6M zJBA0ud01&!@_w@be?T3*4us~L@bn`)*h-lBoC?iTY#VB7!0TrLeg+_YS%+>ClF9zZgn%I}zz!`}M6wJFiE&-|gbMbg@YM?%vP~(YE%&5fN4yva z6i;zd{8u`7=~j;@b>slvJT;rh9WZJXF}LUU_WQtJkyVFD^ZrAkQpGimK z4h7MHJWNQ&U9^VG)q;@M1N=-ZJCNxPal9>endVEkg>a9b=`h{9$82m?(z>=go&N~) zW%V>YvbxtS>J}>0Il1vw5+fm?`xd<5XQ3W>$4Gh07lKU<=XMaxr0?KM8*~t=asROx z{1#A10QyQxuEF0|^Oe&z+6OanvHmuw^%zF&cEmk*^906jRUk5dGucl^N(|M*8j=G1@Y$OT9MM_AB6^c4GD1a%@##DtjvG`9Xc zU!n*La1T+;fAq(sS4{DX@)ie=yLKu&vSt$ielQUie&{cD5;!v-BPG}#nqbyyFI2+J z*Hz9h5n5y;G=>{T@m`3EIsr=Bg?VryfwmUOAmzyANcjYy**(0 zZUos}m<|1zQ~&GOTk+6`R!=v|R`uH-gU_DFy-c3ZV(M2h^zBI>Y6vj?9N8;xE?{d> zBBa0mF~qn6d>&)idi)?3A~4*d?rqmF?GEy5@+?&p4CAi?BXZ0E_kempdx>iQ=`>E$MIDd5@kcGr_3e?3YVGh-tn~1|%5wOkER8}b ztFc~hESzIia?i%-dRWAIDRmZde%ep-n1Kf&y#o-xB0EIBb_X7y9HyVW0H$ND;;JPW z%6ocO(o26-h-9dPGoMI3Yd(JzubWT5^9;Uik~fk*E?Icybv*_n>#opeL;T(t ziF<*I0iO(C=uxCnU(R@GA~0lp;N#7O7(fP2tKV_fv%*XCeDV-+0jYjy3 z`>kfSGr;a`&!$e=aV(^#lL$x@az_=`k?ilk{_AHiD_GEIrF6_CJ90(Ksv?pK11Gm! z!1ipHW+E6^^ILrMHl30DoMlDFW^rr2H&a#^$h|ONA&uhvG?W)cx$?>aAmRvHkn&oh zPlnnE-e~w`W7nRY@kiI7NAdy{Q)*&9(91{m4LG?Fm5+=e%I~kD8wphaJKthUWaBVP zVjb`^!qGNznCp_6Qbe+|-6oHYdISeAN|%k-S}HV1^7lnvuG0ceEN?H5B?*QN`XA z5vM#iQa_`-eKihanGuF2$eir1%Ri5){_>cmPx@vr;s!qWI^cVh+-J$xWf9LiT9O7@ zt~GT{v4pfU>;69H^;AU$XyaB-I>%}xjmJ8{b}4R$^>wLjRgtftBmVxhDT3UvlKXum z+3|Jl`6u>*=OBiHdUheonoFl2*>%#u?WEYC-oRz@6>7q6%~j=&nT8DI55?)WqE#%4T++W5UX< z!r$NdMbT8DPXbF+UCRR2e>Cu}LFBVMY9Q6Lvn#@krPN!M22kKugn4dd&9rIyfi}fK z^@O@80(ZNgr{*6eP`4e~#_hP0t4;>BFWSg^u~Q>p5HP6Ov8$p4=ITVy=)L2tdS`}`Xr)sVzUMp zX6!7e75}5mb=B7c^f$3-d~J*1W3Wr3Qtwit+6a+k*Agjss-Q+5eoR0rcEXL#mYKsO zve1-Io3O{PJRKO$b*ufkgEuk}AAx$HJ$bU=Ukc6#awg6wGhR@c>^C}6Cv9A*mHFYQ zxQeGwcA;ZnL_vu`YyqvdbP&x8Jhj_i*xPy!`_x~~YX6Gd3moR#D`8{52@Ddvz!ol= zDUrNRd$20^J&&&VI?~Xy#5^JJUr(K=1mR(i=0R`zzmaP+yaT7#F1;w>m&YHo$9(vuW zL8zIrpYrLHqm_IO&^BVSV3T5VgF-5B=x0tz%EYrS@>wCV&3xcb`3l3`&3xE(+`#3t z;=C~H!;Eax6aX)FfK1;?7jeZH>3w4UbC;DVRJ%3*K!AA}mNB>I@wbRFZeDcd!Mzv# zk7)@&6=duSsmNZXVX}g2pBI`Lb5YWz;6%~!I;ypt%sR7AW20EBh}C=`z*b-E7Tve6 zkCbHc0alF;Pr#DZutwCWGQ`_L8OT&t48S8axk5%O&7)gB> zwW0DAwR$KRAA#^+r)dPbtL_m1v6Jb#e@{G*-Z}-R6zT}x68{h#gD6cd(65)jc{Azo zJ=dAz;;~GVZ93u7Rsu9f>~-3JeQnY@9azY53t^Y$2QH?&2Cg_5+feqvG?|yRwRHQi zJZgl-)v@UFE|krgE+MnFF7UUlNJMzSjN!WcB4D>(_Z{PSN|XDVI!OB4Y`j9fV7|ME z5Zcr+kt4KD(}>bRZl&|o2(!`_{y0qZu;xOJw{=JHe|1=lm?6BRB$l*`W=TkWc!_4S zaED&+XjavU0)2ZYsj{hfU3U>)_-=^EX&F(xZGMn?&&~fLwV|bul7Lf%wcpjDTEgB> zBaMfZd;}LS%3D{n9lHEs)k+qmdR?}!u8*;|GOA6&f|i)Sox-=+`kbm@^IG1;V>QoV zuD(cSe$Nd=^a1@}#liQ6K+J%$06TH|H3)tIDQO#SgZxP@!0^h&JRJ{J;Nps zwCVg5?ZZZ!e|-)3i~f8~?f*w;uffDxi34KdMDaOXZ)$Lz&w9PqWbZU!7JOhu z5{F`R6tLU=dP7Zs=A@^#YcK8|tHR@M^sVW>LHRV3mZrAEB0^`8omR)WOhKEQlW-$4 z1?t1}7%e{m?l>Ed~e3eP>;Ru{MJGtc_x#*{~v1V~o z0gw{RL1W{58>atCGrIE?&i^+{VYEX~mP_xi1R}7Gyv96f}rMy}Y z^yMM13A{nXh~l9TVW=gp?u&6a@$q@#;H>VqF)*o%KUd& zh9mK=!jM$|e_ zv^q~v!L0;8g)=L4ubNJq*5z5~$eD5L+jvNd);!!oP7getXP=FDOWL3oG81KHXuy?RiCo zM<9{3iX{qGybt!s0=>T2RT+&KQN{LQXu)2u8p#?NQJ=9*0}l#(b+oWUAIBRVhD zsGUkWB7<#SE_?B-c4?_DeOX;;d244ko9AItBATsDiG@KuL>KopvYoB(AMOlv;Xt%B zV%hbTg#sSO?~6CjEwyOP@K?`a z4tx^H0^nIh!*3m9Mw7Gs3HZX|tNV1?ktSsS3mE~4umI`!gkbFArXRj-9Kh59Sx^8iAM_d?E*0FJw56Rbb z5y?99dE`F3Eq@<-e7GN}%a*2wwix^;%K{RuS0DALi6aa^cOCk1#ngLy7hP2?1tLTb z^AVE>wE}BViKt?{T8G$&}ogd~>9~ER63K$!YJG z*Td!|54#IHxjR3aLg5Wut34SbigL4uwW5bhfsQuk2M`dik*y?cRX#{GI!Y~9Ws4sz zj*=H^Q05{H8`{z+c-YQFn795MQPzR*HKt0Y+G^(1*iz3qaXX!?;PNQ=SQaufz(-C^ z_vv<>Pqj=-o9KFFl$KLvYDjsDIR3OigBGrP(`-bCpIh*3_^|X$IpBbjD-rs@kQeFt zrJVYm8;ujwU+1@vZ?-8L1bQ_Ht37A&Whwzvyu!5a3bVyBP_^ZaOn#wivM>d}gXYsA zFz8uETI2C`GLbGFHgr(J7j+ zctXs!e&<(4la-B_456?=rxu009Mx1{Mw3OA%F%M&Jfgjc`jA`vyhOP9Hz*6VPOId2 zwk}JYtW(_F=o#2x7#!)WBultbdNAZx+ zHkWF%m44Vw4%(5|{#()jg;ekJ#3!{4y5{cUx_)ys943e4^OT@jKjYOZNV?i!N^X_< z3q1)bcJ?@hLt0G7WSd>lAGRLgR+cVU*EX%Vq0Y@fOMXNEv?Tyo?KLYHg zS#iS!G1itNuQQ=3k{DVNFOCgg$n@?WK|8Mxc@V{J`4)>HBWBcRq1g2Jzp3|_VsysP z{5ikpUNuwO>&mR`x`kU8TPSugzg2T~aLUjA3LPa4hMjdaGTMrT(}Tn~2Y#s{hXZYC zP!pK}?WBJ5p`v%Ld1;&*CoX)YMX^jH(Ytt_ur@vacU2BNnzsNxACfx3g+O2@A4c^Y zXOuwo9OjlS!o+De>T1IG)h$j1%OrX>8fVa{6ITTCim}G7zw#OP@S7y?!Q)r&ueUkA znan{)DFyf&H7#xPGLKTIjtxzHva&)0;*>MWXe&be2e2O=-=S6;Z_>Ir;xD;Sv(!wi z(tg`KOg!I?u4+qdxrTNVqK`vA&8ZmqhAztYf(I+l@&Z_O9Vo&oAwQ?}>`IfupoaM^ z?}fPDAX2t0G^btTk_d#wSz1nfRHjZlBM~4aEbv|8aXvCv)n>O{Ml9}Pc{C#2ePGp# zuF&CPB%rMoP2*ws+D)tH}pkmhm@7=P2*+v&2XuF*r<-~7p!F~?oT6(+%^Dv-~*{Z|GEwgvMVoJ!-0+=eW`}4bml1kGG^~_ z!jlQXq_4KB$VeDCi!6_Z+rsZBwAp#RUoWmphe%46esm}?jr-VkTl`Kz_KWYrTsH|Y z(Ujc1`6*!kD)oI_+L$$Tph_AWIyjzz-a{l3@z%!K&1Pt@-r0ta``KJWWT#7X!uG9y@n)n?^O;Nz$)Rx$_IwlH8U8;`Fp30F;64Y7C#<~n)Q8k&wqYp( z^-mWlnp#)*$gMP3f=+zbOxS3&acD0fOOOM3H$^dltW9VQ)JV0(6Ei&X(Q`xS#!_O0 zRz}fEHl>X1aCe3M(p|{W$H4A zHktyBRqwimS{^j>A6BkQ6Gh>Z(8@N=1;gl?4|Rure9v`nr6cb{)eF2_koYaqAvu1?8 zZIk#R$>Od+Rp~R0;Cc7nub!{+N2_6&)N*H)f$&r#cO8{uPJ!SkizSC#dLjyBYWTUTDwb z*wNVQ^s$&$`|f+Fye&URk*y$Z^w4Bo?-SM@U-!knF1`5-XFXnfex{sj+O~w^9 zzfUm&4-_bL*0kbLFG>5>HzPl2h!^o!fhi@|Id4lqSV_5hf~Y7+pc*K%o>s_c#i+G~ z;Ef7?|1ID*BJ==MVe6e0yP~Ca2l=;c!{$)bEQ9xjdVY6;bw2Mt$@{K4A*uj5FSrzV zoyR16s2?~?R2z<;5iQIJ`gAD8m_u8MaH|f55R-}3pImNB*h`@LY|rvX++Po$aRLP= z09CWon~`#WiDAvJ3Sm7dAhD=eLz5E)7hdW`mAFv)_A~A2s)fNNAfOB$qI_*wgIbhC z%m$>cFW2`zdqHh(FWEJu{yKSCHt@S{!n2Oo+{kb}k^Z)yK+M+8vOVk7rJmH3ki+3( zBVww^V-a@nqMKyp*L^3Qpp?b!cN`w~DH})=j^UtNJ*;adyE~CGg1@i-atp?nhsShq zVNEv2xYDmWvMCN0s6M#9kvcL$l`>5KU`EXiDn#`It1?ht`(7WWfUGL@Qa4%~iSw1Kjh3&M05}{I*b9QN zuVVh`XQ+%hYzB*zwfh~KeTkEHp7uZ01U^`#9|BdSP6{eT)x1I}2^HoW_Au|5DF+yT%k|bHCqeWK}n^un#bJ~*hbcQPL zkITkO2_QN|MvzfqMk2F?D=u%ygj$+CRnxc_@evjq6u)Sx(3ze>r{H-8iSEZCFtYQrrs1cqdzoQs=h<%&iNs64ga&@Ik3Vi+zbjAj zVA9nX0q_8CHK6xww$72h83L*c`)`+ z-7$32H{Wp;|L#M0gGd0i_I7~l_#0y**8=%-7-iCGii1t1Vq@jDP&N`Wqou=xXWQg3 zkw34%#&206G9aT-LtWtnj@Fp$i3!aphU z9hL0TW)U*yWBs!Wz$$2f@J!9QfL!MNNjE?l<8yv5eM@q0QUL@7i1T!5?~Pzg0O{CB2^< zlDnVQwhM)MTN6%YgVVSyaydV`uTR?*B6qLO?s{sCg;n>P^m z-pbaQI)Lo>lT*h8u0}CxoxB@i*IT#?UC4!!A&ezTbkC9&vFSP-Pla!Y-wsE#H9-}O z&Y~vhKJhCeC#VQ>1%Mk8@U6{Jd%@UM!HnT6H$$%7vIx0*jP1Phc&3E^V|V1dFM&@d zy{hYX;FG~87(#SzwwF|xP8n641bg(tsiUXV@jMM`a&l4hq~q%z&3Qd9)oGVLdsA`1 zc^vDGLEB$yRi)5_Ep-)?^otzkg2H%!8*qT zCjn3@Ma7T64HSOKK?oHzFEGW-&aS@wGT4(_Pf0LCTOMnsGTCRbkBxs*6l03!yd|ra z{l(}pTaG=j?yVM9tPh5W{t9~thNVH}$H8|swjpdN@*AO_xF-8qJ6#s;MATq=n&$f# zy9@JcHctf~<)OXfn+seQ8m=gz-eVi6>G`?aD#s(}U`6LgwohA#Ipisqn#XsX z9y?rY&Hu=8vfRVH)shEG&0Bl#{chaj(xg`9PP6j$Omlbo07F50kEqUZblKX;CP^eT zW)l;`QKBR^Rc`aJQ2=o~>kS-3QqYrPOx#e`=d!AwJ~qw|;7(F_j=RHXlASrtHZ_yZ z>LD6hp|x`AZUdo68v@*vG9Br=Z*@lRWX(0Tf8Em#XA)Kp23Jn$?KRPitAB4#n7*G! z%)=V)E`ti(#1vCgb=y zVH|s5uI$LvsFpk=!)EC|*5G& zNx>Wp!@R`YxYal6;(7gmM#d8IjivTe>p9+sUtAl_E?8)(EKUnK*{0cxix0sGU+9HQ zRjyZYfFhINrId+q$rk&Z2|K@TAH&^+22=n^5T2&gJjQCdRj8D+URIId=n{Ow-x1@% zWy5v$v+9H>DyV(EU`8%(CRG_} z^gl|$7Y2ayae8efe+pQ1i8iY?aSokkGgm4h+&SyG+qEa$+u>#04tL2*99UY}Z14_f z=et?Nl*+GXPuL5aD7B9I!sZu|8u7j7WZyPpZDn=TQh%c3*m+Pv^{gYNYl-mM5iJ$K zydvNk8)0rO+_g4E=6b{+hRuX03%%<~Klkz`TYsS44R+9POqLbKtiXY7x>Y3MLRfa=0 zHGT6w)1dt#hp`W@M1PR^X5a9$;RpRT%g`PXqzgP)lD6xQ(NKJX;^^U@5jY|oEBngR zhD&OL5(0CDuV_9kLY8P4rq{mp{!}fQx|`PFZlI-6<94#`a0>x7o`Q33SUzWh5aPyG z@{_I2L~q{SrwN51v%kD%@`+*^KoX2%R*>Wg{j~TCr@lKpS5+IJRFyv3%RR%acl4rTYpS%(Q|p{h`HoD|9>-v&QD%{&flC51^?t4#7OW-?$n)-$5UwYpt2 zxovEH!3=Ns33KQz8ArjF*lf>+pQ|a4(rEo|{P97o^`RCoB~pRgN>M|17b~n6kJnAT zET@ykqB59C91isxk!5YWT0a?6m3#hNpx_U-B{Ep8+*;1Z$4G!;*vEnl; zFbIk@bSU5MGqdoFc*Td!Xre3RY`lY%DM_M4+e1^wY;SXUyK5C1g=HyYA-fE;Phw9` z7KK!7P0JlJ(YN#mIWG!pJP*&YT5tK$=#_n5=V&k+?DHPg6MNpD2ixEtIjd21*UNu5 zd{>0I97Ex&#eh-9e_aPBQr^4o!yAw1@D$6nbZ#$r5BLw*1oZ|8f;L5RBmaWsaN{0jDk_Pih)KyDi|8`qx=g&{y8gOG!FJubazjE)Q+bwGFwHD7czY)*m@JyP;D0W=PF zip5Oj0uOo+=GUK@5tPw}jQ7hK*I5p6h7bxU8+GBHI}Q)#zlAskc5z}yRA!O+uk$%MTOVv`hfboBz|jObbZQoD)jFGvl4|r%nMnQ-;QgtkJq|1X4a}mVgT*gU@u)~SP}>H2?!(mU zxo4Mnp{V}|_LPjCRIUqUj^C5A|M7wGS%I%}t&0wZDrwOMR-Sq}usUL!)dFBz z$1n+L3*_)cx`ip*gxb*p(Gvt(E8ZGPkrpXFG-a-)-rWXXQbd} zuYVRW3wHKI5odg@>{~;T`cOgUJMDR(D{eIBpQetEY=l6L^Zi?@TQI4 z>W$C7vDTkdF<4ZY{-M<06Dd(A8yqw?ifFCmyV?0`pbpZ1%RkStue(9R2EB6GhwG*# zK^aj3M>&KtOkwaUYvE#Md$^aO10KL1Sgy3{fTBM_6!g$NK=kmLiv?E*k9k9+W!H;+ zWOp5rT!kPhZyEekYp4xh7p&DF^z5{4Bw)v);EL3~`(q_bb^!W9qIl7 z*2mj*;)40U%KMJh6zWrkyN>k@i?OmObEyA7fb1`sT3A~h=Wh?J@AqnX9Gg~ww&U?2 zbwOjx{X=!%bl7~!s}k$Y>&a<}`bWkopBj*?VLBech!V(xKXbZ=upy)y5kBNTZwi?SQJ@{qxgop@Q!Ec(V~XxNpBBh9Np8Q4uBKjtJ7rc}r2+?*w5m-!&~|A`?~+EIQ@s&L0Nv=bE<(*P zWNk`CnIwpAu#3Y>%AI*Wu3bO>0}=zkUCxAoMBgovuKnB;OXzV1QT=39{PbhmT}6to zF$I4IE~jZohZZXRY#~6?LJ#G8WpuVbccOKIPYRZ5MDY>il0F@m-~IIuML?-(*tIrP z3YyMTN6+m*U?q8F!^1r;$JGSdkt12;H#~`nn1M+1T5J&@y!-`PR|>rP3}%1Gpa|(y z?o<2tK9tA#)n`I9yRAy0HQ5RFcTp5@uiYx zqbs=YVHjU|FGW)61z3VUGsjKRl&-Dy_`-a%{C}OF>8ggU&2!GsG2%{B4XxpNPf_-}1HI9M`FVXD zOWqlQxXU}Q2PxBBi04v1a0OuvEG41#2>Y-;q0ds?$Ua$fQ5%Tk?ChbK0xUVr2j^+g zDtDgbjd5=3d(EY=(AM+czm#k2;q$vnF7&K6I7~4p2pg~607*s}KFKeW-M6W6)*}&X zA%^8b3brE11ohwqSi;5*9Gaxw4@e1jzLBkLPTPd|uhvF#C|1R=FWYLKv z&@LD|BKH-fbVn>Kx9hVB=!t7f-BX>Zy9n)GwToViQ{*f7+HL?9kyNZ@BQ5Hq>8~pM zzPfw0-?oUC7J=JdZMxMJ1l}oC|lI1X)BZ(covjo)kad`}Q3Bl}k@1aAE(Ns9h+|ylPFtTsk_RO&wts|dP zRm9oe+$ZO&&WuhjC8mI|>Su^A?u48wEbrQDQ;YX-KHhtni0X81MZRu6D{a=Y!U_)J zM2baNsZ`{#89)xXU4$BCPG~lkJXXa*N}Z_lY9IsiUIf}i?0)-JdagADdA8=Ni6vai zXfZ~SjI2oZbr`#k?W2~Mo>BzsjPmMl+q=q5t^JGx3XzXK??pHrvkWPGuB5%t(|jn; zr|sWBq!ei6C@t_}0Z*N>twTTJ@BfTeYgkoaoA|Lv-?f9bzVQ&Or-jF+;y? zO?iuM)wfu#qE7U{d04W7n`e&=PBadaDdPf2CH)6b{e3>jHrU4%gAL5Stir!H{+lw^ zZQ=}1o6f3(#_$)m5Y@O~8|5DLewHpv6E7G{2RSc8f_63JUKH<`407GHWxIC9cy<~s z(ELo2JQ6?$ai2G@b8dCm!?yrJj!TZd&}0?GipSyJ%3m{~%|D!W7;Rp+ zy32<-_+?^1br_K82aNDI_sHMwm1`0`pLbwyjV!lnf6-Jx_!$W!Bef+65^Hm+S)@O@6-87qR zTJru-`y!}5*R(j3p-^ou~Rd>(nHsMqRQOl#~Q%S=o}lG z&elB+lNHy!Gu!5suT*n|g;Z4)`qCY{im5YN1T!qlRA#0Qy5|@8r}mIY>b+Ldwj62u zK!`dM1VZG460l^!cKY2JwQr?@1iTRMFZ$Z|43YemUkb0SkgM#4v!7$JO!M z!+Aa{_FK*E%$d@X*w(wzH@6+vB@94}HTl3I{0mQ@EwjDqJykS_m=2W!SWWlKlDB2f zYSYyJJTVB7`ElJA07+_}AM1dfZHVK2Ta^V@;B)x!Y0vi)8lj4*v0{)#CU-Eook*J$ z0k5Wz;9HkuU?pdM?G1>97u^pkEAw?0$k@W#n{ilu5_&6Ww|S<_0aMHTR{Ce*TjTU* zv&4t)GPEi`R)hQgZOYr35pzG=c}A16zSP%AX%{_^uJB-ykxvs?5Zw(h4~jXe;r_<1 zd8h^Yb|E~s+g@-G`JC+1bG4lq+MM6)%5MtTrnH&4cNSKe9X660Hl4m7W-Pi2^00Br zu$jEFaNRMIBav^dD24c{zK9(q!7Panv<<4K;<(XW9fU8HopmogKY(jf3MqVG$Qub)T+5)#-rUV+`SA5jf zklr`%ze2A<(%2W|Y$U$MDNB-RqtxzF?ohJ4)7JdcZy}cb@-lHyi)-Zickrr|=JS*N zl2fSgbDHkZIEJp>_AI&^>vx~@!#KjU&OIcX~sk`=Q(>*{WI zcR{f;_iHpHKs;}`*d00>75&h+P)nk)G$)KDx#xZcofG-M88Eh7Th)j7K#Y7sbgtYt z>NIJUs9y4eQpMi>{>-Sh|GwOkK?XaF1GW{Nij*6{qa&Kt%0{o~d;(T}Iy2qFt>Po& zXa@TYymUE3Gz-vR#H3LAq!;hu$QJB=HvBecA|>5ezRQNEX0-nkrmxe%s-GNmk2P+M zb`o_%N`ynj^Q!crKUFeEdZsApHND{|Sx21+bE?sNOrb(Jd0*}a0x`FZ&xjph&J-41 zhsALV(;s@>Ip_7o;Wf7=t%sE_>Wsn=-r-mz!|2N?I0|H_j=TtpuQ^ zB%>iYwn=tCO2argEm;iPstEzkaGfuxBaPnMO1O0^CbP0>rX+d=sn{Q=UQq@zug6_k{oQH?@?PCE z;G~nu*l_=(#rPS8D^FFeONi-@drJfQW}+6u5bQFmD5{BGY>=(*`wsmha+H`$_53(M zxfGNs8cXsN3(AwdmEAC%sUA9Lm=>Dy7QlhpYEk(bt5ax>o#gwRsw6QP8reh0v}878 z(OM2fytS!X3z;rZ)^?^g)y)wg7ky0Zh7hA9l-sFmy`6)ouMnev57)+xZW#;E+Y^Q# z*gEaEf6r6zY|%`RGimRq%sh4Q5#gHDFYapfm8NjK<=iYW3mR^{t)LIHa&dOd61+72 zlVmTEl>#>G5PomfjE=xSst*A`@iPuE%-5<$EdO!aZGeVzQzl9|y}#;TFdTN3Md6H~ z1A|4ueYgPgN$pr+B;{QUVmBNuhlZGH_cKQtOsQhy{!3jfuJ^g#i7Mr|Q9aO+DNK?M(C%B&9ocK zCF{D)ybCEO2loJfd>nc7d$s`Z+Ob7Z+-hF4q=i4-cwq8@?xoSC;#u{Z^Dsv=8WaC2oV7R(ku8ITx&I2c_-mE+lQq;(6~+)o$DMcHrbDZ=V8Fe9P9WhJVt-ovr%D zi%=Apa2zjB67Li2QB5NI-iW;4gzMq#*g7!Hp=4D+n&yW=fay32pOLN{E{W_nC7q#O!k>Ruh$FH ztaslh9_6u?uA7&%ZRM!MG{6ljw=~yEhB-pO|J=D?IA#QIPjX@NDKg|#ny%HEu!^r% zDFf5qaaF@vua|SIg%fqHa`^JVO8s33HLIBcGxX}?EqJz|jlp_M)9kgDbJ0E3uj}1) zX*}@sBeB?$@&>sX@_~M=5GWRndv}xQeRzrxY=gQ(SB9IbnAQRNt;yso-hH3cCrNXf(YEiWHKrA ze5mV|SX)bi=G=e5A$$bLvZr!dxmCvaI;W;CGLM^C#uDO>n|W8a!X<=&sqJ+G;mRe4 z3MYoVQ!envZpnl=t(->O355~R0aU#;(t8ev6G>A6UN|x@ZA~5r! zdkQ7%`@^Xu_(*C`DwFpn(HkQwqAw(HViz1nDS*}I7eU4m$Am^Z%S-E0hEG`H1~yt} zL&{y}A#k_~71tZ{=;yTV>-l`t*J_bgJQ&~?t~&4K3(I>ph_ zGzJe3D^`eEpYTIo|4Dzs|0C)u=0IB13nBq@=V(cbBAeBi$(-(lDgb zUD6EQF-Q*WdwtaZ`-3m=Vdma*_g-i1v)5i%)yUt^kxSY<&D5Q|(8_BJd+2BPkGW|I z<>Qbv*GqRdrqtkRi&m@A{@2pHRprSCvp)y}<2MM3OM;TZ2`AO74TAA>$b-6B$S|56 zj{DVLxz)#dDXDa4NkyqOD>HL+z2bQ6p+~+hQ@d+3!l*R~(xsgRcgQsG!6XF%xriKhQ4;M53^vjhRvjEIB8!&a(_2T`TIPO#*_xsykDJI41~;LvGE zC%c2z_-+ry<8;JdSmyJusZ#ufmN+s;g$fKZa4XV`Dg>!o3F&(ZKeEM1e;{Tg<7V}< z_oq6l21&kiP6|H3b(wAQB?2psCQOk8N&805TH-J2Ig;aiCd>*znUF7PNp)CaLe|km zB}Zx!TCCE}K>a01za&JHrEVsWJj-X&R*fK`q1r^2_vMXx4xe|-XM?k=T%Q6{EYb}d zy+>TK_xfptO=}f_sLGiW8GS0>NfucIMNsAHGKkOTk-K$nIf6IStD=;y?{3@QUZ13c zUR{&|8eLCodKgSX~?XJDIjdElZkR$);!-=!9%+v=iOJPLsDN zYyIdriMnHSk9BsjbT5s>C$$kh&5c>@W<8kseeBYLrx=R4Hh%`AKN77tV;$0dB;fcR zq-d(-EWxcnFjfa5pHSMNh@|gG%s}7dFD#elS4HYkM3_CB+UAM&xL-yku(JvmbJRdh z*~jorBSLX*3-@CZRFn!Wb5arSqwGE4h@2KFiNDsW8{PSok-vlX=gd$(hY1y!eP)7$ zN&K08Ol4`S^25@GIRSWCghzl~Ac4*N3cQhQEv1 zfk4ggJj`q>%Zv0>e$QSvCygz&DJ{wC!0)|9CV7yOxu5auD7|}*&qzKQNsz_iaUqF1 zs=Bi!#aBNlXKTp9f}UnIK{8zFC`iN|g~fR7XDg757O0!Y9B~ZPl^mEz+OurJs4$MmVv-&MwA}~;t6wEw#}^u%D(pCJ z$AB`2c-V<%z*`~bE81M8SqF0f%VDu1r{I>YVAdCD5g*{>rP6F)yo3sUoE+6*IuCE0 z%iLFGP2|I?7C**+ExiB+ak;tx80BNR|8Q5W7a4qCSlAsA(q{rDNT%u#r8f3yf2x-% zsA%ZxDQZONz_cckY}#P??*=A{FkBDIyI9 z;`|0{OF)i3u=fs(o20SfwKd@H``Iqz_L)cSvDgP;-p^A`HI9IMt{ESggoF(buA>sN zCdx<+<-|p>OLGT-F1ZRgQ<*)PJ|XroB(eJY&D$Fs+&w&hyXkJZY)2!i_<>s3>4Y+4 z1N-g88Eq_H&Ew%uE^Hd1rjx7x1iJEmlHlln`c5WiBoKSCQ?yJmH|0nss*>Tjr|g>i z2TOX*t3s+N8}x%S#u%pZc8It4r@Jv6n}m*spR&KJ0r$8|^(iC<4QEqXg&=RQv8X|v zHC{eku3WR3(E-tywL;4@1G%HGNK=`Va3`u+Hym@OoI}zVP`8@uawT009M%?=UIA^K z*w0fU)6k(}lp~d^(k-AoZ1NbH(6zE8k*TiR+4Y;~V+qbsU&Y%F5e&@BO zAJNx}9a=yx69yW$BL9x-TPm{VP#>wqLV5}e+3I$81-t@k9Hgqa=- zG1rj#LoYInBSsb5E&AI@rH+pWwuMS#MR6Q3A#|=f*DYrX1!0q6yT(^NW8~ZP-X=E~ zy!4+cXqq6y&1hba1Euf|Y8U))W|?IxOMJQ}37>2>vew2O`5{{xznZJ~-f{CZ#Tjh+ zYJ7u0DQjkr#}h%a1>+G7okw8oFmTnk+3sIGXJ?4yaMLVfcS%qRSZ-JKqC4ATKR_Vc6}*5G z(u^3Xz2n+UgINY|c==_~V`=OnkTMkKpg{TVC_Cx(dZ|X%V$iK@lSVMD;nn$I&+6L~ zY96cZHKRPpg5m~nu$*N#*dpZPR7qp+3#1-7pmbuFdlS*Dr%_yB(<#+C)w4v@>yzk* zKKe5NPFa3(uwacop`I5iqE}VFO0EPqMFG0#z|a

-T$lzwPV#Fi+JSgqI2*ie3kr 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 =RqmHlZq)?xXF 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 CAw{SF literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/two_phase_commit_load_balancing.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/two_phase_commit_load_balancing.png new file mode 100644 index 0000000000000000000000000000000000000000..5cdc26f085899a9fca1504ebaded20a638a0fdc2 GIT binary patch literal 40021 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 literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/two_phase_commit_sequence_diagram.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/images/two_phase_commit_sequence_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..116ef635e2d61609dc352e0baae5525ba588c288 GIT binary patch literal 39137 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 CNXAV7 literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/manage-backup-and-restore.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/manage-backup-and-restore.mdx new file mode 100644 index 00000000..7244e655 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/manage-backup-and-restore.mdx @@ -0,0 +1,26 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# データベースのバックアップと復元 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このガイドでは、ScalarDB で使用されるデータベースのバックアップと復元の方法について説明します。 + +## データベースのバックアップと復元の基本ガイドライン + +バックアップを実行する前に、[ScalarDB で使用されるデータベースのバックアップと復元方法](backup-restore.mdx)を必ずお読みください。 + +## Kubernetes 環境で ScalarDB を使用する場合のデータベースのバックアップ + +Kubernetes 環境でデータベースをバックアップする方法の詳細については、[Kubernetes 環境で NoSQL データベースをバックアップする](scalar-kubernetes/BackupNoSQL.mdx)を参照してください。 + +## Kubernetes 環境で ScalarDB を使用する場合のデータベースの復元 + +Kubernetes 環境でデータベースを復元する方法の詳細については、[Kubernetes 環境でデータベースを復元する](scalar-kubernetes/RestoreDatabase.mdx)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/monitor-by-using-scalar-manager.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/monitor-by-using-scalar-manager.mdx new file mode 100644 index 00000000..b119280e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/monitor-by-using-scalar-manager.mdx @@ -0,0 +1,24 @@ +--- +tags: + - Enterprise Option +--- + +# Scalar Manager を使用して ScalarDB を監視する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +Scalar Manager は、Kubernetes クラスター環境内の ScalarDB の集中管理および監視ソリューションであり、次のことが可能になります。 + +- ScalarDB の可用性を確認します。 +- ScalarDB が使用するデータベースでトランザクションの一貫性のある期間を作成する一時停止ジョブをスケジュールまたは実行します。 +- Grafana ダッシュボードを介して ScalarDB の時系列メトリックとログを確認します。 + +Scalar Manager の詳細については、[Scalar Manager 概要](scalar-manager/overview.mdx)を参照してください。 + +## Scalar Manager をデプロイする + +Helm Chart を使用して Scalar Manager をデプロイできます。 + +Scalar Manager をデプロイする方法の詳細については、[Scalar Manager のデプロイする方法](helm-charts/how-to-deploy-scalar-manager.mdx)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/multi-storage-transactions.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/multi-storage-transactions.mdx new file mode 100644 index 00000000..3065a4f6 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/multi-storage-transactions.mdx @@ -0,0 +1,71 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# マルチストレージトランザクション + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB トランザクションは、*マルチストレージトランザクション* と呼ばれる機能を使用することで、ACID 準拠を維持しながら複数のストレージまたはデータベースにまたがることができます。 + +このページでは、マルチストレージトランザクションの仕組みと、ScalarDB でこの機能を設定する方法について説明します。 + +## ScalarDB でのマルチストレージトランザクションの仕組み + +ScalarDB では、`マルチストレージ` 実装は複数のストレージインスタンスを保持し、名前空間名から適切なストレージインスタンスへのマッピングを持っています。操作が実行されると、マルチストレージトランザクション機能は、名前空間ストレージマッピングを使用して指定された名前空間から適切なストレージインスタンスを選択し、そのストレージインスタンスを使用します。 + +## マルチストレージトランザクションをサポートするように ScalarDB を設定する方法 + +マルチストレージトランザクションを有効にするには、`scalar.db.transaction_manager` の値として `consensus-commit` を指定し、`scalar.db.storage` の値として `multi-storage` を指定し、ScalarDB プロパティファイルでデータベースを設定する必要があります。 + +以下は、マルチストレージトランザクションの設定例です。 + +```properties +# Consensus Commit is required to support multi-storage transactions. +scalar.db.transaction_manager=consensus-commit + +# Multi-storage implementation is used for Consensus Commit. +scalar.db.storage=multi-storage + +# Define storage names by using a comma-separated format. +# In this case, "cassandra" and "mysql" are used. +scalar.db.multi_storage.storages=cassandra,mysql + +# Define the "cassandra" storage. +# When setting storage properties, such as `storage`, `contact_points`, `username`, and `password`, for multi-storage transactions, the format is `scalar.db.multi_storage.storages..`. +# For example, to configure the `scalar.db.contact_points` property for Cassandra, specify `scalar.db.multi_storage.storages.cassandra.contact_point`. +scalar.db.multi_storage.storages.cassandra.storage=cassandra +scalar.db.multi_storage.storages.cassandra.contact_points=localhost +scalar.db.multi_storage.storages.cassandra.username=cassandra +scalar.db.multi_storage.storages.cassandra.password=cassandra + +# Define the "mysql" storage. +# When defining JDBC-specific configurations for multi-storage transactions, you can follow a similar format of `scalar.db.multi_storage.storages..`. +# For example, to configure the `scalar.db.jdbc.connection_pool.min_idle` property for MySQL, specify `scalar.db.multi_storage.storages.mysql.jdbc.connection_pool.min_idle`. +scalar.db.multi_storage.storages.mysql.storage=jdbc +scalar.db.multi_storage.storages.mysql.contact_points=jdbc:mysql://localhost:3306/ +scalar.db.multi_storage.storages.mysql.username=root +scalar.db.multi_storage.storages.mysql.password=mysql +# Define the JDBC-specific configurations for the "mysql" storage. +scalar.db.multi_storage.storages.mysql.jdbc.connection_pool.min_idle=5 +scalar.db.multi_storage.storages.mysql.jdbc.connection_pool.max_idle=10 +scalar.db.multi_storage.storages.mysql.jdbc.connection_pool.max_total=25 + +# Define namespace mapping from a namespace name to a storage. +# The format is ":,...". +scalar.db.multi_storage.namespace_mapping=user:cassandra,coordinator:mysql + +# Define the default storage that's used if a specified table doesn't have any mapping. +scalar.db.multi_storage.default_storage=cassandra +``` + +追加の設定については、[ScalarDB 設定](configurations.mdx)を参照してください。 + +## 実践的なチュートリアル + +実践的なチュートリアルについては、[マルチストレージトランザクションをサポートするサンプルアプリケーションを作成する](scalardb-samples/multi-storage-transaction-sample/README.mdx)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/overview.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/overview.mdx new file mode 100644 index 00000000..bd025d9a --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/overview.mdx @@ -0,0 +1,81 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB の概要 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、ScalarDB の概要と主な使用例について説明します。 + +## ScalarDB とは + +ScalarDB は、さまざまなデータベース向けのハイブリッドトランザクション/分析処理 (HTAP) エンジンです。データベース上でミドルウェアとして実行され、ACID トランザクションとリアルタイム分析を実現することでさまざまなデータベースを仮想的に統合し、複数のデータベースまたは単一のデータベースの複数のインスタンスの管理の複雑さを簡素化します。 + +![ScalarDB が複雑なデータ管理アーキテクチャを簡素化する方法。](images/scalardb.png) + +多用途のソリューションである ScalarDB は、次のようなさまざまなデータベースをサポートしています。 + +- MariaDB、Microsoft SQL Server、MySQL、Oracle Database、PostgreSQL、SQLite などの JDBC をサポートするリレーショナルデータベース、および Amazon Aurora、Google AlloyDB、TiDB、YugabyteDB などの互換性のあるデータベース。 +- Amazon DynamoDB、Apache Cassandra、Azure Cosmos DB などの NoSQL データベース。 + +ScalarDB がサポートするデータベースの詳細については、[データベース](requirements.mdx#データベース) を参照してください。 + +## ScalarDB を選ぶ理由 + +グローバルトランザクションマネージャー、データフェデレーションエンジン、HTAP システムなどのいくつかのソリューションは、同様の目標を持っていますが、次の観点で制限があります。 + +- グローバルトランザクションマネージャー (Oracle MicroTx や Atomikos など) は、限られた異種データベースセット (XA 準拠のデータベースのみなど) でトランザクションを実行するように設計されています。 +- データフェデレーションエンジン (Denodo や Starburst など) は、異種データベースで分析クエリを実行するように設計されています。 +- HTAP システム (TiDB や SingleStore など) は、同種データベースでのみトランザクションと分析クエリの両方を実行します。 + +言い換えれば、これらはデータベースを仮想的に統合しますが、制限があります。たとえば、データフェデレーションエンジンを使用すると、ユーザーは複数のデータベースにまたがる仮想ビューで読み取り専用の分析クエリを実行できます。ただし、多くの場合、データベースごとに更新クエリを個別に実行する必要があります。 + +他のソリューションとは異なり、ScalarDB は、異種データベースでトランザクションクエリと分析クエリの両方を実行できる機能を備えているため、データベース管理を大幅に簡素化できます。 + +次の表は、ScalarDB が他のソリューションとどのように異なるかをまとめたものです。 + +| | 異種データベース間のトランザクション | 異種データベース間の分析 | +| :--------------------------------------------------------------: | :----------------------------------------------------------------------------: | :--------------------------------: | +| グローバルトランザクションマネージャー (Oracle MicroTx や Atomikos など) | はい(ただし、既存のソリューションでは限られたデータベースのセットしかサポートされていません) | いいえ | +| データフェデレーションエンジン (Denodo や Starburst など) | いいえ | はい | +| HTAP システム (TiDB や SingleStore など) | いいえ (同種のデータベースのみサポート) | いいえ (同種のデータベースのみサポート) | +| **ScalarDB** | **はい (各種データベースに対応)** | **はい** | + +## ScalarDB の使用例 + +ScalarDB はさまざまな用途で使用できます。ScalarDB の主な使用例を 3 つ紹介します。 + +### サイロ化されたデータベースを簡単に管理 + +多くの企業は、アジャイルなビジネスオペレーションをサポートするために複数の組織、部門、ビジネスユニットで構成されており、その結果、サイロ化された情報システムになることがよくあります。特に、異なる組織では、異なるデータベースを使用して異なるアプリケーションを管理する可能性があります。このようなサイロ化されたデータベースの管理は、アプリケーションが各データベースと個別に通信し、データベース間の違いを適切に処理する必要があるため、困難です。 + +ScalarDB は、統一されたインターフェイスを使用してサイロ化されたデータベースの管理を簡素化し、ユーザーがデータベースを 1 つのデータベースのように扱えるようにします。たとえば、ユーザーは複数のデータベースに対して (分析的な) 結合クエリを、それぞれのデータベースとやり取りすることなく実行できます。 + +### 複数のデータベース間の一貫性の管理 + +マイクロサービスアーキテクチャなどの最新のアーキテクチャでは、システムでサービスとそのデータベースを小さなサブセットに分割して、システムのモジュール性と開発効率を高めることが推奨されています。しかし、多様なデータベース、特に異なる種類のデータベースを管理するのは困難です。なぜなら、Saga や TCC などのトランザクション管理パターンを使用しても、アプリケーションはそれらのデータベースの正しい状態 (言い換えれば一貫性) を保証する必要があるからです。 + +ScalarDB は、正確性の保証 (言い換えれば、厳密なシリアル化可能性を備えた ACID) によって、このような多様なデータベースの管理を簡素化します。これにより、データベース間の一貫性の保証を気にすることなく、アプリケーション開発に集中できます。 + +### データメッシュでのデータ管理の簡素化 + +企業は、データ利用を合理化および拡張するために、[データメッシュ](https://martinfowler.com/articles/data-mesh-principles.html)の構築に時間を費やしてきました。ただし、データメッシュの構築は必ずしも簡単ではありません。たとえば、分散データの管理方法には多くの技術的な問題があります。 + +ScalarDB は、データメッシュ内のすべてのデータベースに統一された API を提供することで、データメッシュ内の分散データベースの管理を簡素化し「データをプロダクトとして扱う(Data as a Product)」という原則に簡単に適合させます。 + +### データベース移行のハードルを下げる + +アプリケーションは、データベースが提供する特定の機能のために、特定のデータベースを使用するようにロックされる傾向があります。このようなデータベースロックインにより、データベースのアップグレードや変更が妨げられます。アップグレードや変更を行うには、多くの場合、アプリケーションの書き直しが必要になるからです。 + +ScalarDB は、多様なデータベースに統一されたインターフェイスを提供します。したがって、ScalarDB インターフェイスを使用してアプリケーションを作成すると、そのアプリケーションは移植可能になり、アプリケーションを書き直すことなくシームレスなデータベース移行を実現できます。 + +## さらに読む + +- [ScalarDB Technical Overview](https://speakerdeck.com/scalar/scalar-db-universal-transaction-manager) +- [ScalarDB Research Paper [VLDB'23]](https://dl.acm.org/doi/10.14778/3611540.3611563) \ No newline at end of file diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/quick-start-overview.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/quick-start-overview.mdx new file mode 100644 index 00000000..1188efaf --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/quick-start-overview.mdx @@ -0,0 +1,39 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# クイックスタート + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このカテゴリでは、ScalarDB を介してトランザクションとクエリの実行を開始する方法についてのクイックスタートチュートリアルに従うことができます。 + +## ScalarDB コアライブラリを介してトランザクションを実行してみる + +このサブカテゴリでは、Apache 2 ライセンスの下で公開されている ScalarDB コアライブラリを介して ACID トランザクションを実行する方法に関するチュートリアルに従うことができます。 + +## ScalarDB Cluster を介してトランザクションを実行してみる + +このサブカテゴリでは、ScalarDB コアライブラリをラップする [gRPC](https://grpc.io/) サーバーである ScalarDB Cluster を介して ACID トランザクションを実行する方法に関するチュートリアルを参照できます。 + +:::note + +ScalarDB Cluster は Enterprise エディションでのみ利用できます。 + +::: + +## ScalarDB Analytics で分析クエリを実行してみる + +このサブカテゴリでは、ScalarDB Analytics というコンポーネントを使用して、ScalarDB で作成したデータベースに対して分析クエリを実行する方法に関するチュートリアルを参照できます。ScalarDB Analytics は現在、ScalarDB トランザクションで更新される ScalarDB 管理データベースのみを対象としていますが、将来的には ScalarDB 管理以外のデータベースも対象とする予定です。 + +:::note + +- ScalarDB Analytics with PostgreSQL は Apache 2 ライセンスでのみ利用可能で、商用ライセンスは必要ありません。 +- ScalarDB Analytics with Spark はプライベートプレビュー中です。 + +::: diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/requirements.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/requirements.mdx new file mode 100644 index 00000000..43ce5f29 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/requirements.mdx @@ -0,0 +1,246 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB の要件 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、ScalarDB を正しく使用するために必要なツールとそのバージョンについて説明します。 + +## クライアント SDK + +ScalarDB は Java で記述されているため、ScalarDB を操作する最も簡単な方法は、Java Client SDK を使用することです。 + +- [ScalarDB Core 用 SDK](add-scalardb-to-your-build.mdx) +- [ScalarDB Cluster 用 SDK](scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx) + +### Java + +次の Java Software Development (JDK) が検証され、サポートされています。 + +- **[Oracle JDK](https://www.oracle.com/java/):** 8、11、17、または 21 (LTS バージョン) +- **[OpenJDK](https://openjdk.org/) ([Eclipse Temurin](https://adoptium.net/temurin/)、[Amazon Corretto](https://aws.amazon.com/corretto/)、または [Microsoft Build of OpenJDK](https://learn.microsoft.com/en-us/java/openjdk/)):** 8、11、17、または 21 (LTS バージョン) + +### .NET + +ScalarDB は、ScalarDB Cluster と呼ばれる gRPC サーバーとして提供され、proto ファイルから生成された .NET クライアントをラップする [.NET Client SDK](scalardb-cluster-dotnet-client-sdk/overview.mdx) も備えています。 + +次の .NET バージョンが検証され、サポートされています。 + +- [.NET 8.0](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) +- [.NET 6.0](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) + +### その他の言語 + +ScalarDB Cluster は gRPC バージョン 1.65.0 を使用するため、好みの言語で生成されたクライアントを使用して独自のクライアントを作成できます。 + +## データベース + +ScalarDB は、次のデータベースとそのバージョン上で実行されるミドルウェアです。 + +### リレーショナルデータベース + + + + +| バージョン | Oracle Database 23ai | Oracle Database 21c | Oracle Database 19c | +|:------------------|:---------------------|:--------------------|:--------------------| +| **ScalarDB 3.14** | ✅ | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | ✅ | + + + + +| バージョン | MySQL 8.1 | MySQL 8.0 | MySQL 5.7 | +|:------------------|:----------|:----------|:----------| +| **ScalarDB 3.14** | ✅ | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | ✅ | + + + + +| バージョン | PostgreSQL 15 | PostgreSQL 14 | PostgreSQL 13 | PostgreSQL 12 | +|:------------------|:--------------|:--------------|:--------------|:--------------| +| **ScalarDB 3.14** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | ✅ | ✅ | + + + + +| バージョン | Aurora MySQL 3 | Aurora MySQL 2 | +|:------------------|:---------------|:---------------| +| **ScalarDB 3.14** | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | + + + + +| バージョン | Aurora PostgreSQL 15 | Aurora PostgreSQL 14 | Aurora PostgreSQL 13 | Aurora PostgreSQL 12 | +|:------------------|:---------------------|:---------------------|:---------------------|:---------------------| +| **ScalarDB 3.14** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | ✅ | ✅ | + + + + +| バージョン | MariaDB 11.4 | MariaDB 10.11 | +|:------------------|:-------------|:--------------| +| **ScalarDB 3.14** | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | + + + + +| バージョン | SQL Server 2022 | SQL Server 2019 | SQL Server 2017 | +|:------------------|:----------------|:----------------|:----------------| +| **ScalarDB 3.14** | ✅ | ✅ | ✅ | +| **ScalarDB 3.13** | ✅ | ✅ | ✅ | +| **ScalarDB 3.12** | ✅ | ✅ | ✅ | +| **ScalarDB 3.11** | ✅ | ✅ | ✅ | +| **ScalarDB 3.10** | ✅ | ✅ | ✅ | +| **ScalarDB 3.9** | ✅ | ✅ | ✅ | +| **ScalarDB 3.8** | ✅ | ✅ | ✅ | +| **ScalarDB 3.7** | ✅ | ✅ | ✅ | + + + + +| バージョン | SQLite 3 | +|:------------------|:---------| +| **ScalarDB 3.14** | ✅ | +| **ScalarDB 3.13** | ✅ | +| **ScalarDB 3.12** | ✅ | +| **ScalarDB 3.11** | ✅ | +| **ScalarDB 3.10** | ✅ | +| **ScalarDB 3.9** | ✅ | +| **ScalarDB 3.8** | ❌ | +| **ScalarDB 3.7** | ❌ | + + + + +| バージョン | YugabyteDB 2 | +|:------------------|:-------------| +| **ScalarDB 3.14** | ✅ | +| **ScalarDB 3.13** | ✅ | +| **ScalarDB 3.12** | ❌ | +| **ScalarDB 3.11** | ❌ | +| **ScalarDB 3.10** | ❌ | +| **ScalarDB 3.9** | ❌ | +| **ScalarDB 3.8** | ❌ | +| **ScalarDB 3.7** | ❌ | + + + + +### NoSQL データベース + + + + +| バージョン | DynamoDB | +|:------------------|:---------| +| **ScalarDB 3.14** | ✅ | +| **ScalarDB 3.13** | ✅ | +| **ScalarDB 3.12** | ✅ | +| **ScalarDB 3.11** | ✅ | +| **ScalarDB 3.10** | ✅ | +| **ScalarDB 3.9** | ✅ | +| **ScalarDB 3.8** | ✅ | +| **ScalarDB 3.7** | ✅ | + + + + +| バージョン | Cassandra 4.1 | Cassandra 4.0 | Cassandra 3.11 | Cassandra 3.0 | +|:------------------|:--------------|:--------------|:---------------|:--------------| +| **ScalarDB 3.14** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.13** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.12** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.11** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.10** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.9** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.8** | ❌ | ❌ | ✅ | ✅ | +| **ScalarDB 3.7** | ❌ | ❌ | ✅ | ✅ | + + + + +| バージョン | Cosmos DB for NoSQL | +|:------------------|:--------------------| +| **ScalarDB 3.14** | ✅ | +| **ScalarDB 3.13** | ✅ | +| **ScalarDB 3.12** | ✅ | +| **ScalarDB 3.11** | ✅ | +| **ScalarDB 3.10** | ✅ | +| **ScalarDB 3.9** | ✅ | +| **ScalarDB 3.8** | ✅ | +| **ScalarDB 3.7** | ✅ | + + + + +:::note + +各データベースの設定方法の詳細については、[ScalarDB の基盤となるデータベースの設定](./database-configurations.mdx) を参照してください。 + +::: + +## Kubernetes + +ScalarDB は、本番環境では Kubernetes プラットフォーム上の Pod として提供されます。ScalarDB は次のプラットフォームとツールをサポートしています。 + +### プラットフォーム + +- **[Kubernetes](https://kubernetes.io/):** 1.27 - 1.31 + - **[Amazon Elastic Kubernetes Service (EKS)](https://aws.amazon.com/jp/eks/)** + - **[Azure Kubernetes Service (AKS)](https://azure.microsoft.com/ja-jp/products/kubernetes-service)** +- **[Red Hat OpenShift](https://www.redhat.com/en/technologies/cloud-computing/openshift):** TBD + +### パッケージマネージャー + +- **[Helm](https://helm.sh/):** 3.5+ diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/roadmap.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/roadmap.mdx new file mode 100644 index 00000000..11aeaab8 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/roadmap.mdx @@ -0,0 +1,96 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB ロードマップ + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このロードマップは、ScalarDB の今後の計画の概要を示しています。このロードマップの目的は、今後どのような変更が行われる可能性があるかを把握できるようにし、進捗状況をより詳しく追跡し、主要なマイルストーンを把握し、開発中にフィードバックを提供することです。このロードマップは、ScalarDB の新しいバージョンがリリースされるたびに更新されます。 + +:::warning + +開発の過程で、このロードマップはユーザーのニーズやフィードバックに基づいて変更される可能性があります。**このロードマップの内容に従ってリリース計画をスケジュールしないでください。** + +機能リクエストがある場合、または機能開発を優先したい場合は、[GitHub](https://github.com/scalar-labs/scalardb/issues) で問題を作成してください。 + +::: + +### CY2024 Q4 + +#### 新しい機能 + +- **分析のためのデータ仮想化** + - ユーザーは、ScalarDB Analytics を介してさまざまなデータソースで読み取り専用の OLAP SQL クエリを実行できるようになります。ScalarDB Analytics は現在、ScalarDB 管理のデータストアのみをサポートしているため、この機能強化により、データソースが ScalarDB トランザクションによって管理されているかどうかに関係なく、リレーショナルデータベースや NoSQL データベースなどのさまざまなデータストアと、Amazon S3 などのクラウドオブジェクトストア内のファイルが仮想的に統合されます。 +- **ベクトルストアの抽象化** + - ユーザーは、ScalarDB の新しいベクトルストアインターフェイスを介して、ベクトルストアに埋め込み (ベクトル) を保存したり、ベクトルストアから埋め込みを検索したりできるようになります。この機能により、ユーザーは、既存の ScalarDB インターフェイスを介してデータベースからデータを読み取り、データから埋め込みを作成し、新しいインターフェイスを介してベクトルストアに埋め込みを保存したり、ベクトルストアから埋め込みを検索したりすることで、大規模言語モデル (LLM) を使用した検索拡張生成 (RAG) を実現するプロセスを簡素化できます。 + +#### セキュリティ + +- **きめ細かなアクセス制御** + - ユーザーは、基盤となるデータベースへのアクセスをよりきめ細かに承認できるようになります。ScalarDB は、ユーザーが特定の操作を発行する権限を持っているかどうかを確認する現在の単純な承認に加えて、ユーザーが特定のレコードにアクセスできるかどうかも確認します。 + +#### ユーザビリティ + +- **時間関連のデータ型の追加** + - ユーザーは時間関連のデータ型を使用できるようになり、既存のアプリケーションの移行が容易になります。 +- **追加書き込み戦略の削除** + - ユーザーは、トランザクションをシリアル化可能にするために追加書き込み戦略を使用できなくなります。ScalarDB は現在、トランザクションをシリアル化可能にするために追加読み取り戦略と追加書き込み戦略の 2 つの戦略を提供していますが、追加書き込み戦略にはいくつかの制限があります。たとえば、ユーザーは同じトランザクションで書き込み操作とスキャン操作を発行できません。したがって、この戦略は削除され、ユーザーはアプリケーションを作成するときにこのような制限を心配する必要がなくなります。 + +#### パフォーマンス + +- **1 フェーズコミットの最適化** + - ユーザーは、単一のパーティションに書き込む単純なトランザクションの実行速度が速くなります。ScalarDB は、基礎となるデータベースの単一パーティション線形化可能な操作を利用して、トランザクションが 1 つのパーティションのみを更新する場合、正確さを犠牲にすることなく、レコード準備フェーズとコミット状態フェーズを省略します。 +- **ScalarDB メタデータの管理に必要なストレージ領域の削減** + - ユーザーは、ScalarDB を実行するために使用するストレージ領域が少なくなる可能性があります。ScalarDB は、コミットされたトランザクションがコミットされた後に、コミット前のイメージを削除します。ただし、コミットされたトランザクションが実際のストレージ領域に影響を与えるかどうかは、基礎となるデータベースによって異なります。 +- **読み取り専用トランザクションのコーディネータ書き込みの削除** + - 読み取り専用トランザクションのコーディネータ書き込みを削除することで、ユーザーは読み取り専用トランザクションの実行速度が向上します。 + +#### クラウドサポート + +- **Azure Marketplace でのコンテナオファリング** + - ユーザーは、Azure コンテナオファリングを使用して ScalarDB Cluster をデプロイできるようになります。これにより、ユーザーは従量課金制のサブスクリプションモデルを利用できるようになります。 +- **Google Cloud Platform (GCP) のサポート** + - ユーザーは、GCP の Google Kubernetes Engine (GKE) に ScalarDB Cluster をデプロイできるようになります。 + +### CY2025 Q1 + +#### 新しい機能 + +- **ネイティブセカンダリインデックス** + - ユーザーは柔軟なセカンダリインデックスを定義できるようになります。既存のセカンダリインデックスは、サポートされているデータベースのセカンダリインデックスの共通機能に基づいて実装されているため、制限があります。したがって、たとえば、複数列のインデックスを定義することはできません。新しいセカンダリインデックスは ScalarDB レイヤーで作成されるため、複数列のインデックスなど、より柔軟なインデックスを作成できます。 + +#### ユーザビリティ + +- **集計用の SQL 操作の追加** + - ユーザーは ScalarDB SQL で集計操作を発行できるようになります。 +- **大規模なスキャンによるメモリ不足エラーの排除** + - ユーザーはメモリ不足エラーを経験することなく大規模なスキャンを発行できるようになります。 +- **一時停止期間中の読み取り操作の有効化** + - ユーザーは一時停止期間中でも読み取り操作を発行できるため、バックアップを取りながらデータを読み取ることができます。 +- **より多くのデータタイプの追加** + - ユーザーはより多くのデータタイプを使用できるようになるため、既存のアプリケーションの移行が容易になります。 + +### CY2025 Q2 - + +#### ユーザビリティ + +- **ビュー** + - ユーザーはビューを定義して、複数の異なるデータベースをより簡単かつ簡素化された方法で管理できるようになります。 + +#### スケーラビリティと可用性 + +- **半同期レプリケーション** + - ユーザーは、災害復旧可能な方法で ScalarDB ベースのアプリケーションを提供できます。たとえば、東京でプライマリサービスを提供し、大阪でスタンバイサービスを提供するとします。東京で壊滅的な障害が発生した場合、プライマリサービスを大阪に切り替えることで、データ損失や長時間のダウンタイムなしにサービスを継続できます。 + +#### クラウドサポート + +- **Red Hat OpenShift のサポート** + - ユーザーは、OpenShift 環境で ScalarDB Cluster 用の Red Hat 認定 Helm Charts を使用できるようになります。 +- **Google Cloud Marketplace でのコンテナの提供** + - ユーザーは、Google Cloud コンテナの提供を使用して ScalarDB Cluster をデプロイできるようになります。これにより、ユーザーは従量課金制のサブスクリプションモデルを利用できるようになります。 \ No newline at end of file diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-library.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-library.mdx new file mode 100644 index 00000000..c8ff048e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-library.mdx @@ -0,0 +1,274 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# コアライブラリを通じて非トランザクションストレージ操作を実行する + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このガイドでは、ScalarDB コアライブラリを通じて非トランザクションストレージ操作を実行する方法について説明します。 + +## 準備 + +このガイドでは、ScalarDB サンプルリポジトリのサンプルを使用して、データベースと ScalarDB をセットアップします。 + +### ScalarDB サンプルリポジトリのクローンを作成する + +**Terminal** を開き、次のコマンドを実行して ScalarDB サンプル リポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-sample +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](requirements.mdx#データベース)を参照してください。 + + + +

MySQLをローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の MySQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://localhost:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` + + +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://localhost:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の SQL Server のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://localhost:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://localhost:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントをお持ちでない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を設定する

+ + [既定の整合性レベルを設定する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル**を**強力**に設定します。 + +

ScalarDB を設定する

+ + 以下の手順では、ローカル環境に JDK が適切にインストールおよび設定されており、Azure で Cosmos DB for NoSQL アカウントが適切に設定されていることを前提としています。 + + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。`scalar.db.contact_points` と `scalar.db.password` の値は、説明に従って必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + ```console + docker compose up -d cassandra + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Cassandra のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=localhost + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+ + +ScalarDB の設定の包括的なリストについては、[ScalarDB 設定](configurations.mdx)を参照してください。 + +## 非トランザクションストレージ操作を実行するようにScalarDBを設定する + +非トランザクションストレージ操作を実行するには、設定ファイル **database.properties** で `scalar.db.transaction_manager` プロパティを `single-crud-operation` に設定する必要があります。 + +```properties +scalar.db.transaction_manager=single-crud-operation +``` + +## スキーマを作成またはインポートする + +ScalarDB には、実装固有のデータモデルとスキーマにマップされる独自のデータモデルとスキーマがあります。 + +- **データベーススキーマを作成する必要がありますか?** [ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 +- **既存のデータベースをインポートする必要がありますか?** [ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](schema-loader-import.mdx)を参照してください。 + +## Java アプリケーションを作成する + +このセクションでは、ScalarDB コアライブラリをプロジェクトに追加する方法と、Java を使用して非トランザクションストレージ操作を実行するように設定する方法について説明します。 + +### ScalarDB をプロジェクトに追加する + +ScalarDB ライブラリは、[Maven Central Repository](https://mvnrepository.com/artifact/com.scalar-labs/scalardb) で入手できます。Gradle または Maven を使用して、ライブラリをビルド依存関係としてアプリケーションに追加できます。 + +ビルドツールを選択し、手順に従って ScalarDB のビルド依存関係をアプリケーションに追加します。 + + + + Gradle を使用して ScalarDB のビルド依存関係を追加するには、アプリケーションの `build.gradle` に以下を追加します。 + + ```gradle + dependencies { + implementation 'com.scalar-labs:scalardb:3.13.1' + } + ``` + + + Maven を使用して ScalarDB のビルド依存関係を追加するには、アプリケーションの `pom.xml` に以下を追加します。 + + ```xml + + com.scalar-labs + scalardb + 3.13.1 + + ``` + + + +### Java API を使用する + +Java API の詳細については、[ScalarDB Java API ガイド](api-guide.mdx)を参照してください。 + +:::note + +非トランザクションストレージ操作には、次の制限が適用されます: + +- トランザクションの開始はサポートされていません。詳細については、[トランザクションを開始せずにトランザクションを実行する](api-guide.mdx#トランザクションを開始せずにトランザクションを実行する)を参照してください。 +- 1 つのトランザクションで複数のミューテーションを実行することはサポートされていません。 + +::: + +### 詳細はこちら + +- [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardb/3.13.1/index.html) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-primitive-crud-interface.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-primitive-crud-interface.mdx new file mode 100644 index 00000000..465278dd --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-non-transactional-storage-operations-through-primitive-crud-interface.mdx @@ -0,0 +1,882 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# プリミティブ CRUD インターフェースを介して非トランザクションストレージ操作を実行する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、プリミティブ CRUD インターフェース (Storage API とも呼ばれる) を通じて非トランザクションストレージ操作を実行する方法について説明します。このガイドでは、読者が ScalarDB について高度な知識を持っていることを前提としています。 + +既存のストレージおよびデータベースシステム上でストレージに依存しない、またはデータベースに依存しない ACID トランザクションを実現するための鍵の 1 つは、ScalarDB が提供するストレージ抽象化機能です。ストレージ抽象化は、[データモデル](design.mdx#データモデル) と、データモデルに基づいて操作を発行する API (Storage API) を定義します。 + +ほとんどの場合、[Transactional API](api-guide.mdx#transactional-api) を使用することになりますが、別のオプションとして Storage API を使用することもできます。 + +Storage API を使用する利点は次のとおりです。 + +- トランザクション API と同様に、基盤となるストレージ実装についてあまり気にせずにアプリケーションコードを作成できます。 +- アプリケーション内の一部のデータに対してトランザクションが必要ない場合は、Storage API を使用してトランザクションを部分的に回避し、実行を高速化できます。 + +:::warning + +ストレージ API を直接使用したり、トランザクション API とストレージ API を混在させたりした場合、予期しない動作が発生する可能性があります。たとえば、ストレージ API はトランザクション機能を提供できないため、操作の実行時に障害が発生すると、API によって異常やデータの不整合が発生する可能性があります。 + +したがって、ストレージ API の使用には *非常に* 注意し、何をしているのかを正確に理解している場合にのみ使用してください。 + +::: + +## ストレージ API の例 + +このセクションでは、基本的な電子マネーアプリケーションでストレージ API を使用する方法について説明します。 + +:::warning + +この例では電子マネーアプリケーションが簡略化されており、実稼働環境には適していません。 + +::: + +### ScalarDB の設定 + +開始する前に、[ScalarDB をはじめよう](getting-started-with-scalardb.mdx) で説明されているのと同じ方法で ScalarDB を設定する必要があります。 + +これを念頭に置いて、このストレージ API の例では、設定ファイル `scalardb.properties` が存在することを前提としています。 + +### データベーススキーマの設定 + +アプリケーションでデータベーススキーマ (データを整理する方法) を定義する必要があります。サポートされているデータ型の詳細については、[ScalarDB と他のデータベース間のデータ型マッピング](schema-loader.mdx#scalardb-と他のデータベース間のデータ型マッピング)を参照してください。 + +この例では、`scalardb/docs/getting-started` ディレクトリに `emoney-storage.json` という名前のファイルを作成します。次に、次の JSON コードを追加してスキーマを定義します。 + +:::note + +次の JSON では、`transaction` フィールドが `false` に設定されており、このテーブルを Storage API で使用する必要があることを示しています。 + +::: + +```json +{ + "emoney.account": { + "transaction": false, + "partition-key": [ + "id" + ], + "clustering-key": [], + "columns": { + "id": "TEXT", + "balance": "INT" + } + } +} +``` + +スキーマを適用するには、[ScalarDB Releases](https://github.com/scalar-labs/scalardb/releases) ページに移動し、使用している ScalarDB のバージョンに一致する ScalarDB Schema Loader を `getting-started` フォルダーにダウンロードします。 + +次に、`` をダウンロードした ScalarDB Schema Loader のバージョンに置き換えて、次のコマンドを実行します。 + +```console +java -jar scalardb-schema-loader-.jar --config scalardb.properties -f emoney-storage.json +``` + +### サンプルコード + +以下は、Storage API を使用する電子マネーアプリケーションのサンプルソースコードです。 + +:::warning + +前述のとおり、Storage API はトランザクション機能を提供できないため、操作の実行中に障害が発生すると、API によって異常やデータの不整合が発生する可能性があります。したがって、Storage API の使用には十分注意し、何をしているのかを正確に理解している場合にのみ使用してください。 + +::: + +```java +public class ElectronicMoney { + + private static final String SCALARDB_PROPERTIES = + System.getProperty("user.dir") + File.separator + "scalardb.properties"; + private static final String NAMESPACE = "emoney"; + private static final String TABLENAME = "account"; + private static final String ID = "id"; + private static final String BALANCE = "balance"; + + private final DistributedStorage storage; + + public ElectronicMoney() throws IOException { + StorageFactory factory = StorageFactory.create(SCALARDB_PROPERTIES); + storage = factory.getStorage(); + } + + public void charge(String id, int amount) throws ExecutionException { + // Retrieve the current balance for id + Get get = + Get.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, id)) + .build(); + Optional result = storage.get(get); + + // Calculate the balance + int balance = amount; + if (result.isPresent()) { + int current = result.get().getInt(BALANCE); + balance += current; + } + + // Update the balance + Put put = + Put.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, id)) + .intValue(BALANCE, balance) + .build(); + storage.put(put); + } + + public void pay(String fromId, String toId, int amount) throws ExecutionException { + // Retrieve the current balances for ids + Get fromGet = + Get.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, fromId)) + .build(); + Get toGet = + Get.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, toId)) + .build(); + Optional fromResult = storage.get(fromGet); + Optional toResult = storage.get(toGet); + + // Calculate the balances (it assumes that both accounts exist) + int newFromBalance = fromResult.get().getInt(BALANCE) - amount; + int newToBalance = toResult.get().getInt(BALANCE) + amount; + if (newFromBalance < 0) { + throw new RuntimeException(fromId + " doesn't have enough balance."); + } + + // Update the balances + Put fromPut = + Put.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, fromId)) + .intValue(BALANCE, newFromBalance) + .build(); + Put toPut = + Put.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, toId)) + .intValue(BALANCE, newToBalance) + .build(); + storage.put(fromPut); + storage.put(toPut); + } + + public int getBalance(String id) throws ExecutionException { + // Retrieve the current balances for id + Get get = + Get.newBuilder() + .namespace(NAMESPACE) + .table(TABLENAME) + .partitionKey(Key.ofText(ID, id)) + .build(); + Optional result = storage.get(get); + + int balance = -1; + if (result.isPresent()) { + balance = result.get().getInt(BALANCE); + } + return balance; + } + + public void close() { + storage.close(); + } +} +``` + +## ストレージ API ガイド + +ストレージ API は、管理 API と CRUD API で設定されています。 + +### 管理 API + +このセクションで説明するように、管理操作をプログラムで実行できます。 + +:::note + +管理操作を実行するために使用できる別の方法は、[Schema Loader](schema-loader.mdx) を使用することです。 + +::: + +#### `DistributedStorageAdmin` インスタンスを取得する + +管理操作を実行するには、まず `DistributedStorageAdmin` インスタンスを取得する必要があります。次のように `StorageFactory` から `DistributedStorageAdmin` インスタンスを取得できます。 + +```java +StorageFactory storageFactory = StorageFactory.create(""); +DistributedStorageAdmin admin = storageFactory.getStorageAdmin(); +``` + +設定の詳細については、[ScalarDB 設定](configurations.mdx)を参照してください。 + +すべての管理操作を実行したら、次のように `DistributedStorageAdmin` インスタンスを閉じる必要があります。 + +```java +admin.close(); +``` + +#### 名前空間を作成する + +テーブルは 1 つの名前空間に属するため、テーブルを作成する前に名前空間を作成する必要があります。 + +名前空間は次のように作成できます。 + +```java +// Create the namespace "ns". If the namespace already exists, an exception will be thrown. +admin.createNamespace("ns"); + +// Create the namespace only if it does not already exist. +boolean ifNotExists = true; +admin.createNamespace("ns", ifNotExists); + +// Create the namespace with options. +Map options = ...; +admin.createNamespace("ns", options); +``` + +作成オプションの詳細については、[作成オプション](api-guide.mdx#作成オプション)を参照してください。 + +#### テーブルを作成する + +テーブルを作成するときは、テーブルメタデータを定義してからテーブルを作成する必要があります。 + +テーブルメタデータを定義するには、`TableMetadata` を使用できます。次に、テーブルの列、パーティションキー、クラスタリングキー (クラスタリング順序を含む)、およびセカンダリインデックスを定義する方法を示します。 + +```java +// Define the table metadata. +TableMetadata tableMetadata = + TableMetadata.newBuilder() + .addColumn("c1", DataType.INT) + .addColumn("c2", DataType.TEXT) + .addColumn("c3", DataType.BIGINT) + .addColumn("c4", DataType.FLOAT) + .addColumn("c5", DataType.DOUBLE) + .addPartitionKey("c1") + .addClusteringKey("c2", Scan.Ordering.Order.DESC) + .addClusteringKey("c3", Scan.Ordering.Order.ASC) + .addSecondaryIndex("c4") + .build(); +``` + +ScalarDB のデータモデルの詳細については、[データモデル](design.mdx#データモデル)を参照してください。 + +次に、次のようにテーブルを作成します。 + +```java +// Create the table "ns.tbl". If the table already exists, an exception will be thrown. +admin.createTable("ns", "tbl", tableMetadata); + +// Create the table only if it does not already exist. +boolean ifNotExists = true; +admin.createTable("ns", "tbl", tableMetadata, ifNotExists); + +// Create the table with options. +Map options = ...; +admin.createTable("ns", "tbl", tableMetadata, options); +``` + +#### セカンダリインデックスを作成する + +セカンダリインデックスは次のように作成できます。 + +```java +// Create a secondary index on column "c5" for table "ns.tbl". If a secondary index already exists, an exception will be thrown. +admin.createIndex("ns", "tbl", "c5"); + +// Create the secondary index only if it does not already exist. +boolean ifNotExists = true; +admin.createIndex("ns", "tbl", "c5", ifNotExists); + +// Create the secondary index with options. +Map options = ...; +admin.createIndex("ns", "tbl", "c5", options); +``` + +#### テーブルに新しい列を追加する + +次のように、テーブルに新しい非パーティションキー列を追加できます。 + +```java +// Add a new column "c6" with the INT data type to the table "ns.tbl". +admin.addNewColumnToTable("ns", "tbl", "c6", DataType.INT) +``` + +:::warning + +テーブルに新しい列を追加する場合は、基盤となるストレージによって実行時間が大きく異なる可能性があるため、慎重に検討する必要があります。それに応じて計画を立て、特にデータベースが本番環境で実行されている場合は、次の点を考慮してください。 + +- **Cosmos DB for NoSQL および DynamoDB の場合:** テーブルスキーマは変更されないため、列の追加はほぼ瞬時に行われます。別のテーブルに格納されているテーブルメタデータのみが更新されます。 +- **Cassandra の場合:** 列を追加すると、スキーマメタデータのみが更新され、既存のスキーマレコードは変更されません。クラスタートポロジが実行時間の主な要因です。スキーマメタデータの変更は、ゴシッププロトコルを介して各クラスターノードに共有されます。このため、クラスターが大きいほど、すべてのノードが更新されるまでの時間が長くなります。 +- **リレーショナルデータベース (MySQL、Oracle など) の場合:** 列の追加は実行にそれほど時間がかかりません。 + +::: + +#### テーブルを切り捨てる + +テーブルを切り捨てるには、次のようにします。 + +```java +// Truncate the table "ns.tbl". +admin.truncateTable("ns", "tbl"); +``` + +#### セカンダリインデックスを削除する + +セカンダリインデックスは次のように削除できます。 + +```java +// Drop the secondary index on column "c5" from table "ns.tbl". If the secondary index does not exist, an exception will be thrown. +admin.dropIndex("ns", "tbl", "c5"); + +// Drop the secondary index only if it exists. +boolean ifExists = true; +admin.dropIndex("ns", "tbl", "c5", ifExists); +``` + +#### テーブルを削除する + +テーブルを削除するには、次のようにします。 + +```java +// Drop the table "ns.tbl". If the table does not exist, an exception will be thrown. +admin.dropTable("ns", "tbl"); + +// Drop the table only if it exists. +boolean ifExists = true; +admin.dropTable("ns", "tbl", ifExists); +``` + +#### 名前空間を削除する + +名前空間を削除するには、次のようにします。 + +```java +// Drop the namespace "ns". If the namespace does not exist, an exception will be thrown. +admin.dropNamespace("ns"); + +// Drop the namespace only if it exists. +boolean ifExists = true; +admin.dropNamespace("ns", ifExists); +``` + +#### 既存の名前空間を取得する + +既存の名前空間は次のように取得できます。 + +```java +Set namespaces = admin.getNamespaceNames(); +``` + +#### 名前空間のテーブルを取得する + +名前空間のテーブルは次のように取得できます。 + +```java +// Get the tables of the namespace "ns". +Set tables = admin.getNamespaceTableNames("ns"); +``` + +#### テーブルメタデータを取得する + +テーブルメタデータは次のように取得できます。 + +```java +// Get the table metadata for "ns.tbl". +TableMetadata tableMetadata = admin.getTableMetadata("ns", "tbl"); +``` + +#### 名前空間を修復する + +名前空間が不明な状態の場合 (名前空間が基盤となるストレージに存在するが ScalarDB メタデータが存在しない、またはその逆)、このメソッドは必要に応じて名前空間とそのメタデータを再作成します。 + +名前空間は次のように修復できます。 + +```java +// Repair the namespace "ns" with options. +Map options = ...; + admin.repairNamespace("ns", options); +``` + +#### テーブルを修復する + +テーブルが不明な状態の場合 (テーブルは基盤となるストレージに存在するが ScalarDB メタデータは存在しない、またはその逆)、このメソッドは必要に応じてテーブル、そのセカンダリインデックス、およびそのメタデータを再作成します。 + +テーブルは次のように修復できます。 + +```java +// Repair the table "ns.tbl" with options. +TableMetadata tableMetadata = + TableMetadata.newBuilder() + ... + .build(); +Map options = ...; +admin.repairTable("ns", "tbl", tableMetadata, options); +``` + +#### 最新の ScalarDB API をサポートするように環境をアップグレードする + +ScalarDB API の最新バージョンをサポートするように ScalarDB 環境をアップグレードできます。通常、リリースノートに記載されているように、アプリケーション環境が使用する ScalarDB バージョンを更新した後、このメソッドを実行する必要があります。 + +```java +// Upgrade the ScalarDB environment. +Map options = ...; +admin.upgrade(options); +``` + +### CRUD 操作を実装する + +次のセクションでは、CRUD 操作について説明します。 + +#### `DistributedStorage` インスタンスを取得する + +Storage API で CRUD 操作を実行するには、`DistributedStorage` インスタンスを取得する必要があります。 + +インスタンスは次のように取得できます。 + +```java +StorageFactory storageFactory = StorageFactory.create(""); +DistributedStorage storage = storageFactory.getStorage(); +``` + +すべての CRUD 操作を実行したら、次のように `DistributedStorage` インスタンスを閉じる必要があります。 + +```java +storage.close(); +``` + +#### `Get` 操作 + +`Get` は、プライマリーキーで指定された単一のレコードを取得する操作です。 + +まず `Get` オブジェクトを作成し、次に次のように `storage.get()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Get` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .projections("c1", "c2", "c3", "c4") + .build(); + +// Execute the `Get` operation. +Optional result = storage.get(get); +``` + +また、投影を指定して、返される列を選択することもできます。 + +`Key` オブジェクトの構築方法の詳細については、[キーの構築](api-guide.mdx#キーの構築)を参照してください。また、`Result` オブジェクトの処理方法の詳細については、[Result オブジェクトの処理](api-guide.mdx#result-オブジェクトの処理)を参照してください。 + +##### 一貫性レベルを指定する + +Storage API の各操作 (`Get`、`Scan`、`Put`、`Delete`) で一貫性レベルを次のように指定できます。 + +```java +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .consistency(Consistency.LINEARIZABLE) // Consistency level + .build(); +``` + +次の表は、3 つの一貫性レベルについて説明しています。 + +| 一貫性レベル | 説明 | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `SEQUENTIAL` | 順次一貫性は、基礎となるストレージ実装によってすべての操作が何らかの順次順序で実行されるようにされ、各プロセスの操作がこの順序で実行されることを前提としています。 | +| `EVENTUAL` | 結果一貫性は、基礎となるストレージ実装によってすべての操作が最終的に実行されることを前提としています。 | +| `LINEARIZABLE` | 線形化可能な一貫性は、基礎となるストレージ実装によって各操作が呼び出しから完了までの間のある時点でアトミックに実行されるようにされることを前提としています。 | + +##### セカンダリインデックスを使用して `Get` を実行する + +セカンダリインデックスを使用して `Get` 操作を実行できます。 + +パーティションキーを指定する代わりに、次のようにインデックスキー (インデックス付き列) を指定してセカンダリインデックスを使用できます。 + +```java +// Create a `Get` operation by using a secondary index. +Key indexKey = Key.ofFloat("c4", 1.23F); + +Get get = + Get.newBuilder() + .namespace("ns") + .table("tbl") + .indexKey(indexKey) + .projections("c1", "c2", "c3", "c4") + .build(); + +// Execute the `Get` operation. +Optional result = storage.get(get); +``` + +:::note + +結果に複数のレコードがある場合、`storage.get()` は例外をスローします。 + +::: + +#### `Scan` 操作 + +`Scan` は、パーティション内の複数のレコードを取得する操作です。`Scan` 操作では、クラスタリングキーの境界とクラスタリングキー列の順序を指定できます。 + +まず `Scan` オブジェクトを作成し、次に次のように `storage.scan()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Scan` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key startClusteringKey = Key.of("c2", "aaa", "c3", 100L); +Key endClusteringKey = Key.of("c2", "aaa", "c3", 300L); + +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .start(startClusteringKey, true) // Include startClusteringKey + .end(endClusteringKey, false) // Exclude endClusteringKey + .projections("c1", "c2", "c3", "c4") + .orderings(Scan.Ordering.desc("c2"), Scan.Ordering.asc("c3")) + .limit(10) + .build(); + +// Execute the `Scan` operation. +Scanner scanner = storage.scan(scan); +``` + +クラスタリングキー境界を省略するか、`start` 境界または `end` 境界のいずれかを指定できます。`orderings` を指定しない場合は、テーブルの作成時に定義したクラスタリング順序で結果が並べられます。 + +さらに、`projections` を指定して返される列を選択し、`limit` を使用して `Scan` 操作で返されるレコードの数を指定できます。 + +##### `Scanner` オブジェクトの処理 + +Storage API の `Scan` 操作は `Scanner` オブジェクトを返します。 + +`Scanner` オブジェクトから結果を 1 つずつ取得する場合は、次のように `one()` メソッドを使用できます。 + +```java +Optional result = scanner.one(); +``` + +または、すべての結果のリストを取得する場合は、次のように `all()` メソッドを使用できます。 + +```java +List results = scanner.all(); +``` + +さらに、`Scanner` は `Iterable` を実装しているので、次のように for-each ループ内で `Scanner` を使用できます。 + +```java +for (Result result : scanner) { + ... +} +``` + +結果を取得した後は、`Scanner` オブジェクトを閉じることを忘れないでください。 + +```java +scanner.close(); +``` + +または、次のように `try`-with-resources を使用することもできます。 + +```java +try (Scanner scanner = storage.scan(scan)) { + ... +} +``` + +##### セカンダリインデックスを使用して `Scan` を実行する + +セカンダリインデックスを使用して `Scan` 操作を実行できます。 + +パーティションキーを指定する代わりに、次のようにインデックスキー (インデックス付き列) を指定してセカンダリインデックスを使用できます。 + +```java +// Create a `Scan` operation by using a secondary index. +Key indexKey = Key.ofFloat("c4", 1.23F); + +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .indexKey(indexKey) + .projections("c1", "c2", "c3", "c4") + .limit(10) + .build(); + +// Execute the `Scan` operation. +Scanner scanner = storage.scan(scan); +``` + +:::note + +セカンダリインデックスを使用して、`Scan` でクラスタリングキーの境界と順序を指定することはできません。 + +::: + +##### パーティションキーを指定せずに `Scan` を実行して、テーブルのすべてのレコードを取得します + +パーティションキーを指定せずに `Scan` 操作を実行できます。 + +ビルダーで `partitionKey()` メソッドを呼び出す代わりに、次のように `all()` メソッドを呼び出して、パーティションキーを指定せずにテーブルをスキャンできます。 + +```java +// Create a `Scan` operation without specifying a partition key. +Key partitionKey = Key.ofInt("c1", 10); +Key startClusteringKey = Key.of("c2", "aaa", "c3", 100L); +Key endClusteringKey = Key.of("c2", "aaa", "c3", 300L); + +Scan scan = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .all() + .projections("c1", "c2", "c3", "c4") + .limit(10) + .build(); + +// Execute the `Scan` operation. +Scanner scanner = storage.scan(scan); +``` + +:::note + +パーティションキーを指定せずに `Scan` でクラスタリングキーの境界と順序を指定することはできません。 + +::: + +#### `Put` 操作 + +`Put` は、プライマリーキーで指定されたレコードを配置する操作です。この操作はレコードの upsert 操作として動作し、レコードが存在する場合はレコードを更新し、レコードが存在しない場合はレコードを挿入します。 + +まず `Put` オブジェクトを作成し、次に次のように `storage.put()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Put` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +// Execute the `Put` operation. +storage.put(put); +``` + +次のように `null` 値を持つレコードを配置することもできます。 + +```java +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", null) + .doubleValue("c5", null) + .build(); +``` + +:::note + +`Put` 操作ビルダーで `enableImplicitPreRead()`、`disableImplicitPreRead()`、または `implicitPreReadEnabled()` を指定した場合、それらは無視されます。 + +::: + +#### `Delete` 操作 + +`Delete` は、プライマリーキーで指定されたレコードを削除する操作です。 + +まず `Delete` オブジェクトを作成し、次に次のように `storage.delete()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create a `Delete` operation. +Key partitionKey = Key.ofInt("c1", 10); +Key clusteringKey = Key.of("c2", "aaa", "c3", 100L); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .build(); + +// Execute the `Delete` operation. +storage.delete(delete); +``` + +#### 条件付きの `Put` および `Delete` + +条件をチェックするロジックを実装することで、操作を実行する前に満たす必要がある任意の条件 (たとえば、銀行口座の残高は 0 以上である必要があります) を記述できます。または、`Put` や `Delete` などのミューテーション操作で単純な条件を記述することもできます。 + +`Put` または `Delete` 操作に条件が含まれている場合、指定された条件が満たされた場合にのみ操作が実行されます。操作の実行時に条件が満たされていない場合は、`NoMutationException` という例外がスローされます。 + +##### `Put` の条件 + +Storage API の `Put` 操作では、指定された条件が一致した場合にのみ `Put` 操作が実行されるようにする条件を指定できます。この操作は、条件が比較され、更新がアトミックに実行される比較とスワップの操作に似ています。 + +`Put` 操作では次のように条件を指定できます。 + +```java +// Build a condition. +MutationCondition condition = + ConditionBuilder.putIf(ConditionBuilder.column("c4").isEqualToFloat(0.0F)) + .and(ConditionBuilder.column("c5").isEqualToDouble(0.0)) + .build(); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .condition(condition) // condition + .build(); +``` + +`putIf` 条件以外に、`putIfExists` および `putIfNotExists` 条件を次のように指定できます。 + +```java +// Build a `putIfExists` condition. +MutationCondition putIfExistsCondition = ConditionBuilder.putIfExists(); + +// Build a `putIfNotExists` condition. +MutationCondition putIfNotExistsCondition = ConditionBuilder.putIfNotExists(); +``` + +##### `Delete` の条件 + +`Put` 操作と同様に、Storage API の `Delete` 操作でも条件を指定できます。 + +`Delete` 操作では、次のように条件を指定できます。 + +```java +// Build a condition. +MutationCondition condition = + ConditionBuilder.deleteIf(ConditionBuilder.column("c4").isEqualToFloat(0.0F)) + .and(ConditionBuilder.column("c5").isEqualToDouble(0.0)) + .build(); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKey) + .condition(condition) // condition + .build(); +``` + +`deleteIf` 条件を使用するだけでなく、次のように `deleteIfExists` 条件を指定することもできます。 + +```java +// Build a `deleteIfExists` condition. +MutationCondition deleteIfExistsCondition = ConditionBuilder.deleteIfExists(); +``` + +#### ミューテート操作 + +ミューテートは、単一のパーティションで複数のミューテート (`Put` および `Delete` 操作) を実行する操作です。 + +まずミューテートオブジェクトを作成し、次に次のように `storage.mutate()` メソッドを使用してオブジェクトを実行する必要があります。 + +```java +// Create `Put` and `Delete` operations. +Key partitionKey = Key.ofInt("c1", 10); + +Key clusteringKeyForPut = Key.of("c2", "aaa", "c3", 100L); + +Put put = + Put.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKeyForPut) + .floatValue("c4", 1.23F) + .doubleValue("c5", 4.56) + .build(); + +Key clusteringKeyForDelete = Key.of("c2", "bbb", "c3", 200L); + +Delete delete = + Delete.newBuilder() + .namespace("ns") + .table("tbl") + .partitionKey(partitionKey) + .clusteringKey(clusteringKeyForDelete) + .build(); + +// Execute the operations. +storage.mutate(Arrays.asList(put, delete)); +``` + +:::note + +Mutate 操作では、単一のパーティションのミューテーションのみが受け入れられます。それ以外の場合は、例外がスローされます。 + +さらに、Mutate 操作で複数の条件を指定すると、すべての条件が一致した場合にのみ操作が実行されます。 + +::: + +#### CRUD 操作のデフォルト名前空間 + +すべての CRUD 操作のデフォルト名前空間は、ScalarDB 設定のプロパティを使用して設定できます。 + +```properties +scalar.db.default_namespace_name= +``` + +名前空間を指定しない操作では、設定で設定されたデフォルトの名前空間が使用されます。 + +```java +// This operation will target the default namespace. +Scan scanUsingDefaultNamespace = + Scan.newBuilder() + .table("tbl") + .all() + .build(); +// This operation will target the "ns" namespace. +Scan scanUsingSpecifiedNamespace = + Scan.newBuilder() + .namespace("ns") + .table("tbl") + .all() + .build(); +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-transactions-through-scalardb-core-library.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-transactions-through-scalardb-core-library.mdx new file mode 100644 index 00000000..5402ef0a --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/run-transactions-through-scalardb-core-library.mdx @@ -0,0 +1,222 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB コアライブラリを介してトランザクションを実行する + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このガイドでは、ScalarDB コアライブラリを使用して、ScalarDB プロパティファイルを設定し、1 フェーズまたは 2 フェーズのコミットインターフェイスを介してトランザクションを実行するためのスキーマを作成する方法について説明します。 + +## 準備 + +このガイドでは、ScalarDB サンプルリポジトリのサンプルを使用して、データベースと ScalarDB をセットアップします。 + +### ScalarDB サンプルリポジトリのクローンを作成する + +**Terminal** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-sample +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](requirements.mdx#データベース)を参照してください。 + + + +

MySQLをローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の MySQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://localhost:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://localhost:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//localhost:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の SQL Server のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://localhost:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://localhost:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントをお持ちでない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を設定する

+ + [既定の整合性レベルを設定する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル**を**強力**に設定します。 + +

ScalarDB を設定する

+ + 以下の手順では、ローカル環境に JDK が適切にインストールおよび設定されており、Azure で Cosmos DB for NoSQL アカウントが適切に設定されていることを前提としています。 + + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。`scalar.db.contact_points` と `scalar.db.password` の値は、説明に従って必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-sample` ディレクトリの `docker-compose.yml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB を設定する

+ + `scalardb-samples/scalardb-sample` ディレクトリの **database.properties** ファイルには、ScalarDB のデータベース設定が含まれています。**database.properties** ファイル内の Cassandra のプロパティのコメントを解除して、設定が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=localhost + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +ScalarDB の設定の包括的なリストについては、[ScalarDB 設定](configurations.mdx)を参照してください。 + +## スキーマを作成またはインポートする + +ScalarDB には、実装固有のデータモデルとスキーマにマップされる独自のデータモデルとスキーマがあります。 + +- **データベーススキーマを作成する必要がありますか?** [ScalarDB Schema Loader](schema-loader.mdx) を参照してください。 +- **既存のデータベースをインポートする必要がありますか?** [ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](schema-loader-import.mdx)を参照してください。 + +## Javaを使用してトランザクションを実行する + +- **1 フェーズコミットインターフェイスを使用してトランザクションを実行しますか?** [ScalarDB Java API ガイド](api-guide.mdx#transactional-api)を参照してください。 +- **2 フェーズコミットインターフェイスを使用してトランザクションを実行しますか?** [2 フェーズコミットインターフェースを使用したトランザクション](two-phase-commit-transactions.mdx)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/getting-started.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/getting-started.mdx new file mode 100644 index 00000000..4f60b24a --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/getting-started.mdx @@ -0,0 +1,101 @@ +--- +tags: + - Community +--- + +# ScalarDB Analytics with PostgreSQL をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このドキュメントでは、ScalarDB Analytics with PostgreSQL の使用を開始する方法について説明します。ScalarDB Analytics with PostgreSQL がすでにインストールされており、必要なサービスがすべて実行されていることを前提としています。そのような環境がない場合は、[Docker を使用してローカル環境に ScalarDB Analytics with PostgreSQL をインストールする方法](./installation.mdx)の手順に従ってください。ScalarDB Analytics with PostgreSQL は PostgreSQL 経由でクエリを実行するため、PostgreSQL にクエリを送信するための `psql` クライアントまたは別の PostgreSQL クライアントがすでにあることも前提としています。 + +## ScalarDB Analytics with PostgreSQL とは + +ユニバーサルトランザクションマネージャーである ScalarDB は、主にトランザクションワークロードを対象としているため、リレーショナルクエリの限られたサブセットをサポートしています。 + +ScalarDB Analytics with PostgreSQL は、PostgreSQL とその外部データラッパー (FDW) 拡張機能を使用して、ScalarDB の機能を拡張し、ScalarDB が管理するデータに対する分析クエリを処理します。 + +ScalarDB Analytics with PostgreSQL は、主に PostgreSQL と Schema Importer の 2 つのコンポーネントで構成されています。 + +PostgreSQL はサービスとして実行され、ユーザーからのクエリを受け入れて処理します。FDW 拡張機能は、ScalarDB が管理するバックエンドストレージからデータを読み取るために使用されます。Schema Importer は、ScalarDB データベースのスキーマを PostgreSQL にインポートするツールです。これにより、ユーザーは PostgreSQL 側のテーブル (ScalarDB 側のテーブルと同一) を表示できます。 + +## ScalarDB データベースをセットアップする + +まず、ScalarDB Analytics with PostgreSQL で分析クエリを実行するには、1 つ以上の ScalarDB データベースが必要です。独自の ScalarDB データベースがある場合は、このセクションをスキップして、代わりにそのデータベースを使用できます。[scalardb-samples/scalardb-analytics-postgresql-sample](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-analytics-postgresql-sample) プロジェクトを使用する場合は、プロジェクトディレクトリで次のコマンドを実行してサンプルデータベースを設定できます。 + +```console +docker compose run --rm schema-loader \ + -c /etc/scalardb.properties \ + --schema-file /etc/schema.json \ + --coordinator \ + --no-backup \ + --no-scaling +``` + +このコマンドは、DynamoDB、PostgreSQL、Cassandra で設定される [複数のストレージインスタンス](../multi-storage-transactions.mdx)を設定します。次に、これらのストレージにマップされる `dynamons`、`postgresns`、`cassandrans` の名前空間を作成し、[ScalarDB Schema Loader](https://scalardb.scalar-labs.com/docs/latest/schema-loader/)を使用して `dynamons.customer`、`postgresns.orders`、`cassandrans.lineitem` のテーブルを作成します。 + +![マルチストレージの概要](./images/multi-storage-overview.png) + +次のコマンドを実行すると、作成されたテーブルにサンプルデータをロードできます。 + +```console +docker compose run --rm sample-data-loader +``` + +## PostgreSQL に ScalarDB 管理下のデータベースのスキーマをインポートする + +次に、分析クエリを処理する PostgreSQL に ScalarDB 管理下のデータベースのスキーマをインポートします。ScalarDB Analytics with PostgreSQL には、この目的のためのツールである Schema Importer が用意されています。このツールを使用すると、分析クエリを実行するために必要なすべての準備が整います。 + +```console +docker compose run --rm schema-importer \ + import \ + --config /etc/scalardb.properties \ + --host analytics \ + --port 5432 \ + --database test \ + --user postgres \ + --password postgres \ + --namespace cassandrans \ + --namespace postgresns \ + --namespace dynamons \ + --config-on-postgres-host /etc/scalardb.properties +``` + +独自の ScalarDB データベースを使用する場合は、`--config` および `--config-on-postgres-host` オプションを ScalarDB 設定ファイルに置き換え、`--namespace` オプションをインポートする ScalarDB 名前空間に置き換える必要があります。 + +これにより、ScalarDB データベース内のテーブルと同じ名前のテーブル (正確にはビュー) が作成されます。この例では、`dynamons.customer`、`postgresns.orders`、および `cassandrans.lineitem` のテーブルが作成されます。列定義も ScalarDB データベースと同一です。これらのテーブルは、FDW を使用して ScalarDB データベースの基盤となるストレージに接続された [外部テーブル](https://www.postgresql.org/docs/current/sql-createforeigntable.html)です。したがって、PostgreSQL 内のこれらのテーブルを ScalarDB データベース内のテーブルと同等と見なすことができます。 + +![インポートされたスキーマ](./images/imported-schema.png) + +## 分析クエリを実行する + +これで、ScalarDB データベース内の同じデータを読み取るすべてのテーブルが揃い、PostgreSQL でサポートされている任意の分析クエリを実行できるようになりました。クエリを実行するには、`psql` またはその他のクライアントを使用して PostgreSQL に接続してください。 + +```console +psql -U postgres -h localhost test +Password for user postgres: + +> select c_mktsegment, count(*) from dynamons.customer group by c_mktsegment; + c_mktsegment | count +--------------+------- + AUTOMOBILE | 4 + BUILDING | 2 + FURNITURE | 1 + HOUSEHOLD | 2 + MACHINERY | 1 +(5 rows) +``` + +サンプルデータと追加の実作業の詳細については、サンプルアプリケーションページを参照してください。 + +## 注意事項 + +### 分離レベル + +ScalarDB Analytics with PostgreSQL は、**Read Committed** 分離レベルを設定してデータを読み取ります。この分離レベルにより、読み取るデータが過去にコミットされていることが保証されますが、特定の時点で一貫性のあるデータを読み取ることができることは保証されません。 + +### 書き込み操作はサポートされていません + +ScalarDB Analytics with PostgreSQL は、読み取り専用クエリのみをサポートします。`INSERT`、`UPDATE`、およびその他の書き込み操作はサポートされていません。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/images/imported-schema.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/images/imported-schema.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf8fea36f33d2915edc69c5c4df334566d9ad29 GIT binary patch literal 52511 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 Z&dK)8LV>9|Mey^r$i& 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 literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/installation.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/installation.mdx new file mode 100644 index 00000000..b1e66411 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/installation.mdx @@ -0,0 +1,64 @@ +--- +tags: + - Community +--- + +# Docker を使用してローカル環境に ScalarDB Analytics with PostgreSQL をインストールする方法 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このドキュメントでは、[Docker Compose](https://docs.docker.com/compose/) を使用して、Cassandra、PostgreSQL、および DynamoDB ローカルサーバーのマルチストレージバックエンドを使用して、ScalarDB Analytics with PostgreSQL を実行するローカル環境を設定する方法について説明します。 + +## 前提条件 + +- [Docker Engine](https://docs.docker.com/engine/) および [Docker Compose](https://docs.docker.com/compose/)。 + +プラットフォームに応じて、Docker ウェブサイトの手順に従ってください。 + +## ステップ 1. `scalardb-samples` リポジトリを複製します + +[scalardb-samples/scalardb-analytics-postgresql-sample](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-analytics-postgresql-sample) リポジトリは、ScalarDB Analytics with PostgreSQL を設定するためのサンプル設定を含むプロジェクトです。 + +scalardb-analytics-postgresql-sample アプリを実行するローカルマシン上の場所を決定します。次に、ターミナルを開き、`cd` コマンドを使用してその場所に移動し、次のコマンドを実行します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples.git +cd scalardb-samples/scalardb-analytics-postgresql-sample +``` + +## ステップ 2. ScalarDB Analytics with PostgreSQL サービスを起動する + +次のコマンドは、ScalarDB Analytics with PostgreSQL を提供する PostgreSQL インスタンスと、Docker コンテナ内の Cassandra、PostgreSQL、および DynamoDB ローカルのバックエンドサーバーを起動します。このコマンドを初めて実行すると、必要な Docker イメージが GitHub Container Registry からダウンロードされます。 + +```console +docker-compose up +``` + +コンテナをバックグラウンドで実行する場合は、`-d` (--detach) オプションを追加します。 + +```console +docker-compose up -d +``` + +すでに独自の ScalarDB データベースがあり、それをバックエンドサービスとして使用したい場合は、コンテナー内で追加のバックエンドサーバーを起動せずに、PostgreSQL インスタンスのみを起動できます。 + +```console +docker-compose up analytics +``` + +## ステップ 3. 分析クエリを実行する + +これで、必要なサービスがすべて実行されているはずです。分析クエリを実行するには、[ScalarDB Analytics with PostgreSQL の開始方法](./getting-started.mdx)を参照してください。 + +## ステップ 4. ScalarDB Analytics with PostgreSQL サービスをシャットダウンする + +コンテナをシャットダウンするには、方法に応じて、ターミナルで次のいずれかを実行します。 + +- フォアグラウンドでコンテナを起動した場合は、`docker-compose` が実行されている場所で Ctrl+C を押します。 +- バックグラウンドでコンテナを起動した場合は、次のコマンドを実行します。 + +```console +docker-compose down +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/scalardb-fdw.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/scalardb-fdw.mdx new file mode 100644 index 00000000..38345761 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/scalardb-fdw.mdx @@ -0,0 +1,183 @@ +--- +tags: + - Community +--- + +# ScalarDB FDW + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB FDW は、[ScalarDB](https://www.scalar-labs.com/scalardb/) の外部データラッパー (FDW) を実装する PostgreSQL 拡張機能です。 + +ScalarDB FDW は、Java Native Interface を使用して、FDW 内のライブラリとして ScalarDB を直接利用し、ScalarDB のスキャン操作を介して外部データベースからデータを読み取ります。 + +## 前提条件 + +環境に次の前提条件が設定されている必要があります。 + +### JDK + +ScalarDB と互換性のあるバージョンの Java Development Kit (JDK) をインストールする必要があります。さらに、JDK インストールディレクトリを指す `JAVA_HOME` 環境変数を設定する必要があります。 + +これらの拡張機能は内部で Java Native Interface (JNI) を使用するため、ライブラリ検索パスに `libjvm.so` などの Java 仮想マシン (JVM) の動的ライブラリを含める必要があることに注意してください。 + +### PostgreSQL + +この拡張機能は PostgreSQL 13 以降をサポートしています。PostgreSQL のインストール方法の詳細については、[サーバー管理](https://www.postgresql.org/docs/current/admin.html)の公式ドキュメントを参照してください。 + +## ビルドとインストール + +以下のコマンドを実行すると、この拡張機能をビルドしてインストールできます。 + +```console +make install +``` + +### 一般的なビルドエラー + +このセクションでは、発生する可能性のある一般的なビルドエラーについて説明します。 + +#### ld: -ljvm のライブラリが見つかりません + +通常、ビルドスクリプトは `libjvm.so` のパスを見つけ、それをライブラリ検索パスとして適切に設定しています。ただし、`ld: library not found for -ljvm` というエラーが発生した場合は、`libjvm.so` ファイルをデフォルトのライブラリ検索パスにコピーしてください。例: + +```console +ln -s //libjvm.so /usr/lib64/libjvm.so +``` + +## 使用方法 + +このセクションでは、ScalarDB の FDW の使用例と利用可能なオプションについて説明します。 + +### 例 + +次の例では、必要なコンポーネントをインストールして作成し、FDW 拡張機能を使用してクエリを実行する方法を示します。 + +#### 1. 拡張機能をインストールする + +拡張機能のインストール方法の詳細については、[ビルドとインストール](#ビルドとインストール)セクションを参照してください。 + +#### 2. 拡張機能を作成する + +拡張機能を作成するには、次のコマンドを実行します。 + +```sql +CREATE EXTENSION scalardb_fdw; +``` + +#### 3. 外部サーバーを作成する + +外部サーバーを作成するには、次のコマンドを実行します。 + +```sql +CREATE SERVER scalardb FOREIGN DATA WRAPPER scalardb_fdw OPTIONS ( + config_file_path '/path/to/scalardb.properties' +); +``` + +#### 4. ユーザーマッピングを作成する + +ユーザーマッピングを作成するには、次のコマンドを実行します。 + +```sql +CREATE USER MAPPING FOR PUBLIC SERVER scalardb; +``` + +#### 5. 外部テーブルを作成する + +外部テーブルを作成するには、次のコマンドを実行します。 + +```sql +CREATE FOREIGN TABLE sample_table ( + pk int, + ck1 int, + ck2 int, + boolean_col boolean, + bigint_col bigint, + float_col double precision, + double_col double precision, + text_col text, + blob_col bytea +) SERVER scalardb OPTIONS ( + namespace 'ns', + table_name 'sample_table' +); +``` + +#### 6. クエリを実行する + +クエリを実行するには、次のコマンドを実行します。 + +```sql +select * from sample_table; +``` + +### 使用可能なオプション + +ScalarDB FDW オブジェクトには次のオプションを設定できます。 + +#### `CREATE SERVER` + +ScalarDB 外部サーバーオブジェクトには次のオプションを設定できます。 + +| 名前 | 必須 | タイプ | 説明 | +| ------------------ | ------- | -------- | ------------------------------------------- | +| `config_file_path` | **はい** | `string` | ScalarDB 設定ファイルへのパス。 | +| `max_heap_size` | いいえ | `string` | JVM の最大ヒープサイズ。形式は `-Xmx` と同じです。 | + +#### `CREATE USER MAPPING` + +現在、`CREATE USER MAPPING` のオプションはありません。 + +#### `CREATE FOREIGN SERVER` + +ScalarDB 外部テーブルオブジェクトには次のオプションを設定できます。 + +| 名前 | 必須 | タイプ | 説明 | +| ------------ | ------- | -------- | -------------------------------------------- | +| `namespace` | **はい** | `string` | ScalarDB インスタンス内のテーブルの名前空間の名前。 | +| `table_name` | **はい** | `string` | ScalarDB インスタンス内のテーブルの名前。 | + +### データ型のマッピング + +| ScalarDB | PostgreSQL | +| -------- | ---------------- | +| BOOLEAN | boolean | +| INT | int | +| BIGINT | bigint | +| FLOAT | float | +| DOUBLE | double precision | +| TEXT | text | +| BLOB | bytea | + +## テスト + +このセクションでは、ScalarDB の FDW をテストする方法について説明します。 + +### テスト用の ScalarDB インスタンスの設定 + +ScalarDB の FDW をテストする前に、テストデータを含む実行中の ScalarDB インスタンスが必要です。次のコマンドを実行して、インスタンスを設定し、テストデータをロードできます。 + +```console +./test/setup.sh +``` + +インスタンスをリセットする場合は、次のコマンドを実行してから、上記のセットアップコマンドを再度実行します。 + +```console +./test/cleanup.sh +``` + +### 回帰テストを実行する + +FDW 拡張機能をインストールした後、次のコマンドを実行すると、回帰テストを実行できます。 + +```console +make installcheck +``` + +## 制限事項 + +- この拡張機能は、ScalarDB 管理データベースでの分析クエリ処理を可能にすることを目的としています。したがって、この拡張機能は ScalarDB からのデータの読み取りのみをサポートします。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/schema-importer.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/schema-importer.mdx new file mode 100644 index 00000000..c724d4c6 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-postgresql/schema-importer.mdx @@ -0,0 +1,68 @@ +--- +tags: + - Community +--- + +# Schema Importer + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +Schema Importer は、PostgreSQL を自動的に設定するための CLI ツールです。このツールを使用すると、PostgreSQL データベースに、ScalarDB インスタンスと同じデータベースオブジェクト (名前空間やテーブルなど) を持たせることができます。 + +Schema Importer は、ScalarDB 設定ファイルを読み取り、ScalarDB で定義されているテーブルのスキーマを取得し、対応する外部データラッパーの外部テーブルとビューをこの順序で作成します。詳細については、[PostgreSQL での ScalarDB 分析の開始](getting-started.mdx)を参照してください。 + +## Schema Importer のビルド + +[Gradle](https://gradle.org/) を使用して Schema Importer をビルドできます。Schema Importer をビルドするには、次のコマンドを実行します。 + +```console +./gradlew build +``` + +`java -jar` を使用して Schema Importer を起動できるように、Fat JAR ファイルを作成する必要があります。Fat JAR を作成するには、次のコマンドを実行します。 + + ```console + ./gradlew shadowJar + ``` + +fat JAR をビルドすると、`app/build/libs/` ディレクトリに fat JAR ファイルが作成されます。 + +## Schema Importer を実行する + +fat JAR ファイルを使用して Schema Importer を実行するには、次のコマンドを実行します。 + +```console +java -jar +``` +利用可能なオプションは次のとおりです。 + +| 名前 | 必須 | 説明 | デフォルト | +| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------- | ------------------------------- | +| `--config` | **はい** | ScalarDB 設定ファイルへのパス | | +| `--config-on-postgres-host` | No | PostgreSQL を実行しているホスト上の ScalarDB 設定ファイルへのパス | `--config` と同じ値が使用されます。 | +| `--namespace`, `-n` | **はい** | 分析インスタンスにインポートする名前空間。2 つ以上の名前空間がある場合は、`--namespace` オプションを複数回指定できます。 | | +| `--host` | いいえ | PostgreSQL ホスト | localhost | +| `--port` | いいえ | PostgreSQL ポート | 5432 | +| `--database` | いいえ | PostgreSQL ポート | postgres | +| `--user` | いいえ | PostgreSQL ユーザー | postgres | +| `--password` | いいえ | PostgreSQL パスワード | | +| `--debug` | いいえ | デバッグモードを有効にする | | + + +## Schema Importer のテスト + +Schema Importer をテストするには、次のコマンドを実行します。 + +```console +./gradlew test +``` + +## Schema Importer の Docker イメージをビルドする + +Schema Importer の Docker イメージをビルドするには、次のコマンドを実行します。`` は、使用する Schema Importer のタグバージョンに置き換えます。 + +```console +docker build -t ghcr.io/scalar-labs/scalardb-analytics-postgresql-schema-importer: -f ./app/Dockerfile . +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/README.mdx new file mode 100644 index 00000000..81c7417e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/README.mdx @@ -0,0 +1,36 @@ +--- +tags: + - Enterprise Option + - Private Preview +--- + +# ScalarDB Analytics with Spark + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +:::warning + +このバージョンの ScalarDB Analytics with Spark はプライベートプレビューでした。代わりにバージョン 3.14 以降を使用してください。 + +::: + +ScalarDB は、ユニバーサルトランザクションマネージャーとして、主にトランザクションワークロードを対象としているため、リレーショナルクエリの限定されたサブセットをサポートしています。 + +ScalarDB Analytics with Spark は、Apache Spark と Spark SQL を使用して、ScalarDB が管理するデータに対する分析クエリを処理するために ScalarDB の機能を拡張します。 + +ScalarDB Analytics with Spark は Spark カタログプラグインとして提供されるため、外部で管理されるデータソースをそのデータスキーマで読み取ることができます。このプラグインを使用すると、ScalarDB テーブルから同じスキーマを持つ Spark SQL テーブルとしてデータを読み取ることができます。 + +:::warning + +ScalarDB Analytics with Spark を使用するには、商用ライセンスが必要です。商用ライセンスが必要な場合は、[お問い合わせ](https://scalar-labs.com/contact_us/)ください。 + +::: + +## 参考資料 + +* ScalarDB Analytics with Spark を使用してアドホック分析クエリまたは開発アプリケーションを実行するには、[ScalarDB Analytics with Spark の使用開始](getting-started.mdx)を参照してください。 +* サンプルデータセットとアプリケーションを使用して ScalarDB Analytics with Spark を使用する方法に関するチュートリアルについては、[ScalarDB Analytics with Spark を使用してサンプルデータで分析クエリを実行する](../scalardb-samples/scalardb-analytics-spark-sample/README.mdx)を参照してください。 +* ScalarDB Analytics with Spark を設定する方法の詳細については、[ScalarDB Analytics with Spark の設定](configuration.mdx)を参照してください。 +* サポートされている Spark および Scala のバージョンについては、[ScalarDB Analytics with Spark のバージョン互換性](version-compatibility.mdx)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/configuration.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/configuration.mdx new file mode 100644 index 00000000..7a0fc439 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/configuration.mdx @@ -0,0 +1,135 @@ +--- +tags: + - Enterprise Option + - Private Preview +--- + +# ScalarDB Analytics with Spark の設定 + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +:::warning + +このバージョンの ScalarDB Analytics with Spark はプライベートプレビューでした。代わりにバージョン 3.14 以降を使用してください。 + +::: + +ScalarDB Analytics with Spark を設定する方法は 2 つあります: + +- `spark.conf` でプロパティを設定する +- ScalarDB Analytics with Spark が提供するヘルパーメソッドを使用する + +どちらの方法も概念的には同等のプロセスなので、好みに応じてどちらかを選択できます。 + +## `spark.conf` を使用して ScalarDB Analytics with Spark を設定する + +ScalarDB Analytics with Spark は Spark カスタムカタログプラグインとして提供されるため、`spark.conf` を介して ScalarDB Analytics with Spark を有効にできます。 + +```properties +spark.sql.catalog.scalardb_catalog = com.scalar.db.analytics.spark.datasource.ScalarDbCatalog +spark.sql.catalog.scalardb_catalog.config = //config.properties +spark.sql.catalog.scalardb_catalog.namespaces = , +spark.sql.catalog.scalardb_catalog.license.key = {"your":"license", "key":"in", "json":"format"} +spark.sql.catalog.scalardb_catalog.license.cert_path = //cert.pem +``` + +:::note + +`scalardb_catalog` 部分は設定可能なカタログ名です。任意の名前を選択できます。 + +::: + +### 使用可能なプロパティ + +ScalarDB Analytics with Spark で使用可能なプロパティのリストは次のとおりです。 + +| プロパティ名 | 必須 | 説明 | +|------------------------------------------------------|---------------------------------------------|-----------------------------------------------------------------------------| +| `spark.sql.catalog.{catalog_name}` | はい | `com.scalar.db.analytics.spark.datasource.ScalarDbCatalog` である必要があります | +| `spark.sql.catalog.{catalog_name}.config` | はい | ScalarDB 設定ファイルへのパス | +| `spark.sql.catalog.{catalog_name}.namespaces` | はい | Spark 側にインポートする ScalarDB 名前空間のコンマ区切りリスト | +| `spark.sql.catalog.{catalog_name}.license.key` | はい | JSON形式のライセンスキー | +| `spark.sql.catalog.{catalog_name}.license.cert_path` | これか `license.cert_pem` のいずれかが必要です | ライセンス証明書ファイルへのパス | +| `spark.sql.catalog.{catalog_name}.license.cert_pem` | これか `license.cert_path` のいずれかが必要です | PEM形式のライセンス証明書 | + +### スキーマのインポート + +`spark.conf` を適切に設定すると、ScalarDB の基盤となるデータベースに接続されたテーブルを含むカタログが Spark 環境に作成されます。ただし、カタログは、ScalarDB によって管理されるトランザクションメタデータを含む生のテーブルへのアクセスを提供します。代わりに、トランザクションメタデータのないアプリケーション管理データのみに関心がある場合があります。 + +この目的のために、ScalarDB Analytics with Spark は、トランザクションメタデータを解釈し、アプリケーション管理データのみを表示するビューを作成する `SchemaImporter` クラスを提供します。これらのビューには ScalarDB テーブルと同等のスキーマがあり、ユーザーはビューを ScalarDB テーブルのように使用できます。以下は、適切に設定されたカタログで `SchemaImporter` を実行する方法の例です。 + +```java +import com.scalar.db.analytics.spark.view.SchemaImporter + +class YourApp { + public static void main(String[] args) { + SparkSession spark = SparkSession.builder().appName("").getOrCreate() + new SchemaImporter(spark, "scalardb_catalog").run() // Import ScalarDB table schemas from the catalog named "scalardb_catalog" + spark.sql("select * from .").show() + spark.stop() + } +} +``` + +## ヘルパーメソッドを使用して ScalarDB Analytics with Spark を設定する + +ScalarDB Analytics with Spark が提供するヘルパーメソッドを使用すると、カタログの設定やスキーマのインポートなど、分析クエリを実行するためのすべての設定を行うことができます。さらに、ヘルパーメソッドを使用して、アプリケーションコードで ScalarDB Analytics with Spark を設定することもできます。これは、事前の設定なしで簡単なテストを実行する場合に便利です。 + +ヘルパーメソッドは、Java および Scala を通じて提供されます。Java では、`ScalarDbAnalyticsInitializer` を使用して、`spark.conf` のプロパティに相当するオプションを次のように指定できます。 + +```java +import com.scalar.db.analytics.spark.ScalarDbAnalyticsInitializer + +class YourApp { + public static void main(String[] args) { + // Initialize SparkSession as usual + SparkSession spark = SparkSession.builder().appName("").getOrCreate() + // Setup ScalarDB Analytics with Spark via helper class + ScalarDbAnalyticsInitializer + .builder() + .spark(spark) + .configPath("//config.properties") + .namespace("") + .namespace("") + .licenseKey("{\"your\":\"license\", \"key\":\"in\", \"json\":\"format\"}") + .licenseCertPath("//cert.pem") + .build() + .run() + // Run arbitrary queries + spark.sql("select * from .").show() + // Stop SparkSession + spark.stop() + } +} +``` + +Scala では、`setupScalarDbAnalytics` メソッドは `SparkSession` の拡張として利用できます。 + +```scala +import com.scalar.db.analytics.spark.implicits._ + +object YourApp { + def main(args: Array[String]): Unit = { + // Initialize SparkSession as usual + val spark = SparkSession.builder.appName("").getOrCreate() + // Setup ScalarDB Analytics with Spark via helper method + spark.setupScalarDbAnalytics( + // ScalarDB config file + configPath = "//config.properties", + // Namespaces in ScalarDB to import + namespaces = Set("", ""), + // License information + license = License.certPath("""{"your":"license", "key":"in", "json":"format"}""", "//cert.pem") + ) + // Run arbitrary queries + spark.sql("select * from .").show() + // Stop SparkSession + spark.stop() + } +} +``` + diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/getting-started.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/getting-started.mdx new file mode 100644 index 00000000..6ed5bb3e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/getting-started.mdx @@ -0,0 +1,189 @@ +--- +tags: + - Enterprise Option + - Private Preview +--- + +# ScalarDB Analytics with Spark をはじめよう + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +:::warning + +このバージョンの ScalarDB Analytics with Spark はプライベートプレビューでした。代わりにバージョン 3.14 以降を使用してください。 + +::: + +このガイドでは、ScalarDB Analytics with Spark の使用を開始する方法について説明します。 + +## 前提条件 + +ScalarDB Analytics with Spark を使用してクエリを実行する前に、ScalarDB テーブルを設定し、Apache Spark をインストールする必要があります。 + +### ScalarDB テーブルの設定 + +ScalarDB Analytics with Spark を使用するには、分析クエリを実行するための ScalarDB の基盤となるデータベースが少なくとも 1 つ必要です。ScalarDB に独自の基盤となるデータベースを設定している場合は、このセクションをスキップして、代わりにそのデータベースを使用できます。 + +独自のデータベースをまだ設定していない場合は、[ScalarDB Analytics with Spark を使用してサンプルデータに対して分析クエリを実行する](../scalardb-samples/scalardb-analytics-spark-sample/README.mdx)の手順に従って、サンプルの基盤となるデータベースを使用して ScalarDB を設定できます。 + +### Apache Spark のインストール + +Apache Spark のパッケージリリースも必要です。すでに Spark がインストールされている場合は、このセクションをスキップできます。 + +Spark が必要な場合は、[Spark ウェブサイト](https://spark.apache.org/downloads.html)からダウンロードできます。圧縮された Spark ファイルをダウンロードしたら、次のコマンドを実行してファイルを解凍する必要があります。`X.X.X` は、ダウンロードした Spark のバージョンに置き換えてください。 + +```console +tar xf spark-X.X.X-bin-hadoop3.tgz +``` + +次に、次のコマンドを実行してディレクトリに入ります。ここでも、`X.X.X` はダウンロードした Spark のバージョンに置き換えます。 + +```console +cd spark-X.X.X-bin-hadoop3 +``` + +## Spark シェルを設定する + +以下では、Spark シェルを使用してインタラクティブな分析を実行する方法について説明します。 + +ScalarDB Analytics with Spark は Maven Central Repository で利用できるため、`--packages` オプションを使用して Spark シェルで ScalarDB Analytics with Spark を有効にすることができます。`_:` は、使用しているバージョンに置き換えてください。 + +```console +./bin/spark-shell --packages com.scalar-labs:scalardb-analytics-spark-_: +``` + +:::warning + +ScalarDB Analytics with Spark は、さまざまな Spark および Scala バージョン用のさまざまなアーティファクトを提供します。これは、`scalardb-analytics-spark-_` の形式で提供されます。使用している Spark および Scala バージョンに一致するアーティファクトを選択してください。 + +参考として、[ScalarDB Analytics with Spark のバージョン互換性](version-compatibility.mdx)を参照してください。 + +::: + +次に、シェルで ScalarDB Analytics with Spark 環境を設定する必要があります。ScalarDB Analytics with Spark には、分析クエリを実行するためのすべての設定を行うヘルパーメソッドが用意されています。 + +```scala +spark-shell> import com.scalar.db.analytics.spark.implicits._ +spark-shell> spark.setupScalarDbAnalytics( + | // ScalarDB config file + | configPath = "//config.properties", + | // Namespaces in ScalarDB to import + | namespaces = Set("", ""), + | // License information + | license = License.certPath("""{"your":"license", "key":"in", "json":"format"}""", "//cert.pem") + | ) +``` + +これで、ScalarDB の基盤となるデータベースのテーブルからデータを読み取り、Spark Dataset API を通じて任意の分析クエリを実行できるようになりました。例: + +```console +spark-shell> spark.sql("select * from .").show() +``` + +## Spark アプリケーションを実装して起動する + +このセクションでは、ScalarDB Analytics with Spark を使用して Spark アプリケーションを実装し、当該アプリケーションを起動する方法について説明します。 + +SBT、Gradle、Maven などのビルドツールを使用して、ScalarDB Analytics with Spark をアプリケーションに統合できます。 + + + + Gradle プロジェクトの場合は、`build.gradle.kts` ファイルに以下を追加し、`_:` を使用しているバージョンに置き換えます。 + + ```kotlin + implementation("com.scalar-labs:scalardb-analytics-spark-_:") + ``` + + + Groovy を使用して Gradle を設定するには、`build.gradle` ファイルに以下を追加し、`_:` を、使用しているバージョンに置き換えます。 + + ```groovy + implementation 'com.scalar-labs:scalardb-analytics-spark-_:' + ``` + + + アプリケーションを SBT プロジェクトに追加するには、`build.sbt` ファイルに次のコードを挿入し、`` と `` を使用しているバージョンに置き換えます。 + + ```scala + libraryDependencies += "com.scalar-labs" %% "scalardb-analytics-spark-" % "" + ``` + + + +ScalarDB Analytics with Spark をアプリケーションに統合した後、上記で説明したのと同じヘルパーメソッドを使用して、Spark アプリケーションで ScalarDB Analytics with Spark を設定できます。 + + + + 以下は Scala を使用するサンプルアプリケーションです。 + + ```scala + import com.scalar.db.analytics.spark.implicits._ + + object YourApp { + def main(args: Array[String]): Unit = { + // Initialize SparkSession as usual + val spark = SparkSession.builder.appName("").getOrCreate() + // Setup ScalarDB Analytics with Spark via helper method + spark.setupScalarDbAnalytics( + // ScalarDB config file + configPath = "//config.properties", + // Namespaces in ScalarDB to import + namespaces = Set("", ""), + // License information + license = License.certPath("""{"your":"license", "key":"in", "json":"format"}""", "//cert.pem") + ) + // Run arbitrary queries + spark.sql("select * from .").show() + // Stop SparkSession + spark.stop() + } + } + ``` + + + Java で ScalarDB Analytics with Spark を使用した Spark アプリケーションを作成できます。 + + ```java + import com.scalar.db.analytics.spark.ScalarDbAnalyticsInitializer + + class YourApp { + public static void main(String[] args) { + // Initialize SparkSession as usual + SparkSession spark = SparkSession.builder().appName("").getOrCreate() + // Setup ScalarDB Analytics with Spark via helper class + ScalarDbAnalyticsInitializer + .builder() + .spark(spark) + .configPath("//config.properties") + .namespace("") + .namespace("") + .licenseKey("{\"your\":\"license\", \"key\":\"in\", \"json\":\"format\"}") + .licenseCertPath("//cert.pem") + .build() + .run() + // Run arbitrary queries + spark.sql("select * from .").show() + // Stop SparkSession + spark.stop() + } + } + ``` + + + +次に、`sbt package` や `./gradlew assemble` などの好みのビルドツールを使用して .jar ファイルを作成する必要があります。 + +.jar ファイルを作成したら、`spark-submit` を使用してその .jar ファイルを Spark クラスターに送信できます。`--packages` オプションを使用して、次のコマンドを実行し、クラスターで ScalarDB Analytics ライブラリを有効にします。`_:` は、使用しているバージョンに置き換えてください。 + +```console +./bin/spark-submit \ + --class "YourApp" \ + --packages com.scalar-labs:scalardb-analytics-spark-_: \ + .jar +``` + +一般的な Spark アプリケーション開発の詳細については、[Apache Spark ドキュメント](https://spark.apache.org/docs/latest/)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/version-compatibility.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/version-compatibility.mdx new file mode 100644 index 00000000..c8c8238b --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-analytics-spark/version-compatibility.mdx @@ -0,0 +1,27 @@ +--- +tags: + - Enterprise Option + - Private Preview +--- + +# ScalarDB Analytics with Spark のバージョン互換性 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +:::warning + +このバージョンの ScalarDB Analytics with Spark はプライベートプレビューでした。代わりにバージョン 3.14 以降を使用してください。 + +::: + +Spark と Scala はマイナーバージョン間で互換性がない場合があるため、ScalarDB Analytics with Spark では、さまざまな Spark および Scala バージョンに対して、`scalardb-analytics-spark-_` という形式で名前が付けられたさまざまなアーティファクトを提供しています。使用している Spark および Scala のバージョンに一致するアーティファクトを選択してください。たとえば、Scala 2.13 で Spark 3.5 を使用している場合は、`scalardb-analytics-spark-3.5_2.13` を指定する必要があります。 + +Java バージョンに関しては、ScalarDB Analytics with Spark は Java 8 以降をサポートしています。 + +以下は、ScalarDB Analytics with Spark の各バージョンでサポートされている Spark および Scalar バージョンのリストです。 + +| ScalarDB Analytics with Spark バージョン | ScalarDB バージョン | サポートされている Spark バージョン | サポートされている Scala バージョン | 最小 Java バージョン | +|:---------------------------------------|:------------------|:-------------------------------|:-------------------------------|:-------------------| +| 3.12 | 3.12 | 3.5, 3.4 | 2.13, 2.12 | 8 | diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-benchmarks/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-benchmarks/README.mdx new file mode 100644 index 00000000..08cc7c8e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-benchmarks/README.mdx @@ -0,0 +1,216 @@ +--- +tags: + - Community +--- + +# ScalarDB ベンチマークツール + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、ScalarDB のベンチマークツールを実行する方法について説明します。データベースベンチマークは、一連の標準データセットワークロードに対するデータベースのパフォーマンスを評価するのに役立ちます。 + +## ベンチマークのワークロード + +- TPC-C +- YCSB (ワークロード A、C、および F) +- マルチストレージ YCSB (ワークロード C および F) + - この YCSB バリアントは、ScalarDB を使用するマルチストレージ環境用です。 + - マルチストレージ YCSB のワーカーは、2 つの名前空間 (`ycsb_primary` と `ycsb_secondary`) で同じ数の読み取り操作と書き込み操作を実行します。 + +## 前提条件 + +- 次の Java 開発キット (JDK) のいずれか: + - [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) LTS バージョン 8 + - [OpenJDK](https://openjdk.org/install/) LTS バージョン 8 +- Gradle +- [Kelpie](https://github.com/scalar-labs/kelpie) + - Kelpie は、システムのベンチマークや検証などのエンドツーエンドのテストを実行するためのフレームワークです。 [Kelpie Releases](https://github.com/scalar-labs/kelpie) から最新バージョンを入手し、アーカイブファイルを解凍します。 +- ベンチマークツールを実行するクライアント +- ターゲットデータベース + - ScalarDB がサポートするデータベースの一覧については、[Supported Databases](../scalardb-supported-databases.mdx) を参照してください。 + +:::note + +現在、ベンチマークツールを実行するときに使用できるのは JDK 8 のみです。 + +::: + +## ベンチマークツールをセットアップする + +次のセクションでは、ベンチマークツールのセットアップ方法について説明します。 + +### ScalarDB ベンチマークリポジトリをクローンする + +**ターミナル**を開き、次のコマンドを実行して ScalarDB ベンチマークリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-benchmarks +``` + +次に、下記のコマンドを実行して、ベンチマークファイルが含まれるディレクトリに移動します。 + +```console +cd scalardb-benchmarks +``` + +### ツールをビルドする + +ベンチマークツールをビルドするには、次のコマンドを実行します。 + +```console +./gradlew shadowJar +``` + +### スキーマをロードする + +初期データをロードする前に、[ScalarDB Schema Loader](../schema-loader.mdx) を使用してテーブルを定義する必要があります。スキーマを適用するには、[ScalarDB Releases](https://github.com/scalar-labs/scalardb/releases) ページに移動し、使用している ScalarDB のバージョンに一致する ScalarDB Schema Loader を `scalardb-benchmarks` ルートフォルダーにダウンロードします。 + +さらに、ScalarDB のデータベース設定を含むプロパティファイルが必要です。ScalarDB プロパティファイルの設定の詳細については、[ScalarDB 設定](../configurations.mdx)を参照してください。 + +スキーマを適用してプロパティファイルを設定したら、ベンチマークを選択し、指示に従ってテーブルを作成します。 + + + + TPC-C ベンチマーク用のテーブル ([`tpcc-schema.json`](https://github.com/scalar-labs/scalardb-benchmarks/blob/master/tpcc-schema.json)) を作成するには、山括弧内の内容を説明に従って置き換えて、次のコマンドを実行します。 + + ```console + java -jar scalardb-schema-loader-.jar --config -f tpcc-schema.json --coordinator + ``` + + + YCSB ベンチマーク用のテーブル ([`ycsb-schema.json`](https://github.com/scalar-labs/scalardb-benchmarks/blob/master/ycsb-schema.json)) を作成するには、山括弧内の内容を説明に従って置き換えて、次のコマンドを実行します。 + + ```console + java -jar scalardb-schema-loader-.jar --config -f ycsb-schema.json --coordinator + ``` + + + マルチストレージ YCSB ベンチマーク用のテーブル ([`ycsb-multi-storage-schema.json`](https://github.com/scalar-labs/scalardb-benchmarks/blob/master/ycsb-multi-storage-schema.json)) を作成するには、山括弧内の内容を説明に従って置き換えて、次のコマンドを実行します。 + + ```console + java -jar scalardb-schema-loader-.jar --config -f ycsb-multi-storage-schema.json --coordinator + ``` + + + +### ベンチマーク設定ファイルを準備する + +ベンチマークを実行するには、まずベンチマーク設定ファイルを準備する必要があります。設定ファイルには、少なくとも実行するワークロードモジュールの場所とデータベース設定が必要です。 + +以下は、TPC-C ベンチマークを実行するための設定例です。`config_file` に指定する ScalarDB プロパティファイルは、[以前に設定したベンチマーク環境](#ベンチマーク-ツールをセットアップする)のプロパティファイルである必要があります。 + +:::note + +または、ScalarDB プロパティファイルを使用する代わりに、`.toml` ファイルで各データベース設定項目を指定することもできます。`config_file` が指定されている場合、`[database_config]` の下の他のすべての設定は、コメントが解除されていても無視されます。 + +::: + +```toml +[modules] +[modules.preprocessor] +name = "com.scalar.db.benchmarks.tpcc.TpccLoader" +path = "./build/libs/scalardb-benchmarks-all.jar" +[modules.processor] +name = "com.scalar.db.benchmarks.tpcc.TpccBench" +path = "./build/libs/scalardb-benchmarks-all.jar" +[modules.postprocessor] +name = "com.scalar.db.benchmarks.tpcc.TpccReporter" +path = "./build/libs/scalardb-benchmarks-all.jar" + +[database_config] +config_file = "" +#contact_points = "localhost" +#contact_port = 9042 +#username = "cassandra" +#password = "cassandra" +#storage = "cassandra" +``` + +モジュールに渡すパラメータは設定ファイルで定義できます。詳細については、以下のサンプル設定ファイルと [共通パラメータ](#共通パラメータ)で使用可能なパラメータを参照してください。 + +- **TPC-C:** [`tpcc-benchmark-config.toml`](https://github.com/scalar-labs/scalardb-benchmarks/blob/master/tpcc-benchmark-config.toml) +- **YCSB:** [`ycsb-benchmark-config.toml`](https://github.com/scalar-labs/scalardb-benchmarks/blob/master/ycsb-benchmark-config.toml) +- **マルチストレージ YCSB:** [`ycsb-multi-storage-benchmark-config.toml`](https://github.com/scalar-labs/scalardb-benchmarks/blob/master/ycsb-multi-storage-benchmark-config.toml) + +## ベンチマークを実行する + +ベンチマークを選択し、指示に従ってベンチマークを実行します。 + + + + TPC-C ベンチマークを実行するには、`` を Kelpie ディレクトリへのパスに置き換えて、次のコマンドを実行します。 + + ```console + //bin/kelpie --config tpcc-benchmark-config.toml + ``` + + + YCSB ベンチマークを実行するには、`` を Kelpie ディレクトリへのパスに置き換えて、次のコマンドを実行します。 + + ```console + //bin/kelpie --config ycsb-benchmark-config.toml + ``` + + + マルチストレージ YCSB ベンチマークを実行するには、`` を Kelpie ディレクトリへのパスに置き換えて、次のコマンドを実行します。 + + ```console + //bin/kelpie --config ycsb-multi-storage-benchmark-config.toml + ``` + + + +さらに、次のオプションが利用可能です。 + +- `--only-pre`。データのみをロードします。 +- `--only-process`。ベンチマークのみを実行します。 +- `--except-pre`。データをロードせずにジョブを実行します。 +- `--except-process`。ベンチマークを実行せずにジョブを実行します。 + +## 共通パラメータ + +| 名前 | 説明 | デフォルト | +|:---------------|:----------------------------------|:----------| +| `concurrency` | ベンチマーク用のスレッド数。 | `1` | +| `run_for_sec` | ベンチマークの継続時間 (秒単位)。 | `60` | +| `ramp_for_sec` | ベンチマーク前の立ち上げ時間 (秒単位)。 | `0` | + +## ワークロード固有のパラメータ + +ワークロードを選択すると、使用可能なパラメータが表示されます。 + + + + | 名前 | 説明 | デフォルト | + |:-----------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------| + | `num_warehouses` | ベンチマーク用のウェアハウスの数 (スケール係数)。 | `1` | + | `load_concurrency` | ロード用のスレッド数。 | `1` | + | `load_start_warehouse` | ロード中のウェアハウスの開始 ID。このオプションは、複数のクライアントで大規模なデータをロードする場合や、ウェアハウスを追加する場合に、`--skip-item-load` と一緒に使用すると便利です。 | `1` | + | `load_end_warehouse` | ロード中のウェアハウスの終了 ID。ロード中のウェアハウスの数を指定するには、`--num-warehouses` または `--end-warehouse` のいずれかを使用できます。 | `1` | + | `skip_item_load` | アイテムテーブルのロードをスキップするかどうか。 | `false` | + | `use_table_index` | ScalarDB のセカンダリインデックスの代わりに、汎用テーブルベースのセカンダリインデックスを使用するかどうか。 | `false` | + | `np_only` | 新規注文と支払いトランザクションのみ (それぞれ 50%) でベンチマークを実行します。 | `false` | + | `rate_new_order` | 新規注文トランザクションの割合。必要に応じてこの割合を指定する場合、他のすべてのレートパラメータの割合を指定する必要があります。その場合、すべてのレートパラメータの合計は 100% に等しくなければなりません。 | N/A | + | `rate_payment` | 支払いトランザクションの割合。必要に応じてこの割合を指定する場合、他のすべてのレートパラメータの割合を指定する必要があります。その場合、すべてのレートパラメータの合計は 100% に等しくなければなりません。 | N/A | + | `rate_order_status` | 注文ステータストランザクションの割合。ニーズに基づいてこのパーセンテージを指定する場合、他のすべてのレートパラメータのパーセンテージを指定する必要があります。その場合、すべてのレートパラメータの合計は 100 パーセントに等しくなければなりません。 | N/A | + | `rate_delivery` | 配送トランザクションのパーセンテージ。ニーズに基づいてこのパーセンテージを指定する場合、他のすべてのレートパラメータのパーセンテージを指定する必要があります。その場合、すべてのレートパラメータの合計は 100 パーセントに等しくなければなりません。 | N/A | + | `rate_stock_level` | 在庫レベルトランザクションのパーセンテージ。ニーズに基づいてこのパーセンテージを指定する場合、他のすべてのレートパラメータのパーセンテージを指定する必要があります。その場合、すべてのレートパラメータの合計は 100 パーセントに等しくなければなりません。 | N/A | + | `backoff` | 競合によりトランザクションがアボートされた後に挿入されるスリープ時間 (ミリ秒単位)。 | `0` | + + + | 名前 | 説明 | デフォルト | + |:------------------------|:----------------------------------------------------------------------------------|:----------------------------------------------| + | `load_concurrency` | ロード用のスレッド数。 | `1` | + | `load_batch_size` | 1回のロードトランザクションで入力されるレコード数。 | `1` | + | `load_overwrite` | レコードをロードするときに上書きするかどうか。 | `false` | + | `ops_per_tx` | 1回のトランザクションでの操作数。 | `2` (ワークロード A および C)
`1` (ワークロード F) | + | `record_count` | ターゲットテーブル内のレコード数。 | `1000` | + | `use_read_modify_write` | ワークロード A でブラインド書き込みではなく読み取り、変更、書き込みを使用するかどうか。 | `false`[^rmw] | + + [^rmw]: ワークロード A はトランザクションが最初に元のレコードを読み取ることを想定していないため、`use_read_modify_write` のデフォルト値は `false` です。ただし、トランザクションマネージャーとして Consensus Commit を使用している場合は、`use_read_modify_write` を `true` に設定する必要があります。これは、ScalarDB が既存のレコードに対するブラインド書き込みを許可しないためです。 +
+
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/common-reference.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/common-reference.mdx new file mode 100644 index 00000000..837809ab --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/common-reference.mdx @@ -0,0 +1,163 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK リファレンス + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このリファレンスでは、ScalarDB Cluster .NET Client SDK の動作について詳しく説明します。 + +## クライアント設定 + +クライアントは、次のものを使用して設定できます。 + +- 設定ファイル (`appsettings.json` など) またはカスタム JSON ファイル +- 環境変数 +- `ScalarDbOptions` オブジェクト + +ASP.NET Core で SDK を使用する場合は、アプリをさまざまな方法で設定できます。詳細については、[ASP.NET Core の構成](https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/configuration/?view=aspnetcore-8.0)を参照してください。 + +設定できるオプションの一覧については、[使用可能なオプション](#使用可能なオプション)を参照してください。 + +### 設定ファイルの使用 + +SDK は、標準の `appsettings.json` とカスタム JSON 設定ファイルの両方をサポートしています。 JSON ファイルでクライアントを設定するには、`ScalarDbOptions` セクションを追加し、必要なオプションを設定します。例: + +```json +{ + "ScalarDbOptions": { + "Address": "http://localhost:60053", + "HopLimit": 10 + } +} +``` + +次に、次のように設定された `TransactionFactory` オブジェクトを作成します。 + +```c# +// If appsettings.json is used, call the Create() method without parameters. +var factory = TransactionFactory.Create(); + +// Or, if a custom file is used, call the Create() method that is passed in the path to the custom file as a parameter. +factory = TransactionFactory.Create("scalardb-options.json"); +``` + +ASP.NET Core で SDK を使用する場合、登録されたトランザクションマネージャーや `ScalarDbContext` が作成されると、`appsettings.json` の設定が自動的に適用されます。カスタム JSON ファイルを使用する場合は、次のように設定フレームワークに追加します。 + +```c# +var builder = WebApplication.CreateBuilder(args); + +// ... + +builder.Configuration.AddJsonFile("scalardb-options.json"); +``` + +:::warning + +カスタム JSON ファイルはすべての標準設定プロバイダーの後に適用されるため、カスタムファイルの値が他のソースの値を上書きします。 + +::: + +### 環境変数の使用 + +クライアントが環境変数を使用するように設定するには、プレフィックス `ScalarDbOptions__` を使用します。例: + +```console +export ScalarDbOptions__Address="http://localhost:60053" +export ScalarDbOptions__HopLimit=10 +``` + +:::warning + +環境変数の値は設定ファイルの値を上書きします。 + +::: + +### `ScalarDbOptions` オブジェクトの使用 + +次のように `ScalarDbOptions` オブジェクトを使用して、実行時にクライアントを設定できます。 + +```c# +var options = new ScalarDbOptions() +{ + Address = "http://localhost:60053", + HopLimit = 10 +}; + +var factory = TransactionFactory.Create(options); +``` + +また、次のように、JSON ファイルや環境変数の値を使用して `ScalarDbOptions` オブジェクトを初期化し、残りの値を実行時に設定することもできます。 + +```c# +// If appsettings.json is used, call the Load() method without parameters. +var options = ScalarDbOptions.Load(); + +// Or, if a custom file is used, call the Load() method that is passed in the path to the custom file as a parameter. +options = ScalarDbOptions.Load("scalardb-options.json"); + +options.HopLimit = 10; + +var factory = TransactionFactory.Create(options); +``` + +ASP.NET Core で SDK を使用する場合は、次のように `AddScalarDb` および `AddScalarDbContext` のラムダ式を使用できます。 + +```c# +var builder = WebApplication.CreateBuilder(args); + +//... + +builder.Services.AddScalarDb(options => +{ + options.Address = "http://localhost:60053"; + options.HopLimit = 10; +}); + +builder.Services.AddScalarDbContext(options => +{ + options.Address = "http://localhost:60053"; + options.HopLimit = 10; +}); +``` + +この構成を使用すると、ラムダ式に渡される `ScalarDbOptions` オブジェクト (上記の例では `options` という名前) が、JSON ファイル、環境変数、およびその他のソースからの値で初期化されます。 + +### 使用可能なオプション + +利用可能なオプションは次のとおりです。 + +| 名前 | 説明 | デフォルト | +|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------| +| `Address` | **必須:** クラスターのアドレス。形式は `://:` です。``: ワイヤ暗号化 (TLS) が有効な場合は `https`、それ以外の場合は `http` です。``: クラスターの FQDN または IP アドレスです。``: クラスターのポート番号 (デフォルトでは `60053`)。 | - | +| `HopLimit` | クラスターへのリクエストのホップ数。`HopLimit` の目的は、クラスター内での無限ループを防ぐことです。リクエストが別のクラスターノードに転送されるたびに、`HopLimit` は 1 ずつ減少します。`HopLimit` が 0 に達すると、リクエストは拒否されます。 | `3` | +| `RetryCount` | クラスターが利用できない場合にクライアントがクラスターへの接続を試行できる回数。 | `10` | +| `AuthEnabled` | 認証と認可が有効かどうか。 | `false` | +| `Username` | 認証/認可のためのユーザー名。 | | +| `Password` | 認証用のパスワード。設定されていない場合は、パスワードなしで認証が行われます。 | | +| `AuthTokenExpirationTime` | 認証トークンを更新するまでの時間。`AuthTokenExpirationTime` に設定された時間がクラスターの有効期限よりも長い場合、認証エラーを受信すると認証トークンが更新されます。認証トークンが正常に更新されると、認証エラーはクライアントコードに伝播されません。代わりに、認証エラーで失敗した操作が自動的に再試行されます。複数の操作が並行して実行されている場合、認証トークンが更新される前に、これらすべての操作が認証エラーで一度失敗します。 | `00:00:00` (クラスターから受信した認証トークンの有効期限が使用されます。) | +| `TlsRootCertPem` | TLS 通信用のカスタム CA ルート証明書 (PEM データ)。 | | +| `TlsRootCertPath` | TLS 通信用のカスタム CA ルート証明書へのファイルパス。 | | +| `TlsOverrideAuthority` | TLS 通信のカスタム認証局。これは、実際に接続しているホストを変更するものではありません。これは主にテストを目的としています。たとえば、クラスターの証明書 (クラスターの `scalar.db.cluster.node.tls.cert_chain_path` パラメータ) に記載されているホスト名を指定できます。クラスターの証明書に複数のホスト名がある場合は、最初のホスト名のみがチェックされます。 | | +| `LogSensitiveData` | `true` に設定すると、gRPC リクエストとレスポンスをログに記録するときに、ユーザー名、パスワード、認証トークンなどの情報がマスクされずにそのままログに記録されます。 | `false` | + +## ScalarDB 列型と .NET 型間の変換方法 + +[LINQ](getting-started-with-linq.mdx#クラスを設定する) または [Transactional API](getting-started-with-scalardb-tables-as-csharp-classes.mdx#すべての-scalardb-テーブルのクラスを作成する)、[SQL API](getting-started-with-distributed-sql-transactions.mdx#sql-クエリを実行する)、または [Administrative API](getting-started-with-scalardb-tables-as-csharp-classes.mdx#administrative-api-を使用する) の拡張メソッドを使用すると、クラスターから受信した列の値は、対応する .NET 型に自動的に変換されます。同様に、オブジェクトがクラスターに保存されるときに、.NET プロパティの値は対応するクラスターの型に自動的に変換されます。 + +次の表に、型がどのように変換されるかを示します。 + +| ScalarDB 型 | .NET 型 | C# エイリアス | +|------------|----------------------------|-------------| +| TEXT | System.String | string | +| INT | System.Int32 | int | +| BIGINT | System.Int64 | long | +| FLOAT | System.Single | float | +| DOUBLE | System.Double | double | +| BOOLEAN | System.Boolean | bool | +| BLOB | Google.Protobuf.ByteString | | diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/exception-handling.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/exception-handling.mdx new file mode 100644 index 00000000..5170e6c5 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/exception-handling.mdx @@ -0,0 +1,176 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK での例外処理 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +トランザクションを実行するときは、例外も適切に処理する必要があります。 + +:::warning + +例外を適切に処理しないと、異常やデータの不整合が発生する可能性があります。 + +::: + +:::note + +この例では Transactional API が使用されていますが、SQL API または `ScalarDbContext` を使用する場合も例外は同じ方法で処理できます。 + +::: + +次のサンプルコードは、例外を処理する方法を示しています。 + +```c# +using System.ComponentModel.DataAnnotations.Schema; +using ScalarDB.Client; +using ScalarDB.Client.DataAnnotations; +using ScalarDB.Client.Exceptions; +using ScalarDB.Client.Extensions; + +var options = new ScalarDbOptions { Address = "http://:"}; + +var factory = TransactionFactory.Create(options); +using var manager = factory.GetTransactionManager(); + +var retryCount = 0; +TransactionException? lastException = null; + +while (true) +{ + if (retryCount++ > 0) + { + // Retry the transaction three times maximum in this sample code + if (retryCount > 3) + // Throw the last exception if the number of retries exceeds the maximum + throw lastException!; + + // Sleep 100 milliseconds before retrying the transaction in this sample code + await Task.Delay(100); + } + + // Begin a transaction + var tran = await manager.BeginAsync(); + try + { + // Execute CRUD operations in the transaction + var getKeys = new Dictionary { { nameof(Item.Id), 1 } }; + var result = await tran.GetAsync(getKeys); + + var scanKeys = new Dictionary { { nameof(Item.Id), 1 } }; + await foreach (var item in tran.ScanAsync(scanKeys, null)) + Console.WriteLine($"{item.Id}, {item.Name}, {item.Price}"); + + await tran.InsertAsync(new Item { Id = 1, Name = "Watermelon", Price = 4500 }); + await tran.DeleteAsync(new Item { Id = 1 }); + + // Commit the transaction + await tran.CommitAsync(); + + return; + } + catch (UnsatisfiedConditionException) + { + // You need to handle `UnsatisfiedConditionException` only if a mutation operation specifies + // a condition. This exception indicates the condition for the mutation operation is not met. + // InsertAsync/UpdateAsync implicitlly sets IfNotExists/IfExists condition + + try + { + await tran.RollbackAsync(); + } + catch (TransactionException ex) + { + // Rolling back the transaction failed. As the transaction should eventually recover, you + // don't need to do anything further. You can simply log the occurrence here + Console.WriteLine($"Rollback error: {ex}"); + } + + // You can handle the exception here, according to your application requirements + + return; + } + catch (UnknownTransactionStatusException) + { + // If you catch `UnknownTransactionStatusException` when committing the transaction, it + // indicates that the status of the transaction, whether it has succeeded or not, is + // unknown. In such a case, you need to check if the transaction is committed successfully + // or not and retry it if it failed. How to identify a transaction status is delegated to users + return; + } + catch (TransactionException ex) + { + // For other exceptions, you can try retrying the transaction. + + // For `TransactionConflictException` and `TransactionNotFoundException`, + // you can basically retry the transaction. However, for the other exceptions, + // the transaction may still fail if the cause of the exception is nontransient. + // In such a case, you will exhaust the number of retries and throw the last exception + + try + { + await tran.RollbackAsync(); + } + catch (TransactionException e) + { + // Rolling back the transaction failed. As the transaction should eventually recover, + // you don't need to do anything further. You can simply log the occurrence here + Console.WriteLine($"Rollback error: {e}"); + } + + lastException = ex; + } +} + +[Table("order_service.items")] +public class Item +{ + [PartitionKey] + [Column("item_id", Order = 0)] + public int Id { get; set; } + + [Column("name", Order = 1)] + public string Name { get; set; } = String.Empty; + + [Column("price", Order = 2)] + public int Price { get; set; } +} + +``` + +:::note + +サンプルコードでは、トランザクションは最大 3 回再試行され、再試行される前に 100 ミリ秒間スリープします。アプリケーションの要件に応じて、指数バックオフなどの再試行ポリシーを選択できます。 + +::: + +### 例外の詳細 + +以下の表は、クラスターとの通信時に発生する可能性のあるトランザクション例外を示しています。 + +| 例外 | 操作 | 説明 | +|-----------------------------------|--------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| AuthorizationErrorException | Put, Insert, Update, Delete, Mutate, Execute, Administrative | 権限が不足しているため、認証に失敗しました。 | +| IllegalArgumentException | 全て | 要求メッセージ内の引数が無効です。 | +| IllegalStateException | 全て | RPC が無効な状態で呼び出されました。 | +| InternalErrorException | 全て | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合は、トランザクションが失敗する可能性があります。 | +| TransactionConflictException | Begin、Join、Rollback を除くすべて | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| TransactionNotFoundException | Begin、Join を除くすべて | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合、トランザクションを最初から再試行してください。 | +| UnavailableException | 全て | ScalarDB Cluster は、複数回接続を試みても利用できません。 | +| UnknownTransactionStatusException | Commit | トランザクションのステータスは不明です (トランザクションが正常にコミットされたかどうかは不明です)。この状況では、トランザクションが正常にコミットされたかどうかを確認し、そうでない場合は再試行する必要があります。トランザクションステータスの判断はユーザーの責任です。トランザクションステータステーブルを作成し、他のアプリケーションデータと連動して更新すると、役立つ場合があります。そうすることで、テーブル自体からトランザクションのステータスを判断できるようになります。 | +| UnsatisfiedConditionException | Put, Insert, Update, Delete, Mutate | 突然変異条件が満たされていません。 | + +例外が発生した場合は、`Begin` の場合を除き、トランザクションをロールバックする必要があります。トランザクションをロールバックした後、再試行によって解決できる例外については、トランザクションを最初から再試行できます。 + +上記の例外の他に、gRPC ライブラリによってスローされる例外が発生する場合があります。このような場合は、`RpcException` プロパティで詳細を確認できます。 + +また、`ScalarDbContext` は、次の場合に `TransactionException` タイプの例外をスローします。 + +- すでにアクティブなトランザクションがあるときに `BeginTransaction` または `JoinTransaction` が呼び出された場合 +- アクティブなトランザクションがない状態で `CommitTransaction` または `RollbackTransaction` が呼び出された場合 +- アクティブな 2 フェーズコミットトランザクションがない状態で `PrepareTransaction` または `ValidateTransaction` が呼び出された場合 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-admin-api.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-admin-api.mdx new file mode 100644 index 00000000..dba34141 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-admin-api.mdx @@ -0,0 +1,131 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK の Administrative API をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、ScalarDB Cluster の Administrative API をサポートしています。この API を使用すると、.NET アプリケーションから ScalarDB Cluster を管理できます。 + +:::note + +次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期メソッドを使用することもできます。 + +::: + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を、使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## 設定ファイルを作成する + +`scalardb-options.json` ファイルを作成し、次の内容を追加します。`` を FQDN または IP アドレスに、`` をクラスターのポート番号 (デフォルトでは `60053`) に置き換えます。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10 + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## トランザクションマネージャーを取得する + +Administrative API とやり取りするためのオブジェクトを取得する必要があります。オブジェクトを取得するには、次のように `TransactionFactory` を使用します。 + +```c# +// Pass the path to the settings file created in the previous step. +var factory = TransactionFactory.Create("scalardb-options.json"); + +using var admin = factory.GetTransactionAdmin(); +``` + +## ScalarDB Cluster の管理 + +ScalarDB Cluster .NET Client SDK を使用して、次の操作を実行できます。 + +### 新しい名前空間を作成する + +```c# +await admin.CreateNamespaceAsync("ns", ifNotExists: true); +``` + +### 名前空間を削除する + +```c# +await admin.DropNamespaceAsync("ns", ifExists: true); +``` + +### 名前空間が存在するかどうかを確認する + +```c# +var namespaceExists = await admin.IsNamespacePresentAsync("ns"); +``` + +### 新しいテーブルを作成する + +```c# +// ... +using ScalarDB.Client.Builders.Admin; +using ScalarDB.Client.Core; + +// ... + +var tableMetadata = + new TableMetadataBuilder() + .AddPartitionKey("pk", DataType.Int) + .AddClusteringKey("ck", DataType.Double) + .AddSecondaryIndex("index", DataType.Float) + .AddColumn("ordinary", DataType.Text) + .Build(); + +await admin.CreateTableAsync("ns", "table_name", tableMetadata, ifNotExists: true); +``` + +### テーブルを削除する + +```c# +await admin.DropTableAsync("ns", "table_name", ifExists: true); +``` + +### テーブルが存在するかどうかを確認する + +```c# +var tableExists = await admin.IsTablePresentAsync("ns", "table_name"); +``` + +### 既存のテーブルの名前を取得する + +```c# +var tablesList = await admin.GetTableNamesAsync("ns"); +``` + +### Coordinator テーブルを作成する + +```c# +await admin.CreateCoordinatorTablesAsync(); +``` + +### Coordinator テーブルを削除する + +```c# +await admin.DropCoordinatorTablesAsync(); +``` + +### Coordinator テーブルが存在するかどうかを確認します + +```c# +var exists = await admin.AreCoordinatorTablesPresentAsync(); +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-aspnet-and-di.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-aspnet-and-di.mdx new file mode 100644 index 00000000..88b2263a --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-aspnet-and-di.mdx @@ -0,0 +1,81 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK での ASP.NET Core と依存性注入をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、ASP.NET Core などのフレームワークでの依存性注入をサポートしています。 + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## クライアント設定の追加 + +ASP.NET Core アプリの `appsettings.json` ファイルに `ScalarDbOptions` セクションを追加し、`` を FQDN または IP アドレスに、`` をクラスターのポート番号 (デフォルトでは `60053`) に置き換えます。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10 + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## トランザクションマネージャーをセットアップする + +次のように、ScalarDB トランザクションマネージャーを `IServiceCollection` のサービスとして登録できます。 + +```c# +using ScalarDB.Client.Extensions; + +//... + +var builder = WebApplication.CreateBuilder(args); + +//... + +builder.Services.AddScalarDb(); +``` + +トランザクションマネージャーを登録したら、次のようにコントローラーのコンストラクターに挿入できます。 + +```c# +[ApiController] +public class OrderController: ControllerBase +{ + private readonly IDistributedTransactionManager _manager; + private readonly ISqlTransactionManager _sqlManager; + private readonly ITwoPhaseCommitTransactionManager _twoPhaseManager; + private readonly ISqlTwoPhaseCommitTransactionManager _sqlTwoPhaseManager; + private readonly IDistributedTransactionAdmin _admin; + + public OrderController(IDistributedTransactionManager manager, + ISqlTransactionManager sqlManager, + ITwoPhaseCommitTransactionManager twoPhaseManager, + ISqlTwoPhaseCommitTransactionManager sqlTwoPhaseManager, + IDistributedTransactionAdmin admin) + { + _manager = manager; + _sqlManager = sqlManager; + _twoPhaseManager = twoPhaseManager; + _sqlTwoPhaseManager = sqlTwoPhaseManager; + _admin = admin; + } +} +``` + +これらの例は WebApi プロジェクト用ですが、GrpcService プロジェクトでも同様に動作します。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-auth.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-auth.mdx new file mode 100644 index 00000000..3af384cb --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-auth.mdx @@ -0,0 +1,70 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK を使用した認証と認可をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は [認証と認可](../scalardb-cluster/scalardb-auth-with-sql.mdx)をサポートしており、これにより ScalarDB Cluster へのリクエストを認証および認可できます。 + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## 設定ファイルで資格情報を設定する + +設定ファイルの資格情報を次のように設定し、山括弧内の内容を置き換えてください。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10, + "AuthEnabled": true, + "Username": "", + "Password": "" + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## トランザクションマネージャーを取得する + +次のように `TransactionFactory` を使用して、トランザクションマネージャーまたはトランザクション管理オブジェクトを取得する必要があります。`` を `GetTransactionManager()`、`GetTwoPhaseCommitTransactionManager()`、`GetSqlTransactionManager()`、または `GetSqlTwoPhaseCommitTransactionManager()` に置き換えてください。 + +```c# +// Pass the path to the settings file. +var factory = TransactionFactory.Create("scalardb-options.json"); + +// To get a transaction manager +using var manager = factory.(); + +// To get a transaction admin +using var admin = factory.GetTransactionAdmin(); +``` + +提供された資格情報を使用して `TransactionFactory` から作成されたトランザクションマネージャーまたはトランザクション管理オブジェクトは、ScalarDB Cluster に自動的にログインし、通信できます。 + +## ワイヤ暗号化 + +[ワイヤ暗号化](../scalardb-cluster/scalardb-auth-with-sql.mdx#ワイヤ暗号化) もサポートされています。次のように `Address` を `https` で始まる URL に設定することで有効にできます。 + +```json +{ + "ScalarDbOptions": { + "Address": "https://:" + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-sql-transactions.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-sql-transactions.mdx new file mode 100644 index 00000000..1e5ccb6b --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-sql-transactions.mdx @@ -0,0 +1,195 @@ +--- +tags: + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK での分散 SQL トランザクションをはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、ScalarDB Cluster の分散 SQL トランザクション機能をサポートします。SDK には、クラスター内での通信を容易にするためのトランザクションとマネージャーの抽象化が含まれています。 + +:::note + +次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期メソッドを使用することもできます。 + +::: + +分散非 SQL トランザクションの詳細については、[ScalarDB Cluster .NET Client SDK での分散トランザクションをはじめよう](getting-started-with-distributed-transactions.mdx)を参照してください。 + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を、使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## 設定ファイルを作成する + +`scalardb-options.json` ファイルを作成し、次の内容を追加します。`` を FQDN または IP アドレスに、`` をクラスターのポート番号 (デフォルトでは `60053`) に置き換えます。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10 + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## トランザクションマネージャーを取得する + +分散 SQL トランザクション用のトランザクションマネージャーオブジェクトを取得する必要があります。トランザクションマネージャーオブジェクトを取得するには、次のように `TransactionFactory` を使用します。 + +```c# +// Pass the path to the settings file created in the previous step. +var factory = TransactionFactory.Create("scalardb-options.json"); + +using var manager = factory.GetSqlTransactionManager(); +``` + +## SQL クエリを実行する + +SQL ステートメントを実行するには、次のようにビルダーを使用して作成できる `ISqlStatement` オブジェクトが必要です。 + +```c# +using ScalarDB.Client.Builders.Sql; + +// ... + +var sqlStatement = + new SqlStatementBuilder() + .SetSql("SELECT * FROM order_service.statements WHERE item_id = :item_id") + .AddParam("item_id", 2) + .Build(); +``` + +次のようにトランザクションマネージャーを使用して、単一の SQL ステートメントを直接実行できます。 + +```c# +var resultSet = await manager.ExecuteAsync(sqlStatement); +``` + +`ExecuteAsync` メソッドの結果には、クラスターから受信したレコードが含まれます。特定の列の値は、次の方法で取得できます。 + +```c# +foreach (var record in resultSet.Records) +{ + // Getting an integer value from the "item_id" column. + // If it fails, an exception will be thrown. + var itemId = record.GetValue("item_id"); + + // Trying to get a string value from the "order_id" column. + // If it fails, no exception will be thrown. + if (record.TryGetValue("order_id", out var orderId)) + Console.WriteLine($"order_id: {orderId}"); + + // Checking if the "count" column is null. + if (record.IsNull("count")) + Console.WriteLine("'count' is null"); +} +``` + +`GetValue` および `TryGetValue` で使用する型の詳細については、[ScalarDB 列型を .NET 型に変換する方法](common-reference.mdx#scalardb-列型と-net-型間の変換方法) を参照してください。 + +## トランザクションで SQL クエリを実行する + +1 つのトランザクションの一部として複数の SQL ステートメントを実行するには、トランザクションオブジェクトが必要です。 + +次のようにトランザクションマネージャーを使用してトランザクションオブジェクトを作成できます。 + +```c# +var transaction = await manager.BeginAsync(); +``` + +次のようにして、すでに開始されているトランザクションを再開することもできます。 + +```c# +var transaction = manager.Resume(transactionIdString); +``` + +:::note + +`Resume` メソッドはトランザクションオブジェクトを作成するだけなので、非同期バージョンはありません。このため、間違った ID を使用してトランザクションを再開する可能性があります。 + +::: + +トランザクションには、トランザクションマネージャーと同じ `ExecuteAsync` メソッドがあります。このメソッドを使用して、SQL ステートメントを実行できます。 + +トランザクションをコミットする準備ができたら、次のようにトランザクションの `CommitAsync` メソッドを呼び出すことができます。 + +```c# +await transaction.CommitAsync(); +``` + +トランザクションをロールバックするには、`RollbackAsync` メソッドを使用できます。 + +```c# +await transaction.RollbackAsync(); +``` + +## メタデータを取得する + +次のように、Metadata プロパティを使用して ScalarDB のメタデータを取得できます。 + +```c# +// namespaces, tables metadata +var namespaceNames = new List(); + +await foreach (var ns in manager.Metadata.GetNamespacesAsync()) +{ + namespaceNames.Add(ns.Name); + Console.WriteLine($"Namespace: {ns.Name}"); + + await foreach (var tbl in ns.GetTablesAsync()) + { + Console.WriteLine($" Table: {tbl.Name}"); + + Console.WriteLine($" Columns:"); + foreach (var col in tbl.Columns) + Console.WriteLine($" {col.Name} [{col.DataType}]"); + + Console.WriteLine($" PartitionKey:"); + foreach (var col in tbl.PartitionKey) + Console.WriteLine($" {col.Name}"); + + Console.WriteLine($" ClusteringKey:"); + foreach (var col in tbl.ClusteringKey) + Console.WriteLine($" {col.Name} [{col.ClusteringOrder}]"); + + Console.WriteLine($" Indexes:"); + foreach (var index in tbl.Indexes) + Console.WriteLine($" {index.ColumnName}"); + + Console.WriteLine(); + } +} + +// users metadata +await foreach (var user in manager.Metadata.GetUsersAsync()) +{ + Console.WriteLine($"User: {user.Name} [IsSuperuser: {user.IsSuperuser}]"); + + foreach (var nsName in namespaceNames) + { + Console.WriteLine($" Namespace: {nsName}"); + + Console.WriteLine($" Privileges:"); + foreach (var privilege in await user.GetPrivilegesAsync(nsName)) + Console.WriteLine($" {privilege}"); + } + + Console.WriteLine(); +} +``` + +:::note + +`IAsyncEnumerable` で LINQ メソッドを使用するには、[System.Linq.Async](https://www.nuget.org/packages/System.Linq.Async/) パッケージをインストールします。 + +::: diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-transactions.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-transactions.mdx new file mode 100644 index 00000000..91a4e612 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-transactions.mdx @@ -0,0 +1,329 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK での分散トランザクションをはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、ScalarDB Cluster の分散トランザクション機能をサポートします。SDK には、クラスター内での通信を容易にするためのトランザクションとマネージャーの抽象化が含まれています。 + +:::note + +次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期バージョンを使用することもできます。 + +::: + +分散 SQL トランザクションの詳細については、[ScalarDB Cluster .NET Client SDK での分散 SQL トランザクションをはじめよう](getting-started-with-distributed-sql-transactions.mdx)を参照してください。 + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用して、`.` を使用しているバージョンに置き換えることでこれを行うことができます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## 設定ファイルを作成する + +`scalardb-options.json` ファイルを作成し、次の内容を追加します。`` を FQDN または IP アドレスに、`` をクラスターのポート番号 (デフォルトでは `60053`) に置き換えます。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10 + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## トランザクションマネージャーを取得する + +分散トランザクションにはトランザクションマネージャーを取得する必要があります。トランザクションマネージャーを取得するには、次のように `TransactionFactory` を使用します。 + +```c# +// Pass the path to the settings file created in the previous step. +var factory = TransactionFactory.Create("scalardb-options.json"); + +using var manager = factory.GetTransactionManager(); +``` + +## トランザクションを管理する + +複数の CRUD 操作を単一のトランザクションの一部として実行するには、まずトランザクションを開始する必要があります。次のようにトランザクションマネージャーを使用してトランザクションを開始できます。 + +```c# +var transaction = await manager.BeginAsync(); +``` + +次のようにして、すでに実行中のトランザクションを再開することもできます。 + +```c# +var transaction = manager.Resume(transactionIdString); +``` + +:::note + +`Resume` メソッドはトランザクションオブジェクトを作成するだけなので、非同期バージョンはありません。このため、間違った ID を使用してトランザクションを再開する可能性があります。 + +::: + +トランザクションをコミットする準備ができたら、次のようにトランザクションの `CommitAsync` メソッドを呼び出すことができます。 + +```c# +await transaction.CommitAsync(); +``` + +トランザクションをロールバックするには、`RollbackAsync` メソッドを使用できます。 + +```c# +await transaction.RollbackAsync(); +``` + +## CRUD 操作を実行する + +トランザクションには、クラスターに対して CRUD 操作を実行するための `GetAsync`、`ScanAsync`、`InsertAsync`、`UpsertAsync`、`UpdateAsync`、`DeleteAsync`、および `MutateAsync` メソッドがあります。パラメーターとして、これらのメソッドには操作オブジェクトがあります。操作オブジェクトは、このセクションにリストされているビルダーを使用して作成できます。 + +:::note + +CRUD 操作は、トランザクションを明示的に作成する必要なく、ワンショットトランザクション方式で実行できます。そのために、マネージャーオブジェクトには、トランザクションオブジェクトと同じ CRUD メソッドがあります。 + +::: + +ビルダーを使用するには、`using` セクションに次の名前空間を追加します。 + +```c# +using ScalarDB.Client.Builders; +``` + +:::note + +クラスターは 1 つのトランザクション内でのコマンドの並列実行をサポートしていないため、非同期メソッドには必ず `await` を使用してください。 + +::: + +### `GetAsync` メソッドの例 + +単一のレコードを取得するには、次のように `GetAsync` メソッドを使用します。 + +```c# +var get = + new GetBuilder() + .SetNamespaceName("ns") + .SetTableName("statements") + .AddPartitionKey("order_id", "1") + .AddClusteringKey("item_id", 2) + .SetProjections("item_id", "count") + .Build(); + +var getResult = await transaction.GetAsync(get); +``` + +パーティションキーの代わりにインデックスを使用してレコードを取得することも可能です。そのためには、次のように操作の種類を `GetWithIndex` に設定する必要があります。 + +```c# +// ... +using ScalarDB.Client.Core; + +// ... + +var get = + new GetBuilder() + // ... + .SetGetType(GetOperationType.GetWithIndex) + .AddPartitionKey("index_column", "1") + .Build(); +``` + +取得されたレコードが満たす必要のある任意の条件を指定することもできます。満たさない場合はレコードは返されません。条件は、次のように条件の結合として設定できます。 + +```c# +var get = + new GetBuilder() + // ... + .AddConjunction(c => c.AddCondition("cost", 1000, Operator.LessThan)) + .AddConjunction(c => + { + c.AddCondition("cost", 10000, Operator.LessThan); + c.AddCondition("in_stock", true, Operator.Equal); + }) + .Build(); +``` + +上記の例では、`cost` が `1000` 未満の場合、または `cost` が `10000` 未満で `in_stock` が true の場合にのみ、レコードが返されます。 + +#### `IResult` オブジェクトの処理 + +`GetAsync` メソッドと `ScanAsync` メソッドは `IResult` オブジェクトを返します。`IResult` オブジェクトには、取得されたレコードの列が含まれます。特定の列の値は、次の方法で取得できます。 + +```c# +// Getting an integer value from the "item_id" column. +// If it fails, an exception will be thrown. +var itemId = result.GetValue("item_id"); + +// Trying to get a string value from the "order_id" column. +// If it fails, no exception will be thrown. +if (result.TryGetValue("order_id", out var orderId)) + Console.WriteLine($"order_id: {orderId}"); + +// Checking if the "count" column is null. +if (result.IsNull("count")) + Console.WriteLine("'count' is null"); +``` + +`GetValue` および `TryGetValue` で使用する型の詳細については、[ScalarDB 列型と .NET 型間の変換方法](common-reference.mdx#scalardb-列型を-net-型間の変換方法) を参照してください。 + +### `ScanAsync` メソッドの例 + +レコードの範囲を取得するには、次のように `ScanAsync` メソッドを使用できます。 + +```c# +var scan = + new ScanBuilder() + .SetNamespaceName("ns") + .SetTableName("statements") + .AddPartitionKey("order_id", "1") + .AddStartClusteringKey("item_id", 2) + .SetStartInclusive(true) + .AddEndClusteringKey("item_id", 8) + .SetEndInclusive(true) + .SetProjections("item_id", "count") + .Build(); + +var scanResult = await transaction.ScanAsync(scan); +``` + +パーティションキーの代わりにインデックスを使用してレコードを取得することも可能です。そのためには、次のように操作の種類を `ScanWithIndex` に設定する必要があります。 + +```c# +// ... +using ScalarDB.Client.Core; + +// ... +var scan = + new ScanBuilder() + // ... + .SetScanType(ScanOperationType.ScanWithIndex) + .AddPartitionKey("index_column", "1") + .Build(); +``` + +取得されたレコードが満たす必要のある任意の条件は、[get 操作](getting-started-with-distributed-transactions.mdx#getasync-メソッドの例)の場合と同様に、スキャン操作に対しても設定できます。 + +### `InsertAsync` メソッドの例 + +新しいレコードを挿入するには、次のように `InsertAsync` メソッドを使用します。 + +```c# +var insert = + new InsertBuilder() + .SetNamespaceName("ns") + .SetTableName("statements") + .AddPartitionKey("order_id", "1") + .AddClusteringKey("item_id", 2) + .AddColumn("count", 11) + .Build(); + +await transaction.InsertAsync(insert); +``` + +### `UpsertAsync` メソッドの例 + +レコードをUPSERTする (既存のレコードを更新するか、新しいレコードを挿入する) には、次のように `UpsertAsync` メソッドを使用できます。 + +```c# +var upsert = + new UpsertBuilder() + .SetNamespaceName("ns") + .SetTableName("statements") + .AddPartitionKey("order_id", "1") + .AddClusteringKey("item_id", 2) + .AddColumn("count", 11) + .Build(); + +await transaction.UpsertAsync(upsert); +``` + +### `UpdateAsync` メソッドの例 + +既存のレコードを更新するには、次のように `UpdateAsync` メソッドを使用します。 + +```c# +// ... +using ScalarDB.Client.Core; + +// ... + +var update = + new UpdateBuilder() + .SetNamespaceName("ns") + .SetTableName("statements") + .AddPartitionKey("order_id", "1") + .AddClusteringKey("item_id", 2) + .AddColumn("count", 11) + .AddCondition("processed", false, Operator.Equal) + .Build(); + +await transaction.UpdateAsync(update); +``` + +### `DeleteAsync` メソッドの例 + +レコードを削除するには、次のように `DeleteAsync` メソッドを使用します。 + +```c# +// ... +using ScalarDB.Client.Core; + +// ... +var delete = + new DeleteBuilder() + .SetNamespaceName("ns") + .SetTableName("statements") + .AddPartitionKey("order_id", "1") + .AddClusteringKey("item_id", 2) + .AddCondition("processed", false, Operator.Equal) + .Build(); + +await transaction.DeleteAsync(delete); +``` + +### `MutateAsync` メソッドの例 + +`MutateAsync` メソッドを使用すると、クラスターへの 1 回の呼び出しで複数のミューテーション操作を実行できます。これは次の方法で実行できます。 + +```c# +// ... +using ScalarDB.Client.Core; + +// ... +var mutations = new IMutation[] + { + new InsertBuilder() + // ... + .Build(), + new UpsertBuilder() + // ... + .Build(), + new UpdateBuilder() + // ... + .Build(), + new DeleteBuilder() + // ... + .Build() + }; + +await transaction.MutateAsync(mutations); +``` + +:::note + +`InsertAsync`、`UpsertAsync`、`UpdateAsync`、`DeleteAsync`、または `MutateAsync` メソッドを使用してデータを変更するには、まず `GetAsync` または `ScanAsync` メソッドを使用してデータを取得する必要があります。 + +::: diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-linq.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-linq.mdx new file mode 100644 index 00000000..6f6545ef --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-linq.mdx @@ -0,0 +1,366 @@ +--- +tags: + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK での LINQ をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、LINQ と Entity Framework のような機能を使用してクラスターをクエリすることをサポートしています。 + +:::note + +この SDK は [Entity Framework](https://learn.microsoft.com/ja-jp/ef/) をサポートしていません。代わりに、この SDK は Entity Framework に似た機能を実装します。 + +::: + +:::note + +LINQ を使用するには、クラスターで SQL サポートを有効にする必要があります。 + +::: + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を、使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## クライアント設定の追加 + +ASP.NET Core アプリの `appsettings.json` ファイルに `ScalarDbOptions` セクションを追加し、`` を FQDN または IP アドレスに、`` をクラスターのポート番号 (デフォルトでは `60053`) に置き換えます。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10 + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## クラスを設定する + +SQL サポートが有効になっていることを確認したら、使用する ScalarDB テーブルごとに C# クラスを作成します。例: + +```c# +using System.ComponentModel.DataAnnotations.Schema; +using ScalarDB.Client.DataAnnotations; + +// ... + +[Table("ns.statements")] +public class Statement +{ + [PartitionKey] + [Column("statement_id", Order = 0)] + public int Id { get; set; } + + [SecondaryIndex] + [Column("order_id", Order = 1)] + public string OrderId { get; set; } = String.Empty; + + [SecondaryIndex] + [Column("item_id", Order = 2)] + public int ItemId { get; set; } + + [Column("count", Order = 3)] + public int Count { get; set; } +} + +[Table("order_service.items")] +public class Item +{ + [PartitionKey] + [Column("item_id", Order = 0)] + public int Id { get; set; } + + [Column("name", Order = 1)] + public string Name { get; set; } = String.Empty; + + [Column("price", Order = 2)] + public int Price { get; set; } +} +``` + +パーティションキー、クラスタリングキー、またはセカンダリインデックスが複数の列で設定されている場合、`ColumnAttribute` の `Order` プロパティによってキーまたはインデックス内の順序が決まります。 + +プロパティに使用する型の詳細については、[ScalarDB 列型と .NET 型間の変換方法](common-reference.mdx#scalardb-列型と-net-型間の変換方法) を参照してください。 + +使用するすべてのテーブルのプロパティを持つコンテキストクラスを作成します。例: + +```c# + public class MyDbContext: ScalarDbContext + { + public ScalarDbSet Statements { get; set; } + public ScalarDbSet Items { get; set; } + } +``` + +すべてのクラスが作成されたら、作成されたコンテキストを依存性注入に追加する必要があります。例: + +```c# +using ScalarDB.Client.Extensions; + +//... + +var builder = WebApplication.CreateBuilder(args); + +//... + +builder.Services.AddScalarDbContext(); +``` + +コンテキストは、次のようにコントローラーのコンストラクターに挿入できます。 + +```c# +[ApiController] +public class OrderController: ControllerBase +{ + private readonly MyDbContext _myDbContext; + + public OrderController(MyDbContext myDbContext) + { + _myDbContext = myDbContext; + } +} +``` + +## LINQ を使用してプロパティをクエリする + +コントローラーで `MyDbContext` を受け取ったら、LINQ を使用してそのプロパティをクエリできます。例: + +### クエリ構文を使用する + +```c# +from stat in _myDbContext.Statements +join item in _myDbContext.Items on stat.ItemId equals item.Id +where stat.Count > 2 && item.Name.Contains("apple") +orderby stat.Count descending, stat.ItemId +select new { item.Name, stat.Count }; +``` + +### メソッド構文を使用する + +```c# +_myDbContext.Statements + .Where(stat => stat.OrderId == "1") + .Skip(1) + .Take(2); +``` + +### `First` メソッドを使用して、パーティションキーで 1 つの `Statement` を取得します。 + +```c# +_myDbContext.Statements.First(stat => stat.OrderId == "1"); +``` + +### `DefaultIfEmpty` メソッドを使用して左外部結合を実行します + +```c# +from stat in _myDbContext.Statements +join item in _myDbContext.Items on stat.ItemId equals item.Id into items +from i in items.DefaultIfEmpty() +select new { ItemName = i != null ? i.Name : "" } +``` + +以下のメソッドがサポートされています: + +- `Select` +- `Where` +- `Join` +- `GroupJoin` +- `First`/`FirstOrDefault` +- `Skip` +- `Take` +- `OrderBy`/`OrderByDescending` +- `ThenBy`/`ThenByDescending` + +次の `String` メソッドは、`Where` メソッドと `First`/`FirstOrDefault` メソッドの述語内でサポートされています。 + +- `Contains` +- `StartsWith` +- `EndsWith` + +サポートされていない LINQ メソッドは、サポートされているメソッドの後に使用できます。例: + +```c# +_myDbContext.Statements + .Where(stat => stat.OrderId == "1") // Will be executed remotely on the cluster. + .Distinct() // Will be executed locally in the app. + .Where(stat => stat.ItemId < 5); // Will be executed locally. +``` + +:::note + +`Take` または `First`/`FirstOrDefault` の前に `Skip` が指定されている場合、`Skip` に渡される数値が SQL クエリの `LIMIT` 数値に追加されます。`Skip` 自体では、結果の SQL クエリは変更されません。 + +::: + +## `ScalarDbSet{T}` オブジェクトに対して LINQ を使用する場合の制限 + +- すべてのメソッド呼び出しは `Select` 内でサポートされます。例: + +```c# +.Select(stat => convertToSomething(stat.ItemId)) +//... +.Select(stat => stat.ItemId * getSomeNumber()) +``` + +- クエリオブジェクトに対する呼び出しを除くメソッド呼び出しは、`Where` および `First`/`FirstOrDefault` 内でもサポートされます。例: + +```c# +.Where(stat => stat.ItemId == getItemId()) // is OK +//... +.Where(stat => stat.ItemId.ToString() == "1") // is not supported +``` + +- すべてのメソッド呼び出しは、`Join` および `GroupJoin` の結果選択ラムダ内でサポートされます。例: + +```c# +.Join(_myDbContext.Items, + stat => stat.ItemId, + item => item.Id, + (stat, item) => new { ItemName = convertToSomething(item.Name), + ItemCount = stat.Count.ToString() }) +``` + +- `Join` および `GroupJoin` のキー選択ラムダ内では、メソッド呼び出しはサポートされていません。 +- カスタム等価比較子はサポートされていません。`Join` および `GroupJoin` メソッドの `comparer` 引数は、引数が渡された場合は無視されます。 +- `DefaultIfEmpty` メソッドを使用して左外部結合を実行する場合を除き、1 つのクエリ内で複数の `from` を直接使用することはサポートされていません。後続の各 `from` は、個別のクエリと見なされます。 + +```c# +var firstQuery = from stat in _myDbContext.Statements + where stat.Count > 2 + select new { stat.Count }; + +var secondQuery = from item in _myDbContext.Items + where item.Price > 6 + select new { item.Name }; + +var finalQuery = from first in firstQuery + from second in secondQuery + select new { first.Count, second.Name }; + +// 1. firstQuery will be executed against the cluster. +// 2. secondQuery will be executed against the cluster for each object (row) from 1. +// 3. finalQuery will be executed locally with the results from 1 and 2. +var result = finalQuery.ToArray(); +``` + +- メソッド呼び出しは、`OrderBy`/`OrderByDescending` または `ThenBy`/`ThenByDescending` 内ではサポートされていません。 +- `Where` および `First`/`FirstOrDefault` 内では、単一の文字列引数を持つ `Contains`、`StartsWith`、および `EndsWith` メソッドのオーバーロードのみがサポートされています。 + +## `ScalarDbContext` を使用してクラスター内のデータを変更する + +`ScalarDbContext` から継承されたクラスのプロパティを使用して、データを変更できます。 + +### `AddAsync` メソッドを使用して新しいオブジェクトを追加します + +```c# +var statement = new Statement + { + OrderId = "2", + ItemId = 4, + Count = 8 + }; +await _myDbContext.Statements.AddAsync(statement); +``` + +### `UpdateAsync` メソッドを使用してオブジェクトを更新する + +```c# +var statement = _myDbContext.Statements.First(stat => stat.Id == 1); + +// ... + +statement.Count = 10; +await _myDbContext.Statements.UpdateAsync(statement); +``` + +### `RemoveAsync` メソッドを使用してオブジェクトを削除する + +```c# +var statement = _myDbContext.Statements.First(stat => stat.Id == 1); + +// ... + +await _myDbContext.Statements.RemoveAsync(statement); +``` + +## トランザクションの管理 + +LINQ クエリと `AddAsync`、`UpdateAsync`、および `RemoveAsync` メソッドは、明示的に開始されたトランザクションなしで実行できます。ただし、1 つのトランザクションの一部として複数のクエリとメソッドを実行するには、トランザクションを明示的に開始してコミットする必要があります。`ScalarDbContext` は、通常のトランザクションと、ScalarDB の 2 フェーズコミットインターフェイスを使用したトランザクションの両方をサポートします。 + +### 新しいトランザクションを開始する + +```c# +await _myDbContext.BeginTransactionAsync(); +``` + +### 2 フェーズコミットインターフェースで新しいトランザクションを開始する + +```c# +await _myDbContext.BeginTwoPhaseCommitTransactionAsync(); +``` + +### 現在アクティブなトランザクションのIDを取得する + +```c# +var transactionId = _myDbContext.CurrentTransactionId; +``` + +### 2 フェーズコミットインターフェースを使用して既存のトランザクションに参加する + +```c# +await _myDbContext.JoinTwoPhaseCommitTransactionAsync(transactionId); +``` + +### 既存のトランザクションを再開する + +```c# +await _myDbContext.ResumeTransaction(transactionId); +``` + +### 2 フェーズコミットインターフェースを使用して既存のトランザクションを再開する + +```c# +await _myDbContext.ResumeTwoPhaseCommitTransaction(transactionId); +``` + +:::note + +`ResumeTransaction`/`ResumeTwoPhaseCommitTransaction` メソッドには非同期バージョンがありません。これは、クラスターを照会せずに `ScalarDbContext` 継承オブジェクト内のトランザクションデータを初期化するだけだからです。このため、間違った ID を使用してトランザクションを再開する可能性があります。 + +::: + +### トランザクションをコミットする(通常または 2 フェーズコミット) + +```c# +await _myDbContext.CommitTransactionAsync(); +``` + +### トランザクションをロールバックする(通常または 2 フェーズコミット) + +```c# +await _myDbContext.RollbackTransactionAsync(); +``` + +### コミット用の 2 フェーズコミットインターフェースを使用してトランザクションを準備する + +```c# +await _myDbContext.PrepareTransactionAsync(); +``` + +### コミット前に 2 フェーズコミットインターフェースでトランザクションを検証する + +```c# +await _myDbContext.ValidateTransactionAsync(); +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-scalardb-tables-as-csharp-classes.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-scalardb-tables-as-csharp-classes.mdx new file mode 100644 index 00000000..7a5fb2cc --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-scalardb-tables-as-csharp-classes.mdx @@ -0,0 +1,207 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK で C# クラスとしてテーブルをはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、ScalarDB テーブルを C# オブジェクトとして抽象化することで、クラスターにアクセスするコードの作成に役立ちます。クラスター内のテーブルを表すクラスを定義すると、クラスターをクエリするときに列名やその型が混同されないようにすることができます。さらに、テーブルの構造が変更された場合は、IDE のリファクタリング機能を使用してコードに変更を適用できます。 + +:::note + +次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期メソッドを使用することもできます。 + +::: + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を、使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## すべての ScalarDB テーブルのクラスを作成する + +ScalarDB テーブルを C# オブジェクトとして操作するには、使用するテーブルごとにクラスを作成する必要があります。例: + +```c# +using System.ComponentModel.DataAnnotations.Schema; +using ScalarDB.Client.DataAnnotations; + +// ... + +[Table("ns.statements")] +public class Statement +{ + [PartitionKey] + [Column("order_id", Order = 0)] + public string OrderId { get; set; } = String.Empty; + + [ClusteringKey] + [Column("item_id", Order = 1)] + public int ItemId { get; set; } + + [Column("count", Order = 2)] + public int Count { get; set; } +} +``` + +プロパティに使用する型の詳細については、[ScalarDB 列型と .NET 型間の変換方法](common-reference.mdx#scalardb-列型と-net-型間の変換方法)を参照してください。 + +## CRUD 操作を実行する + +各テーブルのクラスを作成した後、`ITransactionCrudOperable` の汎用 `GetAsync`、`ScanAsync`、`InsertAsync`、`UpdateAsync`、`DeleteAsync`、`UpsertAsync`、または `MutateAsync` メソッドを使用して、クラスをオブジェクトとして使用できます。 + +これらの汎用メソッドを使用するには、`using` セクションに次の名前空間を追加します。 + +```c# +using ScalarDB.Client.Extensions; +``` + +### `GetAsync` メソッドを使用して 1 つのオブジェクトを取得します + +```c# +var keys = new Dictionary + { + { nameof(Statement.OrderId), "1" } + }; +var statement = await transaction.GetAsync(keys); + +Console.WriteLine($"ItemId: {statement.ItemId}, Count: {statement.Count}"); +``` + +### `ScanAsync` メソッドを使用して複数のオブジェクトを取得する + +```c# +var startKeys = new Dictionary + { + { nameof(Statement.OrderId), "1" }, + { nameof(Statement.ItemId), 3 } + }; +var endKeys = new Dictionary + { + { nameof(Statement.ItemId), 6} + }; + +await foreach (var s in transaction.ScanAsync(startKeys, endKeys)) + Console.WriteLine($"ItemId: {s.ItemId}, Count: {s.Count}"); +``` + +:::note + +`IAsyncEnumerable` で LINQ メソッドを使用するには、[System.Linq.Async](https://www.nuget.org/packages/System.Linq.Async/) パッケージをインストールします。 + +::: + +### `InsertAsync` メソッドを使用して新しいオブジェクトを挿入します + +```c# +var statement = new Statement + { + OrderId = "2", + ItemId = 4, + Count = 8 + }; +await transaction.InsertAsync(statement); +``` + +### `UpdateAsync` メソッドを使用してオブジェクトを更新する + +```c# +// ... +statement.ItemId = 4; +statement.Count = 8; + +await transaction.UpdateAsync(statement); +``` + +### `DeleteAsync` メソッドを使用してオブジェクトを削除する + +```c# +// ... +await transaction.DeleteAsync(statement); +``` + +### `UpsertAsync` メソッドを使用してオブジェクトをUPSERTする + +```c# +var statement = new Statement + { + OrderId = "2", + ItemId = 4, + Count = 8 + }; +await transaction.UpsertAsync(statement); +``` + +### `MutateAsync` メソッドを使用して複数のオブジェクトを一度にUPSERTおよび削除する + +```c# +var statement = new Statement + { + OrderId = "2", + ItemId = 4, + Count = 16 + }; + +// ... + +await transaction.MutateAsync(objectsToUpsert: new[] { statement }, + objectsToDelete: new[] { statement2 }); +``` + +:::note + +`UpdateAsync`、`DeleteAsync`、`UpsertAsync`、または `MutateAsync` メソッドを使用してオブジェクトを変更するには、まず `GetAsync` または `ScanAsync` メソッドを使用してオブジェクトを取得する必要があります。 + +::: + +## Administrative API を使用する + +C# オブジェクトも Administrative API で使用できます。汎用 Administrative API メソッドを使用するには、次の名前空間を `using` セクションに追加します。 + +```c# +using ScalarDB.Client.Extensions; +``` + +### 新しい名前空間を作成する + +```c# +await admin.CreateNamespaceAsync(); +``` + +### 既存の名前空間を削除する + +```c# +await admin.DropNamespaceAsync(); +``` + +### 名前空間が存在するかどうかを確認する + +```c# +var namespaceExists = await admin.IsNamespacePresentAsync(); +``` + +### 新しいテーブルを作成する + +```c# +await admin.CreateTableAsync(); +``` + +### 既存のテーブルを削除する + +```c# +await admin.DropTableAsync(); +``` + +### テーブルが存在するかどうかを確認する + +```c# +var tableExists = await admin.IsTablePresentAsync(); +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-two-phase-commit-transactions.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-two-phase-commit-transactions.mdx new file mode 100644 index 00000000..03d6bbb6 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/getting-started-with-two-phase-commit-transactions.mdx @@ -0,0 +1,145 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK の 2 フェーズコミットインターフェイスを使用した分散トランザクションをはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK は、ScalarDB の 2 フェーズコミットインターフェイスを使用したトランザクションをサポートします。SDK には、クラスター内の通信を強化するためのトランザクションとマネージャーの抽象化が含まれています。 + +:::note + +次の例のように非同期メソッドを使用することをお勧めしますが、代わりに同期メソッドを使用することもできます。 + +::: + +## 2 フェーズコミットインターフェースを使用したトランザクションについて + +SDK を使用すると、複数のアプリケーションにまたがる 2 フェーズコミットインターフェースを使用したトランザクションを実行できます。たとえば、複数のマイクロサービスがある場合、それぞれのマイクロサービスにトランザクションマネージャーを作成し、それらのマイクロサービスにまたがるトランザクションを実行できます。 + +2 フェーズコミットインターフェースを使用したトランザクションには、コーディネーターと参加者の 2 つのロールがあり、これらが協力して 1 つのトランザクションを実行します。 + +コーディネータープロセスは最初にトランザクションを開始し、トランザクションの ID をすべての参加者に送信し、参加者プロセスがトランザクションに参加します。 CRUD または SQL 操作を実行した後、コーディネータープロセスと参加者プロセスは 2 フェーズインターフェースを使用してトランザクションをコミットします。 + +## SDK をインストールする + +ScalarDB Cluster と同じメジャーバージョンとマイナーバージョンの [SDK](https://www.nuget.org/packages/ScalarDB.Client) を .NET プロジェクトにインストールします。組み込みの NuGet パッケージマネージャーを使用してこれを行うことができます。`.` を、使用しているバージョンに置き換えます。 + +```console +dotnet add package ScalarDB.Client --version '..*' +``` + +## 設定ファイルを作成する + +`scalardb-options.json` ファイルを作成し、次の内容を追加します。`` を FQDN または IP アドレスに、`` をクラスターのポート番号 (デフォルトでは `60053`) に置き換えます。 + +```json +{ + "ScalarDbOptions": { + "Address": "http://:", + "HopLimit": 10 + } +} +``` + +設定ファイルやクライアントを設定するその他の方法の詳細については、[クライアント設定](common-reference.mdx#クライアント設定)を参照してください。 + +## トランザクションマネージャーを取得します (コーディネータと参加者用) + +2 フェーズコミットインターフェイスを使用した分散トランザクションには、トランザクションマネージャーを取得する必要があります。トランザクションマネージャーを取得するには、次のように `TransactionFactory` を使用します。 + +```c# +// Pass the path to the settings file created in the previous step. +var factory = TransactionFactory.Create("scalardb-options.json"); + +using var manager = factory.GetTwoPhaseCommitTransactionManager(); +``` + +あるいは、次のトランザクションマネージャーを指定して、2 フェーズコミットインターフェイスを使用したトランザクションに CRUD 操作の代わりに SQL を使用することもできます。 + +```c# +using var manager = factory.GetSqlTwoPhaseCommitTransactionManager(); +``` + +## トランザクションを開始する (コーディネータ用) + +次のように、コーディネータの 2 フェーズコミットインターフェイスを使用してトランザクションを開始できます。 + +```c# +var transaction = await manager.BeginAsync(); +``` + +開始されたトランザクションの ID は、次のコードで取得できます。 + +```c# +var transactionId = transaction.Id; +``` + +## トランザクションに参加する (参加者向け) + +参加者の 2 フェーズコミットインターフェイスを使用して、次のようにトランザクションに参加できます。 + +```c# +var transaction = await manager.JoinAsync(transactionId); +``` + +## トランザクションを再開する (コーディネータと参加者用) + +通常、2 フェーズコミットインターフェイスを使用したトランザクションには、複数の要求と応答の交換が含まれます。以前の要求で開始または参加したトランザクションを操作する必要がある場合は、次のようにしてそのトランザクションを再開できます。 + +```c# +var transaction = manager.Resume(transactionId); +``` + +:::note + +`Resume` メソッドはトランザクションオブジェクトを作成するだけなので、非同期バージョンはありません。このため、間違った ID を使用してトランザクションを再開する可能性があります。 + +::: + +## トランザクションをロールバックする + +トランザクションがコミットに失敗した場合は、次のようにトランザクションをロールバックできます。 + +```c# +await transaction.RollbackAsync(); +``` + +## トランザクションをコミットする (コーディネータと参加者用) + +CRUD または SQL 操作を完了したら、トランザクションをコミットする必要があります。ただし、2 フェーズコミットインターフェイスを使用したトランザクションの場合は、まずコーディネータとすべての参加者でトランザクションを準備する必要があります。 + +```c# +await transaction.PrepareAsync(); +``` + +次に、同時実行制御プロトコルに応じて、次のようにコーディネーターとすべての参加者でトランザクションを検証する必要がある場合があります。 + +```c# +await transaction.ValidateAsync(); +``` + +最後に、次のようにしてコーディネーターとすべての参加者にトランザクションをコミットできます。 + +```c# +await transaction.CommitAsync(); +``` + +コーディネータまたは参加者のいずれかがトランザクションの準備または検証に失敗した場合は、コーディネータとすべての参加者で `RollbackAsync` を呼び出す必要があります。 + +また、コーディネータとすべての参加者がトランザクションのコミットに失敗した場合は、コーディネータとすべての参加者で `RollbackAsync` を呼び出す必要があります。 + +ただし、コーディネータまたは一部の参加者のみがトランザクションのコミットに失敗した場合は、コーディネータまたはいずれかの参加者がトランザクションのコミットに成功している限り、トランザクションはコミットされたとみなされます。 + +## CRUD 操作を実行する + +トランザクションの 2 フェーズコミットインターフェイスには、通常のトランザクションと同じ CRUD 操作メソッドがあります。詳細については、[CRUD 操作を実行する](getting-started-with-distributed-transactions.mdx#crud-操作を実行する) を参照してください。 + +## SQL ステートメントを実行する + +SQL トランザクションの 2 フェーズコミットインターフェイスには、通常の SQL トランザクションと同じ SQL クエリを実行するメソッドがあります。詳細については、[SQL クエリを実行する](getting-started-with-distributed-sql-transactions.mdx#sql-クエリを実行する)を参照してください. diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/index.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/index.mdx new file mode 100644 index 00000000..29e08a9a --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster-dotnet-client-sdk/index.mdx @@ -0,0 +1,25 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster .NET Client SDK の概要 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster .NET Client SDK を使用すると、アプリケーションは gRPC を使用して ScalarDB Cluster に接続できるようになります。 + +ScalarDB Cluster .NET Client SDK を使用するには、次の入門ガイドを参照してください。 + +* [分散トランザクションをはじめよう](getting-started-with-distributed-transactions.mdx) +* [分散 SQL トランザクションをはじめよう](getting-started-with-distributed-sql-transactions.mdx) +* [Administrative API をはじめよう](getting-started-with-admin-api.mdx) +* [C# クラスとしての ScalarDB テーブルをはじめよう](getting-started-with-scalardb-tables-as-csharp-classes.mdx) +* [ASP.NET Core と依存性注入をはじめよう](getting-started-with-aspnet-and-di.mdx) +* [LINQ をはじめよう](getting-started-with-linq.mdx) +* [2 フェーズコミットインターフェイスを使用した分散トランザクションをはじめよう](getting-started-with-two-phase-commit-transactions.mdx) +* [認証と認可をはじめよう](getting-started-with-auth.mdx) +* [例外処理](exception-handling.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/compatibility.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/compatibility.mdx new file mode 100644 index 00000000..01d53eeb --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/compatibility.mdx @@ -0,0 +1,42 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster 互換性マトリックス + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このドキュメントでは、クライアント SDK バージョン間の ScalarDB Cluster バージョンの互換性を示します。 + +## ScalarDB Cluster とクライアント SDK の互換性 + +| ScalarDB Cluster バージョン | ScalarDB Cluster Java Client SDK バージョン | ScalarDB Cluster .NET Client SDK バージョン | +|:-----------------------|:---------------------------------------|:---------------------------------------| +| 3.14 | 3.9 - 3.14 | 3.12* - 3.13 | +| 3.13 | 3.9 - 3.13 | 3.12* - 3.13 | +| 3.12 | 3.9 - 3.12 | 3.12* | +| 3.11 | 3.9 - 3.11 | サポート対象外 | +| 3.10 | 3.9 - 3.10 | サポート対象外 | +| 3.9 | 3.9 | サポート対象外 | + +\* このバージョンはプライベートプレビュー段階であるため、将来のバージョンでは下位互換性のない更新が行われる可能性があります。 + +## バージョンスキューポリシー + +:::note + +バージョンは `x.y.z` として表されます。`x` はメジャーバージョン、`y` はマイナーバージョン、`z` はパッチバージョンを表します。この形式は [セマンティックバージョニング](https://semver.org/) に従います。 + +::: + +- ScalarDB Cluster とクライアント SDK の **メジャー** バージョンが異なる場合、それらは **互換性がない** ため、**サポートされていません**。 +- ScalarDB Cluster とクライアント SDK の **メジャー** バージョンが同じで、**マイナー** バージョンが異なる場合、ScalarDB Cluster のバージョンはクライアント SDK バージョン以上である必要があります。例: + - **サポート対象:** ScalarDB Cluster 3.13 とクライアント SDK 3.11 の組み合わせ + - **サポート対象外:** ScalarDB Cluster 3.11 とクライアント SDK 3.13 の組み合わせ +- **メジャー** バージョンと **マイナー** バージョンが同じ場合、ScalarDB Cluster とクライアント SDK 間で異なる **パッチ** バージョンを使用できます。例: + - **サポート対象:** ScalarDB Cluster 3.13.2 とクライアント SDK 3.13.0 の組み合わせ + - **サポート対象:** ScalarDB Cluster 3.13.0 とクライアント SDK 3.13.2 の組み合わせ diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx new file mode 100644 index 00000000..f0418cff --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/developer-guide-for-scalardb-cluster-with-java-api.mdx @@ -0,0 +1,302 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# Java API を使用した ScalarDB Cluster の開発者ガイド + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster は、アプリケーションを開発するための Java API を提供します。このドキュメントでは、Java API の使用方法を説明します。 + +## ビルドに ScalarDB Cluster Java Client SDK を追加する + +ScalarDB Cluster Java Client SDK は、[Maven Central Repository](https://mvnrepository.com/artifact/com.scalar-labs/scalardb-cluster-java-client-sdk) で入手できます。 + +Gradle を使用して ScalarDB Cluster Java Client SDK への依存関係を追加するには、以下を使用します。 + +```gradle +dependencies { + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' +} +``` + +Maven を使用して依存関係を追加するには、以下を使用します。 + +```xml + + com.scalar-labs + scalardb-cluster-java-client-sdk + 3.13.1 + +``` + +## クライアントモード + +ScalarDB Cluster Java Client SDK は、`indirect` と `direct-kubernetes` の 2 つのクライアントモードをサポートしています。以下では、クライアントモードについて説明します。 + +### `indirect` クライアントモード + +このモードでは、単にリクエストを任意のクラスターノードに送信します (通常は Envoy などのロードバランサー経由)。リクエストを受信したクラスターノードは、トランザクション状態を持つ適切なクラスターノードにリクエストをルーティングします。 + +![ScalarDB Cluster アーキテクチャ](images/indirect-client-mode.png) + +このモードの利点は、クライアントを軽量に保てることです。 +欠点は、正しいクラスターノードに到達するために追加のホップが必要になり、パフォーマンスに影響する可能性があることです。 + +アプリケーションが別の Kubernetes クラスターで実行されていて、アプリケーションが Kubernetes API と各クラスターノードにアクセスできない場合でも、この接続モードを使用できます。 +アプリケーションが ScalarDB Cluster ノードと同じ Kubernetes クラスターで実行されている場合は、`direct-kubernetes` クライアントモードを使用できます。 + +### `direct-kubernetes` クライアントモード + +このモードでは、クライアントはメンバーシップロジック (Kubernetes API を使用) と分散ロジック (コンシステントハッシュアルゴリズム) を使用して、トランザクション状態を持つ適切なクラスターノードを見つけます。次に、クライアントはクラスターノードに直接リクエストを送信します。 + +![ScalarDB Cluster アーキテクチャ](images/direct-kubernetes-client-mode.png) + +このモードの利点は、適切なクラスターノードに到達するためのホップ数を減らすことができるため、パフォーマンスが向上することです。このモードの欠点は、クライアントにメンバーシップロジックとリクエストルーティングロジックが必要なため、クライアントをファットにする必要があることです。 + +この接続モードは Kubernetes API と各クラスターノードにアクセスする必要があるため、アプリケーションが ScalarDB Cluster ノードと同じ Kubernetes クラスターで実行されている場合にのみ、この接続モードを使用できます。アプリケーションが別の Kubernetes クラスターで実行されている場合は、`indirect` クライアントモードを使用します。 + +`direct-kubernetes` クライアントモードで Kubernetes にアプリケーションをデプロイする方法の詳細については、[`direct-kubernetes` モードを使用してクライアントアプリケーションを Kubernetes にデプロイする](../helm-charts/how-to-deploy-scalardb-cluster.mdx#direct-kubernetes-モードを使用してクライアント-アプリケーションを-kubernetes-にデプロイします) を参照してください。 + +## ScalarDB Cluster Java API + +ScalarDB Cluster Java Client SDK は、アプリケーションが ScalarDB Cluster にアクセスするための Java API を提供します。次の図は、ScalarDB Cluster Java API のアーキテクチャを示しています。 + +``` + +-----------------------+ + | ユーザー/アプリケーション | + +-----------------------+ + ↓ Java API + +--------------+ + | ScalarDB API | + +--------------+ + ↓ gRPC + +------------------+ + | ScalarDB Cluster | + +------------------+ + ↓ DB ベンダー固有のプロトコル + +----+ + | DB | + +----+ +``` + +ScalarDB Cluster Java API の使用は、クライアント構成と Schema Loader が異なることを除いて、ScalarDB Java API の使用とほぼ同じです。詳細については、[ScalarDB Java API ガイド](../api-guide.mdx) を参照してください。 + +次のセクションでは、ScalarDB Cluster Java API とクラスター用 Schema Loader のクライアント構成について説明します。 + +### クライアント構成 + +次の表は、ScalarDB Cluster Java API のクライアント構成を示しています。 + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| `scalar.db.transaction_manager` | `cluster` を指定する必要があります。 | - | +| `scalar.db.contact_points` | クラスターの連絡先。`indirect` クライアントモードを使用する場合は、`indirect:` の形式を使用して、クラスターノードの前にあるロードバランサーの IP アドレスを指定します。`direct-kubernetes` クライアントモードを使用する場合は、`direct-kubernetes:/` または単に `direct-kubernetes:` の形式を使用して、名前空間名 (オプション) と [エンドポイントリソース](https://kubernetes.io/docs/concepts/services-networking/service/#endpoints) の名前を指定して、メンバーシップ情報を取得します。名前空間名を指定しない場合、クライアントは `default` 名前空間を使用します。 | | +| `scalar.db.contact_port` | 連絡先のポート番号。 | `60053` | +| `scalar.db.cluster.grpc.deadline_duration_millis` | gRPC の期限期間(ミリ秒単位)。 | `60000` (60 秒) | +| `scalar.db.cluster.grpc.max_inbound_message_size` | 単一の gRPC フレームに許可される最大メッセージサイズ。 | gRPCのデフォルト値 | +| `scalar.db.cluster.grpc.max_inbound_metadata_size` | 受信できるメタデータの最大サイズ。 | gRPCのデフォルト値 | + +たとえば、`indirect` クライアントモードを使用し、ロードバランサーの IP アドレスが `192.168.10.1` の場合、クライアントを次のように構成できます。 + +```properties +scalar.db.transaction_manager=cluster +scalar.db.contact_points=indirect:192.168.10.1 +``` + +または、エンドポイントの名前空間を `ns`、エンドポイント名を `scalardb-cluster` として `direct-kubernetes` クライアントモードを使用する場合は、次のようにクライアントを構成できます。 + +```properties +scalar.db.transaction_manager=cluster +scalar.db.contact_points=direct-kubernetes:ns/scalardb-cluster +``` + +### クラスター用 Schema Loader + +ScalarDB Cluster 経由でスキーマをロードするには、専用の ScalarDB Cluster 用 Schema Loader (クラスター用 Schema Loader) を使用する必要があります。クラスター用Schema Loader の使用方法は、JAR ファイルの名前が異なることを除いて、[ScalarDB Schema Loader](../schema-loader.mdx) の使用方法と基本的に同じです。クラスター用 Schema Loader は、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1) からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドでクラスター用 Schema Loader を実行できます。 + +```console +java -jar scalardb-cluster-schema-loader-3.13.1-all.jar --config -f --coordinator +``` + +## ScalarDB Cluster SQL + +ScalarDB Cluster SQL には、次のように Java の ScalarDB 用 JDBC および Spring Data JDBC を介してアクセスできます。 + +``` + +----------------------------------------------+ + | ユーザー/アプリケーション | + +----------------------------------------------+ + ↓ ↓ Java API +Java API ↓ +-------------------------------+ + (JDBC) ↓ | Spring Data JDBC for ScalarDB | + ↓ +-------------------------------+ ++----------------------------------------------+ +| ScalarDB JDBC (ScalarDB SQL) | ++----------------------------------------------+ + ↓ gRPC + +----------------------+ + | ScalarDB Cluster SQL | + +----------------------+ + ↓ DB ベンダー固有のプロトコル + +----+ + | DB | + +----+ +``` + +このセクションでは、JDBC 経由で ScalarDB Cluster SQL を使用する方法と、Spring Data JDBC for ScalarDB を使用する方法について説明します。 + +### JDBC 経由の ScalarDB Cluster SQL + +JDBC 経由での ScalarDB Cluster SQL の使用は、プロジェクトに JDBC ドライバーを追加する方法を除いて、[ScalarDB JDBC](../scalardb-sql/jdbc-guide.mdx) を使用する場合とほぼ同じです。 + +[ビルドに ScalarDB Cluster Java Client SDK を追加する](#add-scalardb-cluster-java-client-sdk-to-your-build) で説明されているように ScalarDB Cluster Java Client SDK を追加することに加えて、プロジェクトに次の依存関係を追加する必要があります。 + +Gradle を使用して ScalarDB Cluster JDBC ドライバーへの依存関係を追加するには、以下を使用します。 + +```gradle +dependencies { + implementation 'com.scalar-labs:scalardb-sql-jdbc:3.13.1' + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' +} +``` + +Maven を使用して依存関係を追加するには、以下を使用します。 + +```xml + + + com.scalar-labs + scalardb-sql-jdbc + 3.13.1 + + + com.scalar-labs + scalardb-cluster-java-client-sdk + 3.13.1 + + +``` + +それ以外は、JDBC 経由で ScalarDB Cluster SQL を使用することは、ScalarDB JDBC を使用することと同じです。ScalarDB JDBC の詳細については、[ScalarDB JDBC ガイド](../scalardb-sql/jdbc-guide.mdx) を参照してください。 + +### Spring Data JDBC for ScalarDB 経由の ScalarDB Cluster SQL + +JDBC 経由の ScalarDB Cluster SQL と同様に、Spring Data JDBC for ScalarDB 経由の ScalarDB Cluster SQL を使用することは、プロジェクトへの追加方法を除いて、[Spring Data JDBC for ScalarDB](../scalardb-sql/spring-data-guide.mdx) を使用することとほぼ同じです。 + +[ScalarDB Cluster Java Client SDK をビルドに追加する](#add-scalardb-cluster-java-client-sdk-to-your-build) で説明されているように ScalarDB Cluster Java Client SDK を追加することに加えて、プロジェクトに次の依存関係を追加する必要があります: + +Gradle を使用して依存関係を追加するには、以下を使用します: + +```gradle +dependencies { + implementation 'com.scalar-labs:scalardb-sql-spring-data:3.13.1' + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' +} +``` + +Maven を使用して依存関係を追加するには、以下を使用します。 + +```xml + + + com.scalar-labs + scalardb-sql-spring-data + 3.13.1 + + + com.scalar-labs + scalardb-cluster-java-client-sdk + 3.13.1 + + +``` + +それ以外では、Spring Data JDBC for ScalarDB 経由で ScalarDB Cluster SQL を使用することは、Spring Data JDBC for ScalarDB を使用することと同じです。Spring Data JDBC for ScalarDB の詳細については、[Spring Data JDBC for ScalarDB ガイド](../scalardb-sql/spring-data-guide.mdx) を参照してください。 + +### ScalarDB Cluster SQL クライアント構成 + +次の表は、ScalarDB Cluster SQL の構成を示しています。 + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| +| `scalar.db.sql.connection_mode` | `cluster` を指定する必要があります。 | - | +| `scalar.db.sql.cluster_mode.contact_points` | クラスターの連絡先。`indirect` クライアントモードを使用する場合は、`indirect:` の形式を使用して、クラスターノードの前にあるロードバランサーの IP アドレスを指定します。`direct-kubernetes` クライアントモードを使用する場合は、`direct-kubernetes:/` または単に `direct-kubernetes:` の形式を使用して、名前空間名 (オプション) と [エンドポイントリソース](https://kubernetes.io/docs/concepts/services-networking/service/#endpoints) の名前を指定して、メンバーシップ情報を取得します。名前空間名を指定しない場合、クライアントは `default` 名前空間を使用します。 | | +| `scalar.db.sql.cluster_mode.contact_port` | 連絡先のポート番号。 | `60053` | +| `scalar.db.sql.default_transaction_mode` | デフォルトのトランザクションモード。`TRANSACTION` または `TWO_PHASE_COMMIT_TRANSACTION` を設定できます。 | `TRANSACTION` | +| `scalar.db.sql.default_namespace_name` | デフォルトの名前空間名。SQL ステートメントで名前空間名を指定しない場合は、この値が使用されます。 | | +| `scalar.db.cluster.grpc.deadline_duration_millis` | gRPC の期限期間(ミリ秒単位)。 | `60000` (60 秒) | +| `scalar.db.cluster.grpc.max_inbound_message_size` | 単一の gRPC フレームに許可される最大メッセージサイズ。 | gRPCのデフォルト値 | +| `scalar.db.cluster.grpc.max_inbound_metadata_size` | 受信できるメタデータの最大サイズ。 | gRPCのデフォルト値 | + +たとえば、`indirect` クライアントモードを使用し、ロードバランサーの IP アドレスが `192.168.10.1` の場合、クライアントを次のように構成できます。 + +```properties +scalar.db.sql.connection_mode=cluster +scalar.db.sql.cluster_mode.contact_points=indirect:192.168.10.1 +``` + +または、エンドポイントの名前空間を `ns`、エンドポイント名を `scalardb-cluster` として `direct-kubernetes` クライアントモードを使用する場合は、次のようにクライアントを構成できます。 + +```properties +scalar.db.sql.connection_mode=cluster +scalar.db.sql.cluster_mode.contact_points=direct-kubernetes:ns/scalardb-cluster +``` + +ScalarDB JDBC の構成方法の詳細については、[JDBC 接続 URL](../scalardb-sql/jdbc-guide.mdx#jdbc-接続-url) を参照してください。 + +Spring Data JDBC for ScalarDB の構成方法の詳細については、[構成](../scalardb-sql/spring-data-guide.mdx#構成) を参照してください。 + +### SQL CLI + +他の SQL データベースと同様に、ScalarDB SQL にも、コマンドラインシェルで対話的に SQL ステートメントを発行できる CLI ツールが用意されています。 + +Cluster 用の SQL CLI は、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1) からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドで SQL CLI を実行できます。 + +```console +java -jar scalardb-cluster-sql-cli-3.13.1-all.jar --config +``` + +#### 使用方法 + +CLI の使用方法は、次のように `-h` オプションを使用して確認できます。 + +```console +java -jar scalardb-cluster-sql-cli-3.13.1-all.jar -h +Usage: scalardb-sql-cli [-hs] -c=PROPERTIES_FILE [-e=COMMAND] [-f=FILE] + [-l=LOG_FILE] [-o=] [-p=PASSWORD] + [-u=USERNAME] +Starts ScalarDB SQL CLI. + -c, --config=PROPERTIES_FILE + A configuration file in properties format. + -e, --execute=COMMAND A command to execute. + -f, --file=FILE A script file to execute. + -h, --help Display this help message. + -l, --log=LOG_FILE A file to write output. + -o, --output-format= + Format mode for result display. You can specify + table/vertical/csv/tsv/xmlattrs/xmlelements/json/a + nsiconsole. + -p, --password=PASSWORD A password to connect. + -s, --silent Reduce the amount of informational messages + displayed. + -u, --username=USERNAME A username to connect. +``` + +## 参考資料 + +Java 以外のプログラミング言語で ScalarDB Cluster を使用する場合は、ScalarDB Cluster gRPC API を使用できます。 +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +* [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +* [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) + +Javadocs も利用可能です: + +* [ScalarDB Cluster Java Client SDK](https://javadoc.io/doc/com.scalar-labs/scalardb-cluster-java-client-sdk/3.13.1/index.html) +* [ScalarDB Cluster Common](https://javadoc.io/doc/com.scalar-labs/scalardb-cluster-common/3.13.1/index.html) +* [ScalarDB Cluster RPC](https://javadoc.io/doc/com.scalar-labs/scalardb-cluster-rpc/3.13.1/index.html) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-graphql.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-graphql.mdx new file mode 100644 index 00000000..4e613e00 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-graphql.mdx @@ -0,0 +1,324 @@ +--- +tags: + - Enterprise Premium +--- + +# ScalarDB Cluster GraphQL をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +## 前提条件 + +- 以下のいずれかの Java 開発キット (JDK): + - [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) LTS バージョン (8、11、17、または 21) + - [OpenJDK](https://openjdk.org/install/) LTS バージョン (8、11、17、または 21) +- Kubernetes クラスターで実行されている ScalarDB Cluster + - [ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx) の手順に従ってデプロイした Kubernetes クラスターで ScalarDB Cluster が実行されていることを前提としています。 + +## サンプルアプリケーション + +このチュートリアルでは、口座間で資金を移動できる電子マネーアプリケーションを作成するプロセスについて説明します。 + +次の図は、サンプルアプリケーションのシステムアーキテクチャを示しています。 + +``` + +-----------------------------------------------------------------------------------------------------------------------------------------+ + | [Kubernetes クラスター] | + | | + | [ポッド] [ポッド] [ポッド] | + | | + | +-------+ | + | +---> | Envoy | ---+ | + | | +-------+ | | + | | | | + +------------------------+ | +---------+ | +-------+ | +--------------------+ | + | Schema Loader | --+-> | サービス | ---+---> | Envoy | ---+---------> | サービス | ---+ | + | (間接クライアントモード) | | | (Envoy) | | +-------+ | | (ScalarDB Cluster) | | | + +------------------------+ | +---------+ | | +--------------------+ | +------------------------+ | + | | +-------+ | | +---> | ScalarDB Cluster ノード | ---+ | + | +---> | Envoy | ---+ | | +------------------------+ | | + | +-------+ | | | | + | | | +------------------------+ | +------------+ | + | +---+---> | ScalarDB Cluster ノード | ---+---> | PostgreSQL | | + | | | +------------------------+ | +------------+ | + | | | | | + | | | +------------------------+ | | + | | +---> | ScalarDB Cluster ノード | ---+ | + | | +------------------------+ | + +------------+ | +----------------------------+ | | + | ブラウザ | ------+---------------------------------------> | サービス | ---+ | + | (GraphiQL) | | | (ScalarDB Cluster GraphQL) | | + +------------+ | +----------------------------+ | + | | + +-----------------------------------------------------------------------------------------------------------------------------------------+ +``` + +## ステップ 1. `schema.json` を作成する + +以下は簡単なサンプルスキーマです。 + +`schema.json` を作成し、ファイルに次の内容を追加します。 + +```json +{ + "emoney.account": { + "transaction": true, + "partition-key": [ + "id" + ], + "clustering-key": [], + "columns": { + "id": "TEXT", + "balance": "INT" + } + } +} +``` + +## ステップ 2. `database.properties` を作成する + +ScalarDB Cluster の Schema Loader 用に `database.properties` を作成する必要があります。 + +ただし、まず Envoy (`scalardb-cluster-envoy`) のサービスリソースの `EXTERNAL-IP` アドレスを取得する必要があります。 + +`EXTERNAL-IP` アドレスを確認するには、次のコマンドを実行します。 + +```console +kubectl get svc scalardb-cluster-envoy +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost` です。 + +次に、`database.properties` を作成し、ファイルに次の内容を追加します。 + +```properties +scalar.db.transaction_manager=cluster +scalar.db.contact_points=indirect:localhost +``` + +ScalarDB Cluster に接続するには、`scalar.db.transaction_manager` プロパティに `cluster` を指定する必要があります。 + +また、このチュートリアルでは `indirect` クライアントモードを使用して Envoy のサービスリソースに接続します。 + +クライアントモードの詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) を参照してください。 + +## ステップ 3. スキーマをロードする + +ScalarDB Cluster 経由でスキーマをロードするには、ScalarDB Cluster 専用の Schema Loader (Schema Loader for Cluster) を使用する必要があります。Schema Loader for Cluster の使用方法は、JAR ファイルの名前が異なることを除いて、[Schema Loader for ScalarDB](../schema-loader.mdx) の使用方法と基本的に同じです。Cluster 用の Schema Loader は、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1) からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドで Cluster 用の Schema Loader を実行できます。 + +```console +java -jar scalardb-cluster-schema-loader-3.13.1-all.jar --config database.properties -f schema.json --coordinator +``` + +## ステップ 4. GraphiQL から操作を実行する + +ScalarDB Cluster では、`scalar.db.graphql.graphiql` プロパティが `true` に設定されている場合 (`true` がデフォルト値)、GraphiQL IDE が使用可能になります。 + +ScalarDB Cluster GraphQL (`scalardb-cluster-graphql`) のサービスリソースの `EXTERNAL-IP` アドレスを取得するには、次のコマンドを実行します。 + +```console +kubectl get svc scalardb-cluster-graphql +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-graphql LoadBalancer 10.105.74.214 localhost 8080:30514/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost`、GraphiQL IDE のエンドポイント URL は `http://localhost:8080/graphql` です。 +Web ブラウザでその URL を開くと、GraphiQL 画面が表示されます。 + +最初のレコードを挿入してみましょう。左ペインに次のミューテーションを貼り付け、ウィンドウ上部の三角形の `Execute Query` ボタンを押します。 + +```graphql +mutation PutUser1 { + account_put(put: {key: {id: "user1"}, values: {balance: 1000}}) +} +``` + +ScalarDB GraphQL は常にトランザクションを使用してクエリを実行します。上記のクエリは新しいトランザクションを開始し、ScalarDB Put コマンドを実行し、実行の最後にトランザクションをコミットします。 + +GraphQL サーバーからの次の応答が右側のペインに表示されます。 + +```json +{ + "data": { + "account_put": true + } +} +``` + +`"data"` フィールドには実行結果が含まれます。この応答は、ミューテーションの `account_put` フィールドが成功したことを示しています。ミューテーションの結果タイプは `Boolean!` で、操作が成功したかどうかを示します。 + +次に、挿入したレコードを取得しましょう。左ペインの前のミューテーションの横に次のクエリを貼り付けて、`Execute Query` ボタンをクリックします。上記の `mutation PutUser1` を削除していないため、ボタンの下にプルダウンメニューが表示され、実行する操作を選択できます。 以下に示すように、`GetUser1` を選択します。 + +```graphql +query GetUser1 { + account_get(get: {key: {id: "user1"}}) { + account { + id + balance + } + } +} +``` + +右側のペインに次の結果が表示されます。 + +```json +{ + "data": { + "account_get": { + "account": { + "id": "user1", + "balance": 1000 + } + } + } +} +``` + +### GraphQL API と ScalarDB Java API 間のマッピング + +自動的に生成された GraphQL スキーマは、クエリ、ミューテーション、および入出力のオブジェクトタイプを定義し、ターゲット名前空間内のすべてのテーブルに対して CRUD 操作を実行できるようにします。 + +これらの操作は、[`DistributedTransaction`](https://javadoc.io/doc/com.scalar-labs/scalardb/3.13.1/com/scalar/db/api/DistributedTransaction.html) インターフェースで定義されている ScalarDB API と一致するように設計されています。 + +名前空間に `account` テーブルがあると仮定すると、次のクエリとミューテーションが生成されます。 + +| ScalarDB API | GraphQL ルートタイプ | GraphQL フィールド | +|--------------------------------------------------------|-------------------|------------------------------------------------------------------------------------| +| `get(Get get)` | `Query` | `account_get(get: account_GetInput!): account_GetPayload` | +| `scan(Scan scan)` | `Query` | `account_scan(scan: account_ScanInput!): account_ScanPayload` | +| `put(Put put)` | `Mutation` | `account_put(put: account_PutInput!): Boolean!` | +| `put(java.util.List puts)` | `Mutation` | `account_bulkPut(put: [account_PutInput!]!): Boolean!` | +| `delete(Delete delete)` | `Mutation` | `account_delete(delete: account_DeleteInput!): Boolean!` | +| `delete(java.util.List deletes)` | `Mutation` | `account_bulkDelete(delete: [account_DeleteInput!]!): Boolean!` | +| `mutate(java.util.List mutations)` | `Mutation` | `account_mutate(put: [account_PutInput!]delete: [account_DeleteInput!]): Boolean!` | + +クラスタリングキーのないテーブルでは、`scan` フィールドは生成されないことに注意してください。これが、この電子マネーサンプルアプリケーションで `account_scan` フィールドが使用できない理由です。 + +生成されたすべての GraphQL タイプは、GraphiQL のドキュメントエクスプローラー (左上隅の `< Docs` リンク) で確認できます。 + +## ステップ 5. GraphiQL からの複数のリクエストにまたがるトランザクションを実行する + +複数の GraphQL リクエストにまたがるトランザクションを実行してみましょう。 + +生成されたスキーマには、トランザクションを識別できる `@transaction` ディレクティブが用意されています。このディレクティブは、クエリとミューテーションの両方で使用できます。 + +トランザクションを開始する前に、次のミューテーションを使用して必要なレコードを挿入する必要があります。 + +```graphql +mutation PutUser2 { + account_put(put: {key: {id: "user2"}, values: {balance: 1000}}) +} +``` + +### 操作を実行する前にトランザクションを開始する + +以下を実行して、クエリまたはミューテーションに引数のない `@transaction` ディレクティブを追加すると、実行時に新しいトランザクションが開始されます。 + +```graphql +query GetAccounts @transaction { + user1: account_get(get: {key: {id: "user1"}}) { + account { balance } + } + user2: account_get(get: {key: {id: "user2"}}) { + account { balance } + } +} +``` + +上記のコマンドを実行すると、`extensions` フィールドにトランザクション ID が入った結果が返されます。extensions の `id` 値は、リクエスト内の操作が実行されたトランザクション ID です。この場合、リクエストによって開始されたトランザクションの新しい ID は次のとおりです。 + +```json +{ + "data": { + "user1": { + "account": { + "balance": 1000 + } + }, + "user2": { + "account": { + "balance": 1000 + } + } + }, + "extensions": { + "transaction": { + "id": "c88da8a6-a13f-4857-82fe-45f1ab4150f9" + } + } +} +``` + +### 継続トランザクションで操作を実行する + +開始したトランザクションで次のクエリまたはミューテーションを実行するには、トランザクション ID を `@transaction` の `id` 引数として指定します。次の例では、同じトランザクションで user1 のアカウントから user2 のアカウントに残高を転送することにより、前の例で取得した 2 つのアカウントを更新します。 + +```graphql +mutation Transfer @transaction(id: "c88da8a6-a13f-4857-82fe-45f1ab4150f9") { + user1: account_put(put: {key: {id: "user1"}, values: {balance: 750}}) + user2: account_put(put: {key: {id: "user2"}, values: {balance: 1250}}) +} +``` + +GraphQL で開始されたトランザクションには 1 分のタイムアウト (デフォルト) があり、タイムアウトを超えると自動的にアボートされることに注意してください。 + +### トランザクションをコミットする + +継続中のトランザクションをコミットするには、`@transaction` ディレクティブの引数として `id` と `commit: true` フラグの両方を指定します。 + +```graphql +query GetAndCommit @transaction(id: "c88da8a6-a13f-4857-82fe-45f1ab4150f9", commit: true) { + user1: account_get(get: {key: {id: "user1"}}) { + account { balance } + } + user2: account_get(get: {key: {id: "user2"}}) { + account { balance } + } +} +``` + +**注:** `@transaction(commit: true)` のように `id` 引数なしで `commit: true` フラグを指定すると、新しいトランザクションが開始され、1 つの操作に対してのみコミットされます。この動作は、GraphiQL を使用した上記の例で見られるように、`@transaction` ディレクティブを指定しない場合とまったく同じです。つまり、`@transaction(commit: true)` が指定されている場合は、ディレクティブ自体を省略できます。 + +### トランザクションをアボートまたはロールバックする + +トランザクションを明示的にアボートまたはロールバックする必要がある場合は、`abort` または `rollback` ミューテーションフィールドを互換的に使用できます (どちらも効果と使用方法は同じです)。これらのフィールドを他の操作と混在させることはできないため、次のように `abort` または `rollback` ミューテーションフィールドのみを指定する必要があります。 + +```graphql +mutation AbortTx @transaction(id: "c88da8a6-a13f-4857-82fe-45f1ab4150f9") { + abort +} +``` + +または: + +```graphql +mutation RollbackTx @transaction(id: "c88da8a6-a13f-4857-82fe-45f1ab4150f9") { + rollback +} +``` + +## 参照 + +その他の ScalarDB Cluster チュートリアルについては、以下を参照してください。 + +- [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +- [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +- [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) +- [ScalarDB Cluster での Go をはじめよう](getting-started-with-using-go-for-scalardb-cluster.mdx) +- [ScalarDB Cluster での Python をはじめよう](getting-started-with-using-python-for-scalardb-cluster.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +- [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +- [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-jdbc.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-jdbc.mdx new file mode 100644 index 00000000..28cee2eb --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-jdbc.mdx @@ -0,0 +1,230 @@ +--- +tags: + - Enterprise Premium +--- + +# JDBC 経由の ScalarDB Cluster SQL をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、JDBC 経由で ScalarDB Cluster SQL を使用してサンプルアプリケーションを作成する方法について説明します。 + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- Kubernetes クラスターで実行されている ScalarDB Cluster + - [ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx) の手順に従ってデプロイした Kubernetes クラスターで ScalarDB Cluster が実行されていることを前提としています。 + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../requirements.mdx)を参照してください。 + +::: + +## サンプルアプリケーション + +このチュートリアルでは、ScalarDB JDBC を使用して、クレジットラインでアイテムを注文し、支払いを行うことができるサンプル電子商取引アプリケーションを作成するプロセスについて説明します。 + +次の図は、サンプルアプリケーションのシステムアーキテクチャを示しています。 + +``` + +------------------------------------------------------------------------------------------------------------------------------+ + | [Kubernetes クラスター] | + | | + | [ポッド] [ポッド] [ポッド] | + +------------------------+ | | + | SQL CLI | | +-------+ +-----------------------+ | + | (間接クライアントモード) | --+ | +---> | Envoy | ---+ +---> | ScalarDB Cluster ノード | ---+ | + +------------------------+ | | | +-------+ | | +-----------------------+ | | + | | | | | | | + | | +---------+ | +-------+ | +--------------------+ | +-----------------------+ | +------------+ | + +--+-> | サービス | ---+---> | Envoy | ---+---> | サービス | ---+---> | ScalarDB Cluster ノード | ---+---> | PostgreSQL | | + | | | (Envoy) | | +-------+ | | (ScalarDB Cluster) | | +-----------------------+ | +------------+ | + +-------------------------+ | | +---------+ | | +--------------------+ | | | + | ScalarDB JDBC の | | | | +-------+ | | +-----------------------+ | | + | サンプルアプリケーション | --+ | +---> | Envoy | ---+ +---> | ScalarDB Cluster ノード | ---+ | + | (間接クライアントモード) | | +-------+ +-----------------------+ | + +-------------------------+ | | + +------------------------------------------------------------------------------------------------------------------------------+ +``` + +## ステップ 1. ScalarDB サンプルリポジトリをクローンする + +```console +git clone https://github.com/scalar-labs/scalardb-samples.git +cd scalardb-samples/scalardb-sql-jdbc-sample +``` + +## ステップ 2. `scalardb-sql.properties` を変更する + +ScalarDB Cluster に接続するには、`scalardb-sql.properties` も変更する必要があります。ただし、その前に、次のように Envoy (`scalardb-cluster-envoy`) のサービスリソースの `EXTERNAL-IP` アドレスを取得する必要があります。 + +```console +kubectl get svc scalardb-cluster-envoy +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost` です。 + +次に、`scalardb-sql.properties` を開きます。 + +```console +vim scalardb-sql.properties +``` + +次に、`scalardb-sql.properties` を次のように変更します。 + +```properties +scalar.db.sql.connection_mode=cluster +scalar.db.sql.cluster_mode.contact_points=indirect:localhost +``` + +ScalarDB Cluster に接続するには、`scalar.db.sql.connection_mode` プロパティに `cluster` を指定する必要があります。また、このチュートリアルでは `indirect` クライアントモードを使用して Envoy のサービスリソースに接続します。クライアントモードの詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) を参照してください。 + +## ステップ 3. スキーマをロードする + +スキーマをロードするには、[SQL CLI](developer-guide-for-scalardb-cluster-with-java-api.mdx#sql-cli) を使用する必要があります。SQL CLI は [ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1) からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドを実行して Cluster 用の SQL CLI を使用できます。 + +```console +java -jar scalardb-cluster-sql-cli-3.13.1-all.jar --config scalardb-sql.properties --file schema.sql +``` + +## ステップ 4. 初期データをロードする + +サンプルアプリケーションを実行する前に、次のコマンドを実行して初期データをロードする必要があります。 + +```console +./gradlew run --args="LoadInitialData" +``` + +初期データがロードされた後、次のレコードがテーブルに保存されます: + +- `sample.customers` テーブルの場合: + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +- `sample.items` テーブルの場合: + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## ステップ 5. サンプルアプリケーションを実行する + +まず、ID が `1` である顧客に関する情報を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 0} +... +``` + +次に、顧客 ID `1` を使用して、リンゴ 3 個とオレンジ 2 個を注文します。注文形式は `:,:,...` であることに注意してください。 + +```console +./gradlew run --args="PlaceOrder 1 1:3,2:2" +... +{"order_id": "454f9c97-f456-44fd-96da-f527187fe39b"} +... +``` + +このコマンドを実行すると、注文 ID が表示されます。 + +注文 ID を使用して注文の詳細を確認してみましょう。 + +```console +./gradlew run --args="GetOrder 454f9c97-f456-44fd-96da-f527187fe39b" +... +{"order": {"order_id": "454f9c97-f456-44fd-96da-f527187fe39b","timestamp": 1685602722821,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1, "name": "Apple", "price": 1000, "count": 3},{"item_id": 2, "name": "Orange", "price": 2000, "count": 2}],"total": 7000}} +... +``` + +次に、別の注文を出して、顧客 ID `1` の注文履歴を取得しましょう。 + +```console +./gradlew run --args="PlaceOrder 1 5:1" +... +{"order_id": "3f40c718-59ec-48aa-a6fe-2fdaf12ad094"} +... +./gradlew run --args="GetOrders 1" +... +{"order": [{"order_id": "454f9c97-f456-44fd-96da-f527187fe39b","timestamp": 1685602722821,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1, "name": "Apple", "price": 1000, "count": 3},{"item_id": 2, "name": "Orange", "price": 2000, "count": 2}],"total": 7000},{"order_id": "3f40c718-59ec-48aa-a6fe-2fdaf12ad094","timestamp": 1685602811718,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 5, "name": "Melon", "price": 3000, "count": 1}],"total": 3000}]} +... +``` + +この注文履歴は、タイムスタンプの降順で表示されます。 + +顧客の現在の `credit_total` は `10000` です。顧客は、情報を取得したときに表示された `credit_limit` に達したため、これ以上注文することはできません。 + +```console +./gradlew run --args="GetCustomerInfo 1" +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 10000} +... +./gradlew run --args="PlaceOrder 1 3:1,4:1" +... +java.lang.RuntimeException: Credit limit exceeded + at sample.Sample.placeOrder(Sample.java:184) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:32) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:8) + at picocli.CommandLine.executeUserObject(CommandLine.java:2041) + at picocli.CommandLine.access$1500(CommandLine.java:148) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + at picocli.CommandLine.execute(CommandLine.java:2170) + at sample.command.SampleCommand.main(SampleCommand.java:35) +... +``` + +支払いが完了すると、顧客は再度注文できるようになります。 + +```console +./gradlew run --args="Repayment 1 8000" +... +./gradlew run --args="GetCustomerInfo 1" +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 2000} +... +./gradlew run --args="PlaceOrder 1 3:1,4:1" +... +{"order_id": "fb71279d-88ea-4974-a102-0ec4e7d65e25"} +... +``` + +## サンプルアプリケーションのソースコード + +ScalarDB Cluster SQL JDBC の詳細については、[サンプルアプリケーションのソースコード](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-sql-jdbc-sample/src/main/java/sample) を参照してください。 + +## 参照 + +その他の ScalarDB Cluster チュートリアルについては、以下を参照してください。 + +- [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +- [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +- [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) +- [ScalarDB Cluster での Go をはじめよう](getting-started-with-using-go-for-scalardb-cluster.mdx) +- [ScalarDB Cluster での Python をはじめよう](getting-started-with-using-python-for-scalardb-cluster.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +- [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +- [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx new file mode 100644 index 00000000..d6ac389d --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx @@ -0,0 +1,271 @@ +--- +tags: + - Enterprise Premium +--- + +# Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、Spring Data JDBC for ScalarDB を介して ScalarDB Cluster SQL を使用してサンプルアプリケーションを作成する方法について説明します。 + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- Kubernetes クラスターで実行されている ScalarDB Cluster + - [ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx) の手順に従ってデプロイした Kubernetes クラスターで ScalarDB Cluster が実行されていることを前提としています。 + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../requirements.mdx)を参照してください。 + +::: + +## サンプルアプリケーション + +このチュートリアルでは、Spring Data JDBC for ScalarDB を使用して、クレジットラインでアイテムを注文して支払うことができるサンプル電子商取引アプリケーションを作成するプロセスについて説明します。 + +次の図は、サンプルアプリケーションのシステムアーキテクチャを示しています。 + +``` + +------------------------------------------------------------------------------------------------------------------------------+ + | [Kubernetes クラスター] | + | | + | [ポッド] [ポッド] [ポッド] | + +------------------------+ | | + | SQL CLI | | +-------+ +------------------------+ | + | (間接クライアントモード) | --+ | +---> | Envoy | ---+ +---> | ScalarDB Cluster ノード | ---+ | + +------------------------+ | | | +-------+ | | +------------------------+ | | + | | | | | | | + | | +---------+ | +-------+ | +--------------------+ | +-----------------------+ | +------------+ | + +--+-> | サービス | ---+---> | Envoy | ---+---> | サービス | ---+---> | ScalarDB Cluster ノード | ---+---> | PostgreSQL | | + +------------------------+ | | | (Envoy) | | +-------+ | | (ScalarDB Cluster) | | +-----------------------+ | +------------+ | + | Spring Data JDBC for | | | +---------+ | | +--------------------+ | | | + | ScalarDB の | | | | +-------+ | | +------------------------+ | | + | サンプルアプリケーション | --+ | +---> | Envoy | ---+ +---> | ScalarDB Cluster ノード | ---+ | + | (間接クライアントモード) | | +-------+ +-----------------------+ | + +------------------------+ | | + +------------------------------------------------------------------------------------------------------------------------------+ +``` + +## ステップ 1. ScalarDB サンプルリポジトリをクローンする + +```console +git clone https://github.com/scalar-labs/scalardb-samples.git +cd scalardb-samples/spring-data-sample +``` + +## ステップ 2. `scalardb-sql.properties` を変更する + +ScalarDB Cluster に接続するには、`scalardb-sql.properties` も変更する必要があります。ただし、その前に、次のように Envoy (`scalardb-cluster-envoy`) のサービスリソースの `EXTERNAL-IP` アドレスを取得する必要があります。 + +```console +kubectl get svc scalardb-cluster-envoy +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost` です。 + +次に、`scalardb-sql.properties` を開きます。 + +```console +vim scalardb-sql.properties +``` + +次に、`scalardb-sql.properties` を次のように変更します。 + +```properties +scalar.db.sql.connection_mode=cluster +scalar.db.sql.cluster_mode.contact_points=indirect:localhost +``` + +ScalarDB Cluster に接続するには、`scalar.db.sql.connection_mode` プロパティに `cluster` を指定する必要があります。 + +また、このチュートリアルでは `indirect` クライアントモードを使用して Envoy のサービスリソースに接続します。 + +クライアントモードの詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx)を参照してください。 + +## ステップ 3. スキーマをロードする + +スキーマをロードするには、[SQL CLI](developer-guide-for-scalardb-cluster-with-java-api.mdx#sql-cli) を使用する必要があります。SQL CLI は [ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1)からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドを実行して Cluster 用の SQL CLI を使用できます。 + +```console +java -jar scalardb-cluster-sql-cli-3.13.1-all.jar --config scalardb-sql.properties --file schema.sql +``` + +## ステップ 4.`application.properties`を変更する + +次に、ScalarDB Cluster に接続するために `application.properties` も変更する必要があります。 + +```console +vim src/main/resources/application.properties +``` + +`scalardb-sql.properties` と同様に、`scalar.db.sql.connection_mode` プロパティに `cluster` を指定し、`indirect` クライアントモードを使用する必要があります。そのためには、`application.properties` を次のように変更します。 + +```properties +spring.datasource.driver-class-name=com.scalar.db.sql.jdbc.SqlJdbcDriver +spring.datasource.url=jdbc:scalardb:\ +?scalar.db.sql.connection_mode=cluster\ +&scalar.db.sql.cluster_mode.contact_points=indirect:localhost\ +&scalar.db.consensus_commit.isolation_level=SERIALIZABLE\ +&scalar.db.sql.default_namespace_name=sample +``` + +## ステップ 5. 初期データをロードする + +サンプルアプリケーションを実行する前に、次のコマンドを実行して初期データをロードする必要があります。 + +```console +./gradlew run --args="LoadInitialData" +``` + +初期データがロードされた後、次のレコードがテーブルに保存される必要があります。 + +- `sample.customers` テーブルの場合: + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +- `sample.items` テーブルの場合: + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## ステップ 6. サンプルアプリケーションを実行する + +まず、ID が `1` である顧客に関する情報を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +... +{"customer_id":1,"name":"Yamada Taro","credit_limit":10000,"credit_total":0} +... +``` + +次に、顧客 ID `1` を使用して、リンゴ 3 個とオレンジ 2 個を注文します。注文形式は `:,:,...` であることに注意してください。 + +```console +./gradlew run --args="PlaceOrder 1 1:3,2:2" +... +{"order_id":"2358ab35-5819-4f8f-acb1-12e73d97d34e","customer_id":1,"timestamp":1677478005400} +... +``` + +このコマンドを実行すると、注文 ID が表示されます。 + +注文 ID を使用して注文の詳細を確認してみましょう。 + +```console +./gradlew run --args="GetOrder 2358ab35-5819-4f8f-acb1-12e73d97d34e" +... +{"order_id":"2358ab35-5819-4f8f-acb1-12e73d97d34e","timestamp":1677478005400,"customer_id":1,"customer_name":"Yamada Taro","statements":[{"item_id":1,"item_name":"Apple","price":1000,"count":3,"total":3000},{"item_id":2,"item_name":"Orange","price":2000,"count":2,"total":4000}],"total":7000} +... +``` + +次に、別の注文を出して、顧客 ID `1` の注文履歴を取得しましょう。 + +```console +./gradlew run --args="PlaceOrder 1 5:1" +... +{"order_id":"46062b16-b71b-46f9-a9ff-dc6b0991259b","customer_id":1,"timestamp":1677478201428} +... +./gradlew run --args="GetOrders 1" +... +[{"order_id":"46062b16-b71b-46f9-a9ff-dc6b0991259b","timestamp":1677478201428,"customer_id":1,"customer_name":"Yamada Taro","statements":[{"item_id":5,"item_name":"Melon","price":3000,"count":1,"total":3000}],"total":3000},{"order_id":"2358ab35-5819-4f8f-acb1-12e73d97d34e","timestamp":1677478005400,"customer_id":1,"customer_name":"Yamada Taro","statements":[{"item_id":1,"item_name":"Apple","price":1000,"count":3,"total":3000},{"item_id":2,"item_name":"Orange","price":2000,"count":2,"total":4000}],"total":7000}] +... +``` + +この注文履歴は、タイムスタンプの降順で表示されます。 + +顧客の現在の `credit_total` は `10000` です。顧客は、情報を取得したときに表示された `credit_limit` に達したため、これ以上注文することはできません。 + +```console +./gradlew run --args="GetCustomerInfo 1" +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 10000} +... +./gradlew run --args="PlaceOrder 1 3:1,4:1" +... +java.lang.RuntimeException: Credit limit exceeded. limit:10000, total:17500 + at sample.SampleService.placeOrder(SampleService.java:102) + at sample.SampleService$$FastClassBySpringCGLIB$$1123c447.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at sample.SampleService$$EnhancerBySpringCGLIB$$a94e1d9.placeOrder() + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:37) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:13) + at picocli.CommandLine.executeUserObject(CommandLine.java:2041) + at picocli.CommandLine.access$1500(CommandLine.java:148) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + at picocli.CommandLine.execute(CommandLine.java:2170) + at sample.SampleApp.run(SampleApp.java:26) + at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:768) + at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:752) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at sample.SampleApp.main(SampleApp.java:35) +... +``` + +支払いが完了すると、顧客は再度注文できるようになります。 + +```console +./gradlew run --args="Repayment 1 8000" +... +./gradlew run --args="GetCustomerInfo 1" +... +{"customer_id":1,"name":"Yamada Taro","credit_limit":10000,"credit_total":2000} +... +./gradlew run --args="PlaceOrder 1 3:1,4:1" +... +{"order_id":"0350947a-9003-46f2-870e-6aa4b2df0f1f","customer_id":1,"timestamp":1677478728134} +... +``` + +## サンプルアプリケーションのソースコード + +Spring Data JDBC for ScalarDB の詳細については、[サンプルアプリケーションのソースコード](https://github.com/scalar-labs/scalardb-samples/tree/main/spring-data-sample/src/main)を確認してください。 + +## 参照 + +その他の ScalarDB Cluster チュートリアルについては、以下を参照してください。 + +- [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +- [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +- [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +- [ScalarDB Cluster での Go をはじめよう](getting-started-with-using-go-for-scalardb-cluster.mdx) +- [ScalarDB Cluster での Python をはじめよう](getting-started-with-using-python-for-scalardb-cluster.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +- [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +- [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster.mdx new file mode 100644 index 00000000..639f505e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-scalardb-cluster.mdx @@ -0,0 +1,408 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、Java API を通じて [ScalarDB Cluster](index.mdx) を使用するサンプルアプリケーションを作成する方法について説明します。 + +## 概要 + +このチュートリアルでは、ScalarDB を使用して商品を注文し、信用枠で支払いを行うことができるサンプルの電子商取引アプリケーションを作成するプロセスについて説明します。 + +:::note + +サンプルアプリケーションの焦点は ScalarDB の使用方法を示すことにあるため、アプリケーション固有のエラー処理、認証処理、および同様の機能はサンプルアプリケーションには含まれていません。ScalarDB での例外処理の詳細については、[例外の処理](../api-guide.mdx#例外の処理)を参照してください。 + +::: + +次の図は、サンプルアプリケーションのシステムアーキテクチャを示しています。 + +```mermaid +stateDiagram-v2 + state "Schema Loader
(間接クライアントモード)" as SL + state "Java API を使用したサンプルアプリケーション
(間接クライアントモード)" as SA + state "Kubernetes クラスタ" as KC + state "サービス (Envoy)" as SE + state "ポッド" as P1 + state "ポッド" as P2 + state "ポッド" as P3 + state "Envoy" as E1 + state "Envoy" as E2 + state "Envoy" as E3 + state "サービス (ScalarDB Cluster)" as SSC + state "ScalarDB Cluster" as SC1 + state "ScalarDB Cluster" as SC2 + state "ScalarDB Cluster" as SC3 + state "PostgreSQL" as PSQL + SL --> SE + SA --> SE + state KC { + SE --> E1 + SE --> E2 + SE --> E3 + state P1 { + E1 --> SSC + E2 --> SSC + E3 --> SSC + } + SSC --> SC1 + SSC --> SC2 + SSC --> SC3 + state P2 { + SC1 --> PSQL + SC1 --> SC2 + SC1 --> SC3 + SC2 --> PSQL + SC2 --> SC1 + SC2 --> SC3 + SC3 --> PSQL + SC3 --> SC1 + SC3 --> SC2 + } + state P3 { + PSQL + } + } +``` + +### このサンプルアプリケーションで実行できること + +サンプルアプリケーションは、次の種類のトランザクションをサポートしています: + +- 顧客情報を取得します。 +- 信用枠を使用して注文を行います。 + - 注文のコストが顧客の信用限度額を下回っているかどうかを確認します。 + - チェックが成功した場合は、注文履歴を記録し、顧客が支払った金額を更新します。 +- 注文 ID で注文情報を取得します。 +- 顧客 ID で注文情報を取得します。 +- 支払いを行います。 + - 顧客が支払った金額を減らします。 + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- Kubernetes クラスターで実行されている ScalarDB Cluster + - [ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx) の手順に従ってデプロイした Kubernetes クラスターで ScalarDB Cluster が実行されていることを前提としています。 + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../requirements.mdx)を参照してください。 + +::: + +## ScalarDB Cluster のセットアップ + +次のセクションでは、サンプルの電子商取引アプリケーションをセットアップする方法について説明します。 + +### ScalarDB サンプルリポジトリのクローンを作成する + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-sample +``` + +### `build.gradle` を変更する + +ScalarDB Cluster を使用するには、任意のテキストエディターで `build.gradle` を開きます。次に、`dependencies` セクションから `com.scalar-labs:scalardb` の既存の依存関係を削除し、`dependencies` セクションに次の依存関係を追加します。 + +```gradle +dependencies { + ... + + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' +} +``` + +### `database.properties` を変更する + +ScalarDB Cluster に接続するには、`database.properties` も変更する必要があります。ただし、その前に、Envoy サービスリソース (`scalardb-cluster-envoy`) の `EXTERNAL-IP` アドレスを取得する必要があります。サービスリソースを取得するには、次のコマンドを実行します。 + +```console +kubectl get svc scalardb-cluster-envoy +``` + +`CLUSTER-IP`、`PORT(S)`、`AGE` の値がそれぞれ異なる、以下のような出力が表示されます。 + +```console +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost` です。 + +`database.properties` では、`scalar.db.transaction_manager` プロパティに `cluster` を指定し、`scalar.db.contact_points` が Envoy サービスリソースに接続するためのクライアントモードとして `indirect` を使用する必要があります。 + +次のコマンドを実行して `database.properties` を開きます。 + +```console +vim database.properties +``` + +次に、`database.properties` を次のように変更します。 + +```properties +scalar.db.transaction_manager=cluster +scalar.db.contact_points=indirect:localhost +``` + +:::note + +クライアントモードの詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx). + +::: + +### スキーマをロードする + +サンプルアプリケーションのデータベーススキーマ (データを整理する方法) は、[`schema.json`](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-sample/schema.json) ですでに定義されています。 + +スキーマを適用するには、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1)に移動し、ScalarDB Cluster Schema Loader を `scalardb-samples/scalardb-sample` フォルダーにダウンロードします。 + +次に、次のコマンドを実行します。 + +```console +java -jar scalardb-cluster-schema-loader-3.13.1-all.jar --config database.properties -f schema.json --coordinator +``` + +#### スキーマの詳細 + +サンプルアプリケーションの [`schema.json`](https://github.com/scalar-labs/scalardb-samples/tree/main/scalardb-sample/schema.json) に示されているように、すべてのテーブルは `sample` 名前空間に作成されます。 + +- `sample.customers`: 顧客情報を管理するテーブル + - `credit_limit`: 貸し手が顧客に信用枠から支出を許可する最大金額 + - `credit_total`: 顧客が信用枠から支出した金額 +- `sample.orders`: 注文情報を管理するテーブル +- `sample.statements`: 注文明細情報を管理するテーブル +- `sample.items`: 注文するアイテムの情報を管理するテーブル + +スキーマのエンティティ関係図は次のとおりです。 + +![ERD](images/getting-started-ERD.png) + +### 初期データをロードする + +サンプルアプリケーションを実行する前に、次のコマンドを実行して初期データをロードする必要があります。 + +```console +./gradlew run --args="LoadInitialData" +``` + +初期データがロードされたら、次のレコードがテーブルに保存されます。 + +**`sample.customers` テーブル** + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +**`sample.items` テーブル** + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## サンプルアプリケーションでトランザクションを実行し、データを取得する + +次のセクションでは、サンプル電子商取引アプリケーションでトランザクションを実行し、データを取得する方法について説明します。 + +### 顧客情報を取得する + +次のコマンドを実行して、ID が `1` である顧客に関する情報を取得することから始めます。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 0} +... +``` + +### 注文する + +次に、次のコマンドを実行して、顧客 ID `1` にリンゴ 3 個とオレンジ 2 個を注文してもらいます。 + +:::note + +このコマンドの注文形式は `./gradlew run --args="PlaceOrder :,:,..."` です。 + +::: + +```console +./gradlew run --args="PlaceOrder 1 1:3,2:2" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す類似の出力が表示されます。 + +```console +... +{"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e"} +... +``` + +### 注文の詳細を確認する + +次のコマンドを実行して注文の詳細を確認します。`` は、前のコマンドを実行した後に表示される `order_id` の UUID に置き換えます。 + +```console +./gradlew run --args="GetOrder " +``` + +`order_id` と `timestamp` の UUID が異なる、以下のような出力が表示されます。 + +```console +... +{"order": {"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e","timestamp": 1650948340914,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}} +... +``` + +### 別の注文をする + +次のコマンドを実行して、顧客 ID `1` の `credit_total` の残額を使用してメロン 1 個を注文します。 + +```console +./gradlew run --args="PlaceOrder 1 5:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す類似の出力が表示されます。 + +```console +... +{"order_id": "bcc34150-91fa-4bea-83db-d2dbe6f0f30d"} +... +``` + +### 注文履歴を確認する + +次のコマンドを実行して、顧客 ID `1` のすべての注文履歴を取得します。 + +```console +./gradlew run --args="GetOrders 1" +``` + +`order_id` と `timestamp` の UUID が異なる以下のような出力が表示されます。これは、顧客 ID `1` のすべての注文履歴をタイムスタンプの降順で表示します。 + +```console +... +{"order": [{"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e","timestamp": 1650948340914,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000},{"order_id": "bcc34150-91fa-4bea-83db-d2dbe6f0f30d","timestamp": 1650948412766,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 5,"item_name": "Melon","price": 3000,"count": 1,"total": 3000}],"total": 3000}]} +... +``` + +### クレジット合計の確認 + +次のコマンドを実行して、顧客 ID `1` のクレジット合計を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` が `credit_total` の `credit_limit` に達しており、これ以上注文できないことを示しています。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 10000} +... +``` + +次のコマンドを実行して、ブドウ 1 個とマンゴー 1 個を注文してみます。 + +```console +./gradlew run --args="PlaceOrder 1 3:1,4:1" +``` + +次の出力が表示されます。これは、`credit_total` 金額が `credit_limit` 金額を超えたために注文が失敗したことを示しています。 + +```console +... +java.lang.RuntimeException: Credit limit exceeded + at sample.Sample.placeOrder(Sample.java:205) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:33) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:8) + at picocli.CommandLine.executeUserObject(CommandLine.java:1783) + at picocli.CommandLine.access$900(CommandLine.java:145) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2141) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2108) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1975) + at picocli.CommandLine.execute(CommandLine.java:1904) + at sample.command.SampleCommand.main(SampleCommand.java:35) +... +``` + +### 支払いを行う + +注文を続行するには、顧客 ID `1` が支払いを行って `credit_total` の金額を減らす必要があります。 + +次のコマンドを実行して支払いを行います。 + +```console +./gradlew run --args="Repayment 1 8000" +``` + +次に、次のコマンドを実行して、顧客 ID `1` の `credit_total` 金額を確認します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` に支払いが適用され、`credit_total` の金額が減ったことを示しています。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 2000} +... +``` + +顧客 ID `1` が支払いを済ませたので、次のコマンドを実行してブドウ 1 個とメロン 1 個を注文します。 + +```console +./gradlew run --args="PlaceOrder 1 3:1,4:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す類似の出力が表示されます。 + +```console +... +{"order_id": "8911cab3-1c2b-4322-9386-adb1c024e078"} +... +``` + +## 参照 + +その他の ScalarDB Cluster チュートリアルについては、以下を参照してください。 + +- [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +- [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +- [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) +- [ScalarDB Cluster での Go をはじめよう](getting-started-with-using-go-for-scalardb-cluster.mdx) +- [ScalarDB Cluster での Python をはじめよう](getting-started-with-using-python-for-scalardb-cluster.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +- [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +- [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-go-for-scalardb-cluster.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-go-for-scalardb-cluster.mdx new file mode 100644 index 00000000..61f42756 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-go-for-scalardb-cluster.mdx @@ -0,0 +1,443 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster での Go をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; + + + +このドキュメントでは、Go を使用して ScalarDB Cluster の gRPC クライアントコードを記述する方法について説明します。 + +## 前提条件 + +- [Go](https://go.dev/dl/) (最新の 3 つのメジャーリリースのいずれか) +- Kubernetes クラスターで実行されている ScalarDB Cluster + - [ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx)の手順に従ってデプロイした Kubernetes クラスターで ScalarDB Cluster が実行されていることを前提としています。 + + + +## サンプルアプリケーション + +このチュートリアルでは、口座間で送金できる電子マネーアプリケーションを作成するプロセスについて説明します。 + +## ステップ 1. `schema.json` を作成する + +以下は簡単なサンプルスキーマです。 + +`schema.json` を作成し、ファイルに次の内容を追加します。 + +```json +{ + "emoney.account": { + "transaction": true, + "partition-key": [ + "id" + ], + "clustering-key": [], + "columns": { + "id": "TEXT", + "balance": "INT" + } + } +} +``` + +## ステップ 2. `database.properties` を作成する + +ScalarDB Cluster の Schema Loader 用に `database.properties` を作成する必要があります。ただし、まず `LoadBalancer` サービス (`scalardb-cluster-envoy`) のサービスリソースの `EXTERNAL-IP` アドレスを取得する必要があります。 + +`EXTERNAL-IP` アドレスを確認するには、次のコマンドを実行します。 + +```console +kubectl get svc scalardb-cluster-envoy +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost` です。 + +次に、`database.properties` を作成し、ファイルに次の内容を追加します。 + +```properties +scalar.db.transaction_manager=cluster +scalar.db.contact_points=indirect:localhost +``` + +ScalarDB Cluster に接続するには、`scalar.db.transaction_manager` プロパティに `cluster` を指定する必要があります。また、このチュートリアルでは `indirect` クライアントモードを使用して Envoy のサービスリソースに接続します。クライアントモードの詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx)を参照してください。 + +## ステップ 3. スキーマをロードする + +ScalarDB Cluster 経由でスキーマをロードするには、専用の ScalarDB Cluster 用 Schema Loader (Schema Loader for Cluster) を使用する必要があります。Schema Loader for Cluster の使用方法は、JAR ファイルの名前が異なることを除いて、[Schema Loader for ScalarDB](../schema-loader.mdx) の使用方法と基本的に同じです。Schema Loader for Cluster は、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1)からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドで Schema Loader for Cluster を実行できます。 + +```console +java -jar scalardb-cluster-schema-loader-3.13.1-all.jar --config database.properties -f schema.json --coordinator +``` + +## ステップ 4. Go 環境をセットアップする + +gRPC クイックスタートドキュメントの [Prerequisites](https://grpc.io/docs/languages/go/quickstart/#prerequisites) セクションに従って、次のコンポーネントをインストールします。 + +- Go +- プロトコルバッファコンパイラ、`protoc`、バージョン 3.15 以降 +- プロトコルコンパイラ用の Go プラグイン + +## ステップ 5. ScalarDB Cluster gRPC のスタブコードを生成する + +ScalarDB Cluster の gRPC サーバーと通信するには、proto ファイルからスタブコードを生成する必要があります。 + +まず、新しい作業ディレクトリに、次のコマンドを実行して、gRPC コードの生成に使用する `scalardb-cluster` という名前のディレクトリを作成します。 + +```console +mkdir scalardb-cluster +``` + +次に、`scalardb-cluster.proto` ファイルをダウンロードし、作成したディレクトリに保存します。商用ライセンスをお持ちの ScalarDB Cluster ユーザーで、`scalardb-cluster.proto` ファイルが必要な場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +次のコマンドを実行して gRPC コードを生成します。 + +```console +protoc --go_out=. --go_opt=paths=source_relative \ + --go_opt=Mscalardb-cluster/scalardb-cluster.proto=example.com/scalardb-cluster \ + --go-grpc_out=. --go-grpc_opt=paths=source_relative \ + --go-grpc_opt=Mscalardb-cluster/scalardb-cluster.proto=example.com/scalardb-cluster \ + scalardb-cluster/scalardb-cluster.proto +``` + +コマンドを実行すると、`scalardb-cluster` サブディレクトリに `scalardb-cluster.pb.go` と `scalardb-cluster_grpc.pb.go` という 2 つのファイルが表示されます。 + +## ステップ 6. サンプルアプリケーションの作成 + +以下は、gRPC コードを使用するプログラムです。これを作業ディレクトリに `main.go` として保存します。このプログラムは、[ScalarDB をはじめよう](https://scalardb.scalar-labs.com/docs/latest/getting-started-with-scalardb/)の `ElectronicMoney.java` プログラムと同じことを行います。環境内の ScalarDB Cluster `LoadBalancer` サービスの `EXTERNAL-IP` 値に基づいて `SERVER_ADDRESS` の値を更新する必要があることに注意してください。 + +```go +package main + +import ( + "context" + "errors" + "flag" + "fmt" + "log" + "os" + "time" + + pb "emoney/scalardb-cluster" + + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +const ( + SERVER_ADDRESS = "localhost:60053" + NAMESPACE = "emoney" + TABLENAME = "account" + ID = "id" + BALANCE = "balance" +) + +var requestHeader = pb.RequestHeader{HopLimit: 10} + +type TxFn func(ctx context.Context, client pb.DistributedTransactionClient, transactionId string) error + +func withTransaction(fn TxFn) error { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + // Set up a connection to the server. + conn, err := grpc.Dial(SERVER_ADDRESS, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return err + } + defer conn.Close() + + client := pb.NewDistributedTransactionClient(conn) + + // Begin a transaction + beginResponse, err := client.Begin(ctx, &pb.BeginRequest{RequestHeader: &requestHeader}) + if err != nil { + return err + } + transactionId := beginResponse.TransactionId + + // Execute the function + err = fn(ctx, client, transactionId) + if err != nil { + // Rollback the transaction if there is an error + client.Rollback(ctx, &pb.RollbackRequest{TransactionId: transactionId}) + return err + } + + // Commit the transaction + _, err = client.Commit(ctx, &pb.CommitRequest{RequestHeader: &requestHeader, TransactionId: transactionId}) + return err +} + +func charge(ctx context.Context, client pb.DistributedTransactionClient, transactionId string, id string, amount int) error { + partitionKey := pb.Key{Columns: []*pb.Column{{Name: ID, Value: &pb.Column_TextValue_{TextValue: &pb.Column_TextValue{Value: &id}}}}} + + // Retrieve the current balance for id + get := pb.Get{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &partitionKey, ClusteringKey: nil, + GetType: pb.Get_GET_TYPE_GET, + } + getResponse, err := client.Get(ctx, &pb.GetRequest{RequestHeader: &requestHeader, TransactionId: transactionId, Get: &get}) + if err != nil { + return err + } + + // Calculate the balance + balance := int32(amount) + if result := getResponse.GetResult(); result != nil { + for _, column := range result.GetColumns() { + if column.Name == BALANCE { + balance += column.GetIntValue().GetValue() + break + } + } + } + + // Update the balance + put := pb.Put{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &partitionKey, ClusteringKey: nil, + Columns: []*pb.Column{ + {Name: BALANCE, Value: &pb.Column_IntValue_{IntValue: &pb.Column_IntValue{Value: &balance}}}, + }, + } + _, err = client.Put(ctx, &pb.PutRequest{RequestHeader: &requestHeader, TransactionId: transactionId, Puts: []*pb.Put{&put}}) + return err +} + +func pay(ctx context.Context, client pb.DistributedTransactionClient, transactionId string, fromId string, toId string, amount int) error { + fromPartitionKey := pb.Key{Columns: []*pb.Column{{Name: ID, Value: &pb.Column_TextValue_{TextValue: &pb.Column_TextValue{Value: &fromId}}}}} + toPartitionKey := pb.Key{Columns: []*pb.Column{{Name: ID, Value: &pb.Column_TextValue_{TextValue: &pb.Column_TextValue{Value: &toId}}}}} + + // Retrieve the current balances for ids + fromGet := pb.Get{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &fromPartitionKey, ClusteringKey: nil, + GetType: pb.Get_GET_TYPE_GET, + } + fromGetResponse, err := client.Get(ctx, &pb.GetRequest{RequestHeader: &requestHeader, TransactionId: transactionId, Get: &fromGet}) + if err != nil { + return err + } + toGet := pb.Get{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &toPartitionKey, ClusteringKey: nil, + GetType: pb.Get_GET_TYPE_GET, + } + toGetResponse, err := client.Get(ctx, &pb.GetRequest{RequestHeader: &requestHeader, TransactionId: transactionId, Get: &toGet}) + if err != nil { + return err + } + + // Calculate the balances (it assumes that both accounts exist) + var ( + fromBalance int32 + toBalance int32 + ) + for _, column := range fromGetResponse.GetResult().GetColumns() { + if column.Name == BALANCE { + fromBalance = column.GetIntValue().GetValue() + break + } + } + for _, column := range toGetResponse.GetResult().GetColumns() { + if column.Name == BALANCE { + toBalance = column.GetIntValue().GetValue() + break + } + } + newFromBalance := fromBalance - int32(amount) + newToBalance := toBalance + int32(amount) + + if newFromBalance < 0 { + return errors.New(fromId + " doesn't have enough balance.") + } + + // Update the balances + fromPut := pb.Put{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &fromPartitionKey, ClusteringKey: nil, + Columns: []*pb.Column{ + {Name: BALANCE, Value: &pb.Column_IntValue_{IntValue: &pb.Column_IntValue{Value: &newFromBalance}}}, + }, + } + toPut := pb.Put{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &toPartitionKey, ClusteringKey: nil, + Columns: []*pb.Column{ + {Name: BALANCE, Value: &pb.Column_IntValue_{IntValue: &pb.Column_IntValue{Value: &newToBalance}}}, + }, + } + _, err = client.Put(ctx, &pb.PutRequest{RequestHeader: &requestHeader, TransactionId: transactionId, Puts: []*pb.Put{&fromPut, &toPut}}) + return err +} + +func getBalance(ctx context.Context, client pb.DistributedTransactionClient, transactionId string, id string) (int, error) { + // Retrieve the current balance for id + get := pb.Get{ + NamespaceName: NAMESPACE, TableName: TABLENAME, + PartitionKey: &pb.Key{Columns: []*pb.Column{{Name: ID, Value: &pb.Column_TextValue_{TextValue: &pb.Column_TextValue{Value: &id}}}}}, + ClusteringKey: nil, + GetType: pb.Get_GET_TYPE_GET, + } + getResponse, err := client.Get(ctx, &pb.GetRequest{RequestHeader: &requestHeader, TransactionId: transactionId, Get: &get}) + if err != nil { + return 0, err + } + if getResponse.GetResult() == nil || len(getResponse.GetResult().GetColumns()) == 0 { + return 0, errors.New("Account " + id + " doesn't exist.") + } + + var balance int + for _, column := range getResponse.GetResult().GetColumns() { + if column.Name == BALANCE { + balance = int(column.GetIntValue().GetValue()) + break + } + } + return balance, nil +} + +func main() { + var ( + action = flag.String("action", "", "Action to perform: charge / pay / getBalance") + fromId = flag.String("from", "", "From account (needed for pay)") + toId = flag.String("to", "", "To account (needed for charge and pay)") + id = flag.String("id", "", "Account id (needed for getBalance)") + ) + var amount int + flag.IntVar(&amount, "amount", 0, "Amount to transfer (needed for charge and pay)") + flag.Parse() + + if *action == "charge" { + if *toId == "" || amount < 0 { + printUsageAndExit() + } + err := withTransaction(func(ctx context.Context, client pb.DistributedTransactionClient, txId string) error { + return charge(ctx, client, txId, *toId, amount) + }) + if err != nil { + log.Fatalf("error: %v", err) + } + } else if *action == "pay" { + if *toId == "" || *fromId == "" || amount < 0 { + printUsageAndExit() + } + err := withTransaction(func(ctx context.Context, client pb.DistributedTransactionClient, txId string) error { + return pay(ctx, client, txId, *fromId, *toId, amount) + }) + if err != nil { + log.Fatalf("error: %v", err) + } + } else if *action == "getBalance" { + if *id == "" { + printUsageAndExit() + } + var balance int + err := withTransaction(func(ctx context.Context, client pb.DistributedTransactionClient, txId string) error { + var err error + balance, err = getBalance(ctx, client, txId, *id) + return err + }) + if err != nil { + log.Fatalf("error: %v", err) + } + fmt.Println(balance) + } else { + fmt.Fprintln(os.Stderr, "Unknown action "+*action) + printUsageAndExit() + } +} + +func printUsageAndExit() { + flag.Usage() + os.Exit(1) +} +``` + +`main.go` ファイルを作成した後、次のコマンドを実行して `go.mod` ファイルを作成する必要があります。 + +```console +go mod init emoney +go mod tidy +``` + +これで、ディレクトリ構造は次のようになります。 + +```text +. +├── go.mod +├── go.sum +├── main.go +└── scalardb-cluster + ├── scalardb-cluster.pb.go + ├── scalardb-cluster.proto + └── scalardb-cluster_grpc.pb.go +``` + +その後、次のようにプログラムを実行できます: + +- `user1` に `1000` を請求します: + + ```console + go run main.go -action charge -amount 1000 -to user1 + ``` + +- `merchant1` に `0` を請求します (`merchant1` のアカウントを作成するだけです): + + ```console + go run main.go -action charge -amount 0 -to merchant1 + ``` + +- `user1` から `merchant1` に `100` を支払います: + + ```console + go run main.go -action pay -amount 100 -from user1 -to merchant1 + ``` + +- `user1` の残高を取得します。 + + ```console + go run main.go -action getBalance -id user1 + ``` + +- `merchant1` の残高を取得します。 + + ```console + go run main.go -action getBalance -id merchant1 + ``` + +`go build` を使用してバイナリを取得してから実行することもできます。 + +```console +go build +./emoney -action getBalance -id user1 +``` + +## 参照 + +その他の ScalarDB Cluster チュートリアルについては、以下を参照してください。 + +- [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +- [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +- [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +- [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) +- [ScalarDB Cluster での Python をはじめよう](getting-started-with-using-python-for-scalardb-cluster.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +- [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +- [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-python-for-scalardb-cluster.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-python-for-scalardb-cluster.mdx new file mode 100644 index 00000000..b67f7b04 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/getting-started-with-using-python-for-scalardb-cluster.mdx @@ -0,0 +1,486 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster での Python をはじめよう + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; + + + +このドキュメントでは、Python を使用して ScalarDB Cluster の gRPC クライアントコードを記述する方法について説明します。 + +## 前提条件 + +- [Python](https://www.python.org/downloads) 3.7 以降 +- Kubernetes クラスターで実行されている ScalarDB Cluster + - [ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx)の手順に従ってデプロイした Kubernetes クラスターで ScalarDB Cluster が実行されていることを前提としています。 + + + +## サンプルアプリケーション + +このチュートリアルでは、口座間で送金できる電子マネーアプリケーションを作成するプロセスについて説明します。 + +## ステップ 1. `schema.json` を作成する + +以下は簡単なサンプルスキーマです。 + +`schema.json` を作成し、ファイルに次の内容を追加します。 + +```json +{ + "emoney.account": { + "transaction": true, + "partition-key": [ + "id" + ], + "clustering-key": [], + "columns": { + "id": "TEXT", + "balance": "INT" + } + } +} +``` + +## ステップ 2. `database.properties` を作成する + +ScalarDB Cluster の Schema Loader 用に `database.properties` を作成する必要があります。ただし、まず `LoadBalancer` サービス (`scalardb-cluster-envoy`) のサービスリソースの `EXTERNAL-IP` アドレスを取得する必要があります。 + +`EXTERNAL-IP` アドレスを確認するには、次のコマンドを実行します。 + +```console +kubectl get svc scalardb-cluster-envoy +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 16h +``` + +この場合、`EXTERNAL-IP` アドレスは `localhost` です。 + +次に、`database.properties` を作成し、ファイルに次の内容を追加します。 + +```properties +scalar.db.transaction_manager=cluster +scalar.db.contact_points=indirect:localhost +``` + +ScalarDB Cluster に接続するには、`scalar.db.transaction_manager` プロパティに `cluster` を指定する必要があります。また、このチュートリアルでは `indirect` クライアントモードを使用して Envoy のサービスリソースに接続します。クライアントモードの詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx)を参照してください。 + +## ステップ 3. スキーマをロードする + +ScalarDB Cluster 経由でスキーマをロードするには、専用の ScalarDB Cluster 用 Schema Loader (Schema Loader for Cluster) を使用する必要があります。Schema Loader for Cluster の使用方法は、JAR ファイルの名前が異なることを除いて、[Schema Loader for ScalarDB](../schema-loader.mdx) の使用方法と基本的に同じです。Schema Loader for Cluster は、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases/tag/v3.13.1)からダウンロードできます。JAR ファイルをダウンロードしたら、次のコマンドで Schema Loader for Cluster を実行できます。 + +```console +java -jar scalardb-cluster-schema-loader-3.13.1-all.jar --config database.properties -f schema.json --coordinator +``` + +## ステップ 4. Python 環境をセットアップする + +Python 環境の管理方法は自由に選択できます。このガイドでは、Python アプリケーションが `venv` を使用して環境で実行されていることを前提としています。 + +任意の場所に作業ディレクトリを作成し、そこに移動します。次に、次のコマンドを実行して `venv` をアクティブ化します。 + +```console +python3 -m venv venv +source venv/bin/activate +``` + +`pip` コマンドを使用して gRPC パッケージをインストールしましょう。 + +```console +pip install grpcio grpcio-tools +``` + +## ステップ 5. ScalarDB Cluster gRPC のスタブコードを生成する + +ScalarDB Cluster の gRPC サーバーと通信するには、proto ファイルからスタブコードを生成する必要があります。 + +まず、`scalardb-cluster.proto` ファイルをダウンロードし、作業ディレクトリに保存します。商用ライセンスをお持ちの ScalarDB Cluster ユーザーで、`scalardb-cluster.proto` ファイルが必要な場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +次のコマンドを実行すると、スタブコードを生成できます。 + +```console +python -m grpc_tools.protoc -I . --python_out=. --pyi_out=. --grpc_python_out=. scalardb-cluster.proto +``` + +次のファイルが生成されます: + +- `scalardb_cluster_pb2.py` +- `scalardb_cluster_pb2.pyi` +- `scalardb_cluster_pb2_grpc.py` + +## ステップ 6. サンプルアプリケーションの作成 + +以下は、スタブコードを使用するサンプル Python アプリケーション (`electronic_money.py`) です。このプログラムは、[ScalarDB をはじめよう](https://scalardb.scalar-labs.com/docs/latest/getting-started-with-scalardb/) の `ElectronicMoney.java` プログラムと同じことを行います。環境内の ScalarDB Cluster `LoadBalancer` サービスの `EXTERNAL-IP` 値に基づいて `SERVER_ADDRESS` の値を更新する必要があることに注意してください。 + +```python +import argparse +from typing import Optional + +import grpc + +import scalardb_cluster_pb2_grpc +from scalardb_cluster_pb2 import ( + BeginRequest, + BeginResponse, + Column, + CommitRequest, + Get, + GetRequest, + GetResponse, + Key, + Put, + PutRequest, + RequestHeader, + RollbackRequest, +) + +SERVER_ADDRESS = "localhost:60053" +NAMESPACE = "emoney" +TABLENAME = "account" +ID = "id" +BALANCE = "balance" + +request_header = RequestHeader(hop_limit=10) + + +def charge(id: str, amount: int) -> None: + with grpc.insecure_channel(SERVER_ADDRESS) as channel: + stub = scalardb_cluster_pb2_grpc.DistributedTransactionStub(channel) + + begin_response: BeginResponse = stub.Begin( + BeginRequest(request_header=request_header) + ) + + transaction_id = begin_response.transaction_id + + try: + pkey = Key( + columns=[ + Column( + name=ID, + text_value=Column.TextValue(value=id), + ) + ] + ) + + # Retrieve the current balance for id + get = Get( + namespace_name=NAMESPACE, + table_name=TABLENAME, + get_type=Get.GetType.GET_TYPE_GET, + partition_key=pkey, + ) + get_response: GetResponse = stub.Get( + GetRequest( + request_header=request_header, + transaction_id=transaction_id, + get=get, + ) + ) + + # Calculate the balance + balance = amount + if get_response.result.columns: + balance_column = next( + c for c in get_response.result.columns if c.name == BALANCE + ) + current = balance_column.int_value.value + balance += current + + # Update the balance + put = Put( + namespace_name=NAMESPACE, + table_name=TABLENAME, + partition_key=pkey, + columns=[ + Column(name=BALANCE, int_value=Column.IntValue(value=balance)) + ], + ) + stub.Put( + PutRequest( + request_header=request_header, + transaction_id=transaction_id, + puts=[put], + ) + ) + + # Commit the transaction + stub.Commit( + CommitRequest( + request_header=request_header, + transaction_id=transaction_id, + ) + ) + except Exception as e: + # Rollback the transaction + stub.Rollback( + RollbackRequest( + request_header=request_header, + transaction_id=transaction_id, + ) + ) + raise e + + +def pay(from_id: str, to_id: str, amount: int) -> None: + with grpc.insecure_channel(SERVER_ADDRESS) as channel: + stub = scalardb_cluster_pb2_grpc.DistributedTransactionStub(channel) + + begin_response: BeginResponse = stub.Begin( + BeginRequest(request_header=request_header) + ) + + transaction_id = begin_response.transaction_id + + try: + from_pkey = Key( + columns=[ + Column( + name=ID, + text_value=Column.TextValue(value=from_id), + ) + ] + ) + to_pkey = Key( + columns=[ + Column( + name=ID, + text_value=Column.TextValue(value=to_id), + ) + ] + ) + + # Retrieve the current balances for ids + from_get = Get( + namespace_name=NAMESPACE, + table_name=TABLENAME, + get_type=Get.GetType.GET_TYPE_GET, + partition_key=from_pkey, + ) + from_get_response: GetResponse = stub.Get( + GetRequest( + request_header=request_header, + transaction_id=transaction_id, + get=from_get, + ) + ) + to_get = Get( + namespace_name=NAMESPACE, + table_name=TABLENAME, + get_type=Get.GetType.GET_TYPE_GET, + partition_key=to_pkey, + ) + to_get_response: GetResponse = stub.Get( + GetRequest( + request_header=request_header, + transaction_id=transaction_id, + get=to_get, + ) + ) + + # Calculate the balances (it assumes that both accounts exist) + new_from_balance = ( + next( + c for c in from_get_response.result.columns if c.name == BALANCE + ).int_value.value + - amount + ) + new_to_balance = ( + next( + c for c in to_get_response.result.columns if c.name == BALANCE + ).int_value.value + + amount + ) + + if new_from_balance < 0: + raise RuntimeError(from_id + " doesn't have enough balance.") + + # Update the balances + from_put = Put( + namespace_name=NAMESPACE, + table_name=TABLENAME, + partition_key=from_pkey, + columns=[ + Column( + name=BALANCE, int_value=Column.IntValue(value=new_from_balance) + ) + ], + ) + to_put = Put( + namespace_name=NAMESPACE, + table_name=TABLENAME, + partition_key=to_pkey, + columns=[ + Column( + name=BALANCE, int_value=Column.IntValue(value=new_to_balance) + ) + ], + ) + stub.Put( + PutRequest( + request_header=request_header, + transaction_id=transaction_id, + puts=[from_put, to_put], + ) + ) + + # Commit the transaction (records are automatically recovered in case of failure) + stub.Commit( + CommitRequest( + request_header=request_header, + transaction_id=transaction_id, + ) + ) + except Exception as e: + # Rollback the transaction + stub.Rollback( + RollbackRequest( + request_header=request_header, + transaction_id=transaction_id, + ) + ) + raise e + + +def get_balance(id: str) -> Optional[int]: + with grpc.insecure_channel(SERVER_ADDRESS) as channel: + stub = scalardb_cluster_pb2_grpc.DistributedTransactionStub(channel) + + begin_response: BeginResponse = stub.Begin( + BeginRequest(request_header=request_header) + ) + + transaction_id = begin_response.transaction_id + + try: + # Retrieve the current balance for id + get = Get( + namespace_name=NAMESPACE, + table_name=TABLENAME, + get_type=Get.GetType.GET_TYPE_GET, + partition_key=Key( + columns=[ + Column( + name=ID, + text_value=Column.TextValue(value=id), + ) + ] + ), + ) + get_response: GetResponse = stub.Get( + GetRequest( + request_header=request_header, + transaction_id=transaction_id, + get=get, + ) + ) + + balance = None + if get_response.result.columns: + balance_column = next( + c for c in get_response.result.columns if c.name == BALANCE + ) + balance = balance_column.int_value.value + + # Commit the transaction + stub.Commit( + CommitRequest( + request_header=request_header, + transaction_id=transaction_id, + ) + ) + + return balance + + except Exception as e: + # Rollback the transaction + stub.Rollback( + RollbackRequest( + request_header=request_header, + transaction_id=transaction_id, + ) + ) + raise e + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(required=True) + + parser_charge = subparsers.add_parser("charge") + parser_charge.add_argument("-amount", type=int, required=True) + parser_charge.add_argument("-to", type=str, required=True, dest="to_id") + parser_charge.set_defaults(func=lambda args: charge(args.to_id, args.amount)) + + parser_pay = subparsers.add_parser("pay") + parser_pay.add_argument("-amount", type=int, required=True) + parser_pay.add_argument("-from", type=str, required=True, dest="from_id") + parser_pay.add_argument("-to", type=str, required=True, dest="to_id") + parser_pay.set_defaults( + func=lambda args: pay(args.from_id, args.to_id, args.amount) + ) + + parser_get_balance = subparsers.add_parser("get-balance") + parser_get_balance.add_argument("-id", type=str, required=True) + parser_get_balance.set_defaults(func=lambda args: print(get_balance(args.id))) + + args = parser.parse_args() + args.func(args) + +``` + +その後、次のようにプログラムを実行できます: + +- `user1` に `1000` を請求します: + + ```console + python electronic_money.py charge -amount 1000 -to user1 + ``` + +- `merchant1` に `0` を請求します (`merchant1` のアカウントを作成するだけです): + + ```console + python electronic_money.py charge -amount 0 -to merchant1 + ``` + +- `user1` から `merchant1` に `100` を支払います: + + ```console + python electronic_money.py pay -amount 100 -from user1 -to merchant1 + ``` + +- `user1` の残高を取得します。 + + ```console + python electronic_money.py get-balance -id user1 + ``` + +- `merchant1` の残高を取得します。 + + ```console + python electronic_money.py get-balance -id merchant1 + ``` + +## 参照 + +その他の ScalarDB Cluster チュートリアルについては、以下を参照してください。 + +- [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +- [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +- [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +- [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) +- [ScalarDB Cluster での Go をはじめよう](getting-started-with-using-go-for-scalardb-cluster.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +- [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +- [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/images/direct-kubernetes-client-mode.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/images/direct-kubernetes-client-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..13df52e6f0d1d9f5be1099b4ac9e39305e5f5cbb GIT binary patch literal 64538 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%0Ak76^^zCkuM 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%0DS$g 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 n*u#PoZtoz5s literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/index.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/index.mdx new file mode 100644 index 00000000..d57c4ea0 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/index.mdx @@ -0,0 +1,71 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster は、[ScalarDB](../overview.mdx) のクラスタリングソリューションであり、一連のクラスターノードで構成され、各ノードは ScalarDB 機能を提供します。各クラスターノードには、トランザクション要求をクラスター内の適切なクラスターノードに転送するルーティングメカニズムがあります。 + +## ScalarDB Cluster を使用する理由 + +マイクロサービストランザクションなど、複数のクライアント要求にまたがるトランザクションを実行する場合、トランザクション処理のステートフルな性質のため、トランザクションのすべての要求は同じサーバーで処理する必要があります。ただし、分散環境では、スケーラビリティと可用性のためにサービスは通常複数のサーバー (またはホスト) で実行されるため、同じサーバーに要求をルーティングするのは簡単ではありません。このシナリオでは、トランザクション内のすべての要求を同じサーバーにルーティングする必要があり、負荷分散を確実にするために異なるトランザクションを分散する必要があります。 + +この課題に対処するには、セッションアフィニティ (スティッキーセッションとも呼ばれます) などのルーティングメカニズムを構成する必要があります。この戦略により、トランザクション内のリクエストが一貫して同じサーバーにルーティングされるようになります。または、gRPC を使用して双方向ストリーミング RPC を活用することもできます。ただし、これらの構成を実装するには通常、かなりの時間と労力が必要であることに注意してください。さらに、使用しているロードバランサー製品によっては、特定の構成調整が必要になる場合があります。 + +このトピックの詳細については、[2 フェーズコミットインターフェイスを使用したトランザクションでのリクエストルーティング](../two-phase-commit-transactions.mdx#2-フェーズコミットインターフェイスを使用したトランザクションでのリクエストルーティング) を参照してください。 + +ScalarDB Cluster は、リクエストをクラスター内の適切なクラスターノードに転送できるルーティングメカニズムを提供することで、この問題に対処します。したがって、クラスターノードがリクエストを受信すると、ノードはそのリクエストをクラスター内の正しいクラスターノードにルーティングできます。 + +## アーキテクチャ + +ScalarDB Cluster は、それぞれ ScalarDB 機能を備えた一連のクラスターノードで構成されています。このソリューションを使用することで、各クラスターノードは独立してトランザクションを実行できます。 + +ScalarDB Cluster の注目すべき機能は、ルーティングメカニズムを使用してトランザクション要求を分散することです。クラスターノードが要求を受信すると、ノードは要求を処理するのに適切なクラスターノードであるかどうかを判断します。適切なノードでない場合、ノードは要求をクラスター内の適切なクラスターノードにルーティングします。適切なクラスターノードを判断するために、ScalarDB Cluster はコンシステントハッシュアルゴリズムを使用します。 + +メンバーシップ管理は、ScalarDB Cluster で重要な役割を果たします。クラスターノードがクラスターに参加または離脱すると、クラスターの構成が自動的に調整され、この変更が反映されます。ScalarDB Cluster は現在、Kubernetes API を使用してメンバーシップ情報を取得します。 + +:::note + +現在、ScalarDB Cluster は Kubernetes 上での実行のみをサポートしています。 + +::: + +![ScalarDB Cluster アーキテクチャ](images/scalardb-cluster-architecture.png) + +## はじめに + +チュートリアルを開始する前に、ScalarDB Cluster をセットアップする必要があります。ScalarDB Cluster をセットアップするには、[ScalarDB Cluster をローカルにデプロイする方法](setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx) を参照してください。 + +ScalarDB Cluster の使用開始に関するチュートリアルについては、以下を参照してください。 + +* [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +* [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +* [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +* [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) + +## 参考資料 + +ScalarDB Cluster Helm Chart の詳細については、以下を参照してください。 + +* [ScalarDB Cluster Helm Chart](https://github.com/scalar-labs/helm-charts/tree/main/charts/scalardb-cluster) +* [Scalar Helm Chart を使用して Scalar 製品をデプロイする](../helm-charts/how-to-deploy-scalar-products.mdx) +* [ScalarDB Cluster のデプロイする方法](../helm-charts/how-to-deploy-scalardb-cluster.mdx) + +For details about the configurations for ScalarDB Cluster, refer to the following: + +* [ScalarDB Cluster の構成](scalardb-cluster-configurations.mdx) + +Java API で ScalarDB Cluster を使用するアプリケーションの開発の詳細については、以下を参照してください。 + +* [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + +ScalarDB Cluster gRPC API の詳細については、以下を参照してください。 + +* [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +* [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-scalardb-cluster.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-scalardb-cluster.mdx new file mode 100644 index 00000000..52927071 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-scalardb-cluster.mdx @@ -0,0 +1,313 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster を通じて非トランザクションストレージ操作を実行する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +このガイドでは、ScalarDB Cluster を介して非トランザクションストレージ操作を実行する方法について説明します。 + +:::warning + +ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +::: + +## 準備 + +このガイドでは、ScalarDB サンプルリポジトリのサンプルを使用して、データベースと ScalarDB Cluster をスタンドアロンモードでセットアップします。 + +:::note + +スタンドアロンモードの ScalarDB Cluster は、主に開発とテストを目的としています。 + +::: + +### ScalarDB サンプルリポジトリのクローンを作成する + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-cluster-standalone-mode +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB Cluster 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](../requirements.mdx#データベース)を参照してください。 + + + +

MySQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の MySQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://mysql-1:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://postgres-1:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//oracle-1:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の SQL Server のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://sqlserver-1:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB Local を実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://dynamodb-1:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントがない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を構成する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル** を **強力** に設定します。 + +

ScalarDB Cluster を構成する

+ + 次の手順では、ローカル環境に JDK が適切にインストールおよび構成されており、Azure で Cosmos DB for NoSQL アカウントが適切に構成されていることを前提としています。 + + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。説明に従って、`scalar.db.contact_points` と `scalar.db.password` の値を必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Cassandra のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=cassandra-1 + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +ScalarDB の構成の包括的なリストについては、[ScalarDB 構成](configurations.mdx)を参照してください。 + +## スタンドアロンモードで ScalarDB Cluster を設定する + +スタンドアロンモードで ScalarDB Cluster を設定するには、非トランザクションストレージ操作を実行するように ScalarDB Cluster を構成し、ライセンスキーを設定してから、ScalarDB Cluster を起動する必要があります。 + +### 非トランザクションストレージ操作を実行するように ScalarDB Cluster を構成する + +非トランザクションストレージ操作を実行するには、構成ファイル `scalardb-cluster-node.properties` で `scalar.db.transaction_manager` プロパティを `single-crud-operation` に設定する必要があります。 + +```properties +scalar.db.transaction_manager=single-crud-operation +``` + +### ライセンスキーの設定 + +プロパティファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../scalar-licensing/README.mdx)を参照してください。 + +### スタンドアロンモードで ScalarDB Cluster を起動 + +スタンドアロンモードで ScalarDB Cluster を起動するには、次のコマンドを実行します。 + +:::note + +ScalarDB Cluster のその他の設定を変更する場合は、以下のコマンドを実行する前に `scalardb-cluster-node.properties` ファイルを更新してください。 + +::: + +```console +docker compose up -d scalardb-cluster-node +``` + +## スキーマを作成またはインポートする + +ScalarDB には、実装固有のデータモデルとスキーマにマップされる独自のデータモデルとスキーマがあります。 + +- **データベーススキーマを作成する必要がありますか?** [クラスター用 Schema Loader](developer-guide-for-scalardb-cluster-with-java-api.mdx#クラスター用-schema-loader) を参照してください。 +- **既存のデータベースをインポートする必要がありますか?** [ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](../schema-loader-import.mdx)を参照してください。 + +## Java アプリケーションを作成する + +このセクションでは、ScalarDB Cluster Java Client SDK をプロジェクトに追加する方法と、Java を使用して非トランザクションストレージ操作を実行するようにプロジェクトを構成する方法について説明します。 + +### ScalarDB Cluster Java Client SDK をビルドに追加する + +ScalarDB Cluster Java Client SDK は、[Maven Central Repository](https://mvnrepository.com/artifact/com.scalar-labs/scalardb-cluster-java-client-sdk) で入手できます。Gradle または Maven を使用して、SDK をビルド依存関係としてアプリケーションに追加できます。 + +ビルドツールを選択し、手順に従って ScalarDB Cluster Java Client SDK のビルド依存関係をアプリケーションに追加します。 + + + + Gradle を使用して ScalarDB Cluster Java Client SDK のビルド依存関係を追加するには、アプリケーションの `build.gradle` に以下を追加します。 + + ```gradle + dependencies { + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' + } + ``` + + + Maven を使用して ScalarDB Cluster Java Client SDK のビルド依存関係を追加するには、アプリケーションの `pom.xml` に以下を追加します。 + + ```xml + + com.scalar-labs + scalardb-cluster-java-client-sdk + 3.13.1 + + ``` + + + +### ScalarDB Cluster Java SDK を構成する + +ScalarDB Cluster Java SDK の構成の詳細については、[クライアント構成](developer-guide-for-scalardb-cluster-with-java-api.mdx#クライアント構成)を参照してください。 + +### Java API を使用する + +Java API の詳細については、[ScalarDB Java API ガイド](../api-guide.mdx)を参照してください。 + +:::note + +非トランザクションストレージ操作には、次の制限が適用されます: + +- トランザクションの開始はサポートされていません。詳細については、[トランザクションを開始または開始せずにトランザクションを実行する](../api-guide.mdx#トランザクションを開始または開始せずにトランザクションを実行する)を参照してください。 +- 1 つのトランザクションで複数のミューテーションを実行することはサポートされていません。 + +::: + +### 詳細 + +- [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardb/3.13.1/index.html) +- [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-sql-interface.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-sql-interface.mdx new file mode 100644 index 00000000..4d753359 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-non-transactional-storage-operations-through-sql-interface.mdx @@ -0,0 +1,394 @@ +--- +tags: + - Enterprise Premium +--- + +# SQL インターフェースを介して非トランザクションストレージ操作を実行する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +このガイドでは、ScalarDB Cluster の SQL インターフェースを通じて非トランザクションストレージ操作を実行する方法について説明します。 + +:::warning + +ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +::: + +## 準備 + +このガイドでは、ScalarDB サンプルリポジトリのサンプルを使用して、データベースと ScalarDB Cluster をスタンドアロンモードでセットアップします。 + +:::note + +スタンドアロンモードの ScalarDB Cluster は、主に開発とテストを目的としています。 + +::: + +### ScalarDB サンプルリポジトリのクローンを作成する + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-cluster-standalone-mode +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB Cluster 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](../requirements.mdx#データベース)を参照してください。 + + + +

MySQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の MySQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://mysql-1:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://postgres-1:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//oracle-1:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の SQL Server のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://sqlserver-1:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB Local を実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://dynamodb-1:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントがない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を構成する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル** を **強力** に設定します。 + +

ScalarDB Cluster を構成する

+ + 次の手順では、ローカル環境に JDK が適切にインストールおよび構成されており、Azure で Cosmos DB for NoSQL アカウントが適切に構成されていることを前提としています。 + + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。説明に従って、`scalar.db.contact_points` と `scalar.db.password` の値を必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Cassandra のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=cassandra-1 + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +ScalarDB の構成の包括的なリストについては、[ScalarDB 構成](configurations.mdx)を参照してください。 + +## スタンドアロンモードで ScalarDB Cluster を設定する + +スタンドアロンモードで ScalarDB Cluster を設定するには、非トランザクションストレージ操作を実行するように ScalarDB Cluster を構成し、ライセンスキーを設定してから、ScalarDB Cluster を起動する必要があります。 + +### 非トランザクションストレージ操作を実行するように ScalarDB Cluster を構成する + +非トランザクションストレージ操作を実行するには、構成ファイル `scalardb-cluster-node.properties` で `scalar.db.transaction_manager` プロパティを `single-crud-operation` に設定する必要があります。 + +```properties +scalar.db.transaction_manager=single-crud-operation +``` + +### ライセンスキーの設定 + +プロパティファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../scalar-licensing/README.mdx)を参照してください。 + +### スタンドアロンモードで ScalarDB Cluster を起動 + +スタンドアロンモードで ScalarDB Cluster を起動するには、次のコマンドを実行します。 + +:::note + +ScalarDB Cluster のその他の設定を変更する場合は、以下のコマンドを実行する前に `scalardb-cluster-node.properties` ファイルを更新してください。 + +::: + +```console +docker compose up -d scalardb-cluster-node +``` + +## スキーマを作成またはインポートする + +ScalarDB には、実装固有のデータモデルとスキーマにマップされる独自のデータモデルとスキーマがあります。 + +- **データベーススキーマを作成する必要がありますか?** [クラスター用 Schema Loader](developer-guide-for-scalardb-cluster-with-java-api.mdx#クラスター用-schema-loader) を参照してください。 +- **既存のデータベースをインポートする必要がありますか?** [ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](../schema-loader-import.mdx)を参照してください。 + +また、サポートされている DDL のリストについては、[ScalarDB SQL 文法](../scalardb-sql/grammar.mdx)を参照してください。 + +## アプリケーションを作成する + + + +

JDBC アプリケーションを構成する

+ + このセクションでは、ScalarDB JDBC ドライバーをプロジェクトに追加する方法と、Java を使用して非トランザクションストレージ操作を実行するように構成する方法について説明します。 + +

ScalarDB JDBC ドライバーをプロジェクトに追加する

+ + Gradle または Maven を使用して、ScalarDB JDBC ドライバーをビルド依存関係としてアプリケーションに追加できます。 + + ビルドツールを選択し、手順に従って ScalarDB JDBC ドライバーのビルド依存関係をアプリケーションに追加します。 + + + + Gradle を使用して ScalarDB JDBC ドライバーのビルド依存関係を追加するには、アプリケーションの `build.gradle` に以下を追加します。 + + ```gradle + dependencies { + implementation 'com.scalar-labs:scalardb-sql-jdbc:3.13.1' + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' + } + ``` + + + Maven を使用して ScalarDB SQL API のビルド依存関係を追加するには、アプリケーションの `pom.xml` に以下を追加します。 + + ```xml + + + com.scalar-labs + scalardb-sql-jdbc + 3.13.1 + + + com.scalar-labs + scalardb-cluster-java-client-sdk + 3.13.1 + + + ``` + + + +

SQL インターフェース用に ScalarDB Cluster Java SDK を構成する

+ + SQL インターフェース用に ScalarDB Cluster Java SDK を構成する方法の詳細については、[ScalarDB Cluster SQL クライアント構成](developer-guide-for-scalardb-cluster-with-java-api.mdx#scalardb-cluster-sql-クライアント構成)を参照してください。 + +

JDBC API を使用する

+ + JDBC API の詳細については、[ScalarDB JDBC ガイド](../scalardb-sql/jdbc-guide.mdx)を参照してください。 + +:::note + +非トランザクションストレージ操作には、次の制限が適用されます: + +- トランザクションの開始はサポートされていません。 +- 単一の SQL ステートメントで複数のミューテーションを実行することはサポートされていません。 +- 分離レベルは常に `READ_COMMITTED` です。 + +::: + +

詳細

+ + - [Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) + - [Java JDBC API](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) +
+ +

Java アプリケーションを構成する

+ + このセクションでは、ScalarDB SQL API をプロジェクトに追加する方法と、Java を使用して非トランザクションストレージ操作を実行するように構成する方法について説明します。 + +

ScalarDB SQL API をプロジェクトに追加する

+ + Gradle または Maven を使用して、ScalarDB SQL API をビルド依存関係としてアプリケーションに追加できます。 + + ビルドツールを選択し、手順に従って ScalarDB SQL API のビルド依存関係をアプリケーションに追加します。 + + + + Gradle を使用して ScalarDB SQL API のビルド依存関係を追加するには、アプリケーションの `build.gradle` に以下を追加します。 + + ```gradle + dependencies { + implementation 'com.scalar-labs:scalardb-sql:3.13.1' + implementation 'com.scalar-labs:scalardb-cluster-java-client-sdk:3.13.1' + } + ``` + + + Maven を使用して ScalarDB SQL API のビルド依存関係を追加するには、アプリケーションの `pom.xml` に以下を追加します。 + + ```xml + + + com.scalar-labs + scalardb-sql + 3.13.1 + + + com.scalar-labs + scalardb-cluster-java-client-sdk + 3.13.1 + + + ``` + + + +

SQL インターフェース用に ScalarDB Cluster Java SDK を構成する

+ + SQL インターフェース用に ScalarDB Cluster Java SDK を構成する方法の詳細については、[ScalarDB Cluster SQL クライアント構成](developer-guide-for-scalardb-cluster-with-java-api.mdx#scalardb-cluster-sql-クライアント構成)を参照してください。 + +

Java API を使用する

+ + SQL API の詳細については、[ScalarDB SQL API ガイド](../scalardb-sql/sql-api-guide.mdx)を参照してください。 + +:::note + +非トランザクションストレージ操作には、次の制限が適用されます: + +- トランザクションの開始はサポートされていません。 +- 単一の SQL ステートメントで複数のミューテーションを実行することはサポートされていません。 +- 分離レベルは常に `READ_COMMITTED` です。 + +::: + +

詳細

+ + - [Javadoc](https://javadoc.io/doc/com.scalar-labs/scalardb-sql/3.13.1/index.html) + +
+
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster-sql.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster-sql.mdx new file mode 100644 index 00000000..94e28102 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster-sql.mdx @@ -0,0 +1,300 @@ +--- +tags: + - Enterprise Premium +--- + +# ScalarDB Cluster SQL を介してトランザクションを実行する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +このガイドでは、ScalarDB プロパティファイルを構成する方法と、ScalarDB Cluster SQL を使用して 1 フェーズまたは 2 フェーズのコミットインターフェイスを介してトランザクションを実行するためのスキーマを作成する方法について説明します。 + +:::warning + +ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +::: + +## 準備 + +このガイドでは、ScalarDB サンプルリポジトリのサンプルを使用して、データベースと ScalarDB Cluster をスタンドアロンモードでセットアップします。 + +:::note + +スタンドアロンモードの ScalarDB Cluster は、主に開発とテストを目的としています。 + +::: + +### ScalarDB サンプルリポジトリのクローンを作成する + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-cluster-standalone-mode +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB Cluster 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](../requirements.mdx#データベース)を参照してください。 + + + +

MySQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の MySQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://mysql-1:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://postgres-1:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//oracle-1:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の SQL Server のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://sqlserver-1:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB Local を実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://dynamodb-1:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントがない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を構成する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル** を **強力** に設定します。 + +

ScalarDB Cluster を構成する

+ + 次の手順では、ローカル環境に JDK が適切にインストールおよび構成されており、Azure で Cosmos DB for NoSQL アカウントが適切に構成されていることを前提としています。 + + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。説明に従って、`scalar.db.contact_points` と `scalar.db.password` の値を必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Cassandra のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=cassandra-1 + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +ScalarDB Cluster SQL の構成の包括的なリストについては、[ScalarDB Cluster SQL クライアント構成](developer-guide-for-scalardb-cluster-with-java-api.mdx#scalardb-cluster-sql-クライアント構成)を参照してください。 + +## スタンドアロンモードで ScalarDB Cluster を設定する + +スタンドアロンモードで ScalarDB Cluster を設定するには、ライセンスキーを設定してから ScalarDB Cluster を起動する必要があります。 + +### ライセンスキーの設定 + +プロパティファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../scalar-licensing/README.mdx)を参照してください。 + +### スタンドアロンモードで ScalarDB Cluster を起動 + +スタンドアロンモードで ScalarDB Cluster を起動するには、次のコマンドを実行します。 + +:::note + +ScalarDB Cluster のその他の設定を変更する場合は、以下のコマンドを実行する前に `scalardb-cluster-node.properties` ファイルを更新してください。 + +::: + +```console +docker compose up -d scalardb-cluster-node +``` + +## スキーマを作成またはインポートする + +ScalarDB には、実装固有のデータモデルとスキーマにマップされる独自のデータモデルとスキーマがあります。 + +- **データベーススキーマを作成する必要がありますか?** [クラスター用 Schema Loader](developer-guide-for-scalardb-cluster-with-java-api.mdx#クラスター用-schema-loader) を参照してください。 +- **既存のデータベースをインポートする必要がありますか?** [ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](../schema-loader-import.mdx)を参照してください。 + +## トランザクションを実行する + +1 フェーズまたは 2 フェーズのコミットインターフェースを使用してトランザクションを実行できます。トランザクションを実行する方法を選択します。 + + + +

1 フェーズコミットインターフェース

+ + 1 フェーズコミットインターフェースを使用してトランザクションを実行する方法の詳細については、[ScalarDB SQL JDBC ガイド](../scalardb-sql/jdbc-guide.mdx)を参照してください。 + +:::note + +2 フェーズコミットインターフェースでトランザクションを実行する方法に関するドキュメントは近日公開予定です。 + +::: +
+ +

1 フェーズコミットインターフェース

+ + 1 フェーズコミットインターフェースを使用してトランザクションを実行する方法の詳細については、[ScalarDB SQL API ガイド](../scalardb-sql/sql-api-guide.mdx)を参照してください。 + +:::note + +2 フェーズコミットインターフェースでトランザクションを実行する方法に関するドキュメントは近日公開予定です。 + +::: + +

詳細

+ + ScalarDB Cluster SQL を使用してトランザクションを実行する方法の詳細については、以下を参照してください。 + + - [ScalarDB Cluster SQL gRPC API ガイド](scalardb-cluster-sql-grpc-api-guide.mdx) +
+ +

1 フェーズまたは 2 フェーズコミットインターフェイス

+ + 1 フェーズまたは 2 フェーズコミットインターフェイスを使用してトランザクションを実行する方法の詳細については、[ScalarDB Cluster .NET Client SDK での LINQ をはじめよう](../scalardb-cluster-dotnet-client-sdk/getting-started-with-linq.mdx#トランザクションの管理)を参照してください。 +
+ +

1 フェーズコミットインターフェース

+ + 1 フェーズコミットインターフェイスを使用してトランザクションを実行する方法の詳細については、[ScalarDB Cluster .NET Client SDK での分散 SQL トランザクションをはじめよう](../scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-sql-transactions.mdx)を参照してください。 + +:::note + +2 フェーズコミットインターフェースでトランザクションを実行する方法に関するドキュメントは近日公開予定です。今のところは、[ScalarDB Cluster .NET Client SDK の 2 フェーズコミットインターフェイスを使用した分散トランザクションをはじめよう](../scalardb-cluster-dotnet-client-sdk/getting-started-with-two-phase-commit-transactions.mdx) を参照してください。 + +::: +
+
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster.mdx new file mode 100644 index 00000000..24475586 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/run-transactions-through-scalardb-cluster.mdx @@ -0,0 +1,299 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster を介してトランザクションを実行する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +このガイドでは、ScalarDB プロパティファイルを構成し、ScalarDB Cluster を使用して 1 フェーズまたは 2 フェーズのコミットインターフェイスを介してトランザクションを実行するためのスキーマを作成する方法について説明します。 + +:::warning + +ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +::: + +## 準備 + +このガイドでは、ScalarDB サンプルリポジトリのサンプルを使用して、データベースと ScalarDB Cluster をスタンドアロンモードでセットアップします。 + +:::note + +スタンドアロンモードの ScalarDB Cluster は、主に開発とテストを目的としています。 + +::: + +### ScalarDB サンプルリポジトリのクローンを作成する + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-cluster-standalone-mode +``` + +## データベースをセットアップする + +データベースを選択し、指示に従って ScalarDB Cluster 用に設定します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](../requirements.mdx#データベース)を参照してください。 + + + +

MySQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の MySQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://mysql-1:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://postgres-1:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//oracle-1:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の SQL Server のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://sqlserver-1:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB Local を実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://dynamodb-1:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントがない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を構成する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル** を **強力** に設定します。 + +

ScalarDB Cluster を構成する

+ + 次の手順では、ローカル環境に JDK が適切にインストールおよび構成されており、Azure で Cosmos DB for NoSQL アカウントが適切に構成されていることを前提としています。 + + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。説明に従って、`scalar.db.contact_points` と `scalar.db.password` の値を必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Cassandra のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=cassandra-1 + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +ScalarDB Cluster の構成の包括的なリストについては、[ScalarDB Cluster の構成](developer-guide-for-scalardb-cluster-with-java-api.mdx#scalardb-cluster-sql-クライアント構成) を参照してください。 + +## スタンドアロンモードで ScalarDB Cluster を設定する + +スタンドアロンモードで ScalarDB Cluster を設定するには、ライセンスキーを設定してから ScalarDB Cluster を起動する必要があります。 + +### ライセンスキーの設定 + +プロパティファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../scalar-licensing/README.mdx)を参照してください。 + +### スタンドアロンモードで ScalarDB Cluster を起動 + +スタンドアロンモードで ScalarDB Cluster を起動するには、次のコマンドを実行します。 + +:::note + +ScalarDB Cluster のその他の設定を変更する場合は、以下のコマンドを実行する前に `scalardb-cluster-node.properties` ファイルを更新してください。 + +::: + +```console +docker compose up -d scalardb-cluster-node +``` + +## スキーマを作成またはインポートする + +ScalarDB には、実装固有のデータモデルとスキーマにマップされる独自のデータモデルとスキーマがあります。 + +- **データベーススキーマを作成する必要がありますか?** [ScalarDB Schema Loader](../schema-loader.mdx) を参照してください。 +- **既存のデータベースをインポートする必要がありますか?** [ScalarDB Schema Loader を使用して既存のテーブルを ScalarDB にインポートする](../schema-loader-import.mdx)を参照してください。 + +## トランザクションを実行する + +1 フェーズまたは 2 フェーズのコミットインターフェースを使用してトランザクションを実行できます。トランザクションを実行する方法を選択します。 + + + +

1 フェーズコミットインターフェース

+ + 1 フェーズコミットインターフェイスを使用してトランザクションを実行する方法の詳細については、[ScalarDB Java API ガイド](../api-guide.mdx#transactional-api)を参照してください。 + +:::note + +1 フェーズコミットインターフェースを使用してトランザクションを実行するには、次のサンプルチュートリアルを参照してください。 + +- [マルチストレージトランザクションをサポートするサンプルアプリケーションを作成する](../scalardb-samples/multi-storage-transaction-sample/README.mdx) +- [マルチストレージトランザクションを備えた Spring Data JDBC for ScalarDB のサンプルアプリケーション](../scalardb-samples/spring-data-multi-storage-transaction-sample/README.mdx) + +::: + +

2 フェーズコミットインターフェース

+ + 2 フェーズコミットインターフェイスを使用してトランザクションを実行する方法の詳細については、[2 フェーズコミットインターフェイスを使用したトランザクション](../two-phase-commit-transactions.mdx)を参照してください。 + +:::note + +2 フェーズコミットインターフェースを使用してトランザクションを実行するには、次のサンプルチュートリアルを参照してください。 + +- [マイクロサービストランザクションをサポートするサンプルアプリケーションを作成する](../scalardb-samples/microservice-transaction-sample/README.mdx) +- [マイクロサービストランザクションを使用した Spring Data JDBC for ScalarDB のサンプルアプリケーション](../scalardb-samples/spring-data-microservice-transaction-sample/README.mdx) + +::: + +

詳細

+ + ScalarDB Cluster を使用してトランザクションを実行する方法の詳細については、以下を参照してください。 + + - [ScalarDB Cluster gRPC API ガイド](scalardb-cluster-grpc-api-guide.mdx) +
+ +

1 フェーズコミットインターフェース

+ + 1 フェーズコミットインターフェイスを使用してトランザクションを実行する方法の詳細については、[ScalarDB Cluster .NET Client SDK での分散トランザクションをはじめよう](../scalardb-cluster-dotnet-client-sdk/getting-started-with-distributed-transactions.mdx)を参照してください。 + +

2 フェーズコミットインターフェース

+ + 2 フェーズコミットインターフェイスを使用してトランザクションを実行する方法の詳細については、[ScalarDB Cluster .NET Client SDK の 2 フェーズコミットインターフェイスを使用した分散トランザクションをはじめよう](../scalardb-cluster-dotnet-client-sdk/getting-started-with-two-phase-commit-transactions.mdx)を参照してください。 +
+
diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-status-codes.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-status-codes.mdx new file mode 100644 index 00000000..b2ce7e9d --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-status-codes.mdx @@ -0,0 +1,304 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# 認証および認可エラーコード + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、認証および認可に関連するエラーコードの一覧を示します。 + +## エラーコードのクラスと説明 + +| クラス | 説明 | +|:-------------|:--------------------------| +| `AUTH-1xxxx` | ユーザーエラーカテゴリのエラー | +| `AUTH-3xxxx` | 内部エラーカテゴリのエラー | + +## `AUTH-1xxxx` ステータスコード + +### `AUTH-10000` + +**メッセージ** + +```markdown +The user already exists. Username: %s +``` + +### `AUTH-10001` + +**メッセージ** + +```markdown +The user does not exist. Username: %s +``` + +### `AUTH-10003` + +**メッセージ** + +```markdown +The namespace does not exist. Namespace: %s +``` + +### `AUTH-10004` + +**メッセージ** + +```markdown +The table does not exist. Table: %s +``` + +### `AUTH-10005` + +**メッセージ** + +```markdown +Invalid username or password +``` + +### `AUTH-10006` + +**メッセージ** + +```markdown +Access denied: Invalid auth token +``` + +### `AUTH-10007` + +**メッセージ** + +```markdown +Access denied: You need the %s privilege for the namespace %s to execute this operation +``` + +### `AUTH-10008` + +**メッセージ** + +```markdown +Access denied: You need the %s privilege for the table %s to execute this operation +``` + +### `AUTH-10009` + +**メッセージ** + +```markdown +Access denied: You must be a superuser to execute this operation +``` + +### `AUTH-10010` + +**メッセージ** + +```markdown +Access denied: You can't access information about the user %s +``` + +### `AUTH-10011` + +**メッセージ** + +```markdown +Access denied: You can't alter the user %s +``` + +### `AUTH-10012` + +**メッセージ** + +```markdown +Access denied: You must be a superuser to change the SUPERUSER attribute +``` + +### `AUTH-10013` + +**メッセージ** + +```markdown +You can't change the SUPERUSER attribute for the current user %s +``` + +### `AUTH-10014` + +**メッセージ** + +```markdown +You can't drop the current user %s +``` + +### `AUTH-10015` + +**メッセージ** + +```markdown +Access denied: You can't grant the %s privilege because you don't have the same privilege for the table %s +``` + +### `AUTH-10016` + +**メッセージ** + +```markdown +Access denied: You can't grant the %s privilege because you don't have the same privilege for the namespace %s +``` + +### `AUTH-10017` + +**メッセージ** + +```markdown +Access denied: You can't revoke the %s privilege because you don't have the same privilege for the table %s +``` + +### `AUTH-10018` + +**メッセージ** + +```markdown +Access denied: You can't revoke the %s privilege because you don't have the same privilege for the namespace %s +``` + +### `AUTH-10019` + +**メッセージ** + +```markdown +The operation does not have the target namespace or table name. Operation: %s +``` + +## `AUTH-3xxxx` ステータスコード + +### `AUTH-30000` + +**メッセージ** + +```markdown +Getting auth token information failed +``` + +### `AUTH-30001` + +**メッセージ** + +```markdown +Getting the user failed. Username: %s +``` + +### `AUTH-30002` + +**メッセージ** + +```markdown +Creating a user failed. Username: %s +``` + +### `AUTH-30003` + +**メッセージ** + +```markdown +Altering the user failed. Username: %s +``` + +### `AUTH-30004` + +**メッセージ** + +```markdown +Dropping the user failed. Username: %s +``` + +### `AUTH-30005` + +**メッセージ** + +```markdown +Granting privileges failed. Username: %s; Namespace: %s; Privileges: %s +``` + +### `AUTH-30006` + +**メッセージ** + +```markdown +Granting privileges failed. Username: %s; Table: %s; Privileges: %s +``` + +### `AUTH-30007` + +**メッセージ** + +```markdown +Revoking privileges failed. Username: %s; Namespace: %s; Privileges: %s +``` + +### `AUTH-30008` + +**メッセージ** + +```markdown +Revoking privileges failed. Username: %s; Table: %s; Privileges: %s +``` + +### `AUTH-30009` + +**メッセージ** + +```markdown +Getting users failed +``` + +### `AUTH-30010` + +**メッセージ** + +```markdown +Getting privileges failed. Username: %s; Namespace: %s +``` + +### `AUTH-30011` + +**メッセージ** + +```markdown +Getting privileges failed. Username: %s; Table: %s +``` + +### `AUTH-30012` + +**メッセージ** + +```markdown +Deleting privileges failed. Namespace: %s +``` + +### `AUTH-30013` + +**メッセージ** + +```markdown +Deleting privileges failed. Table: %s +``` + +### `AUTH-30014` + +**メッセージ** + +```markdown +Logging in failed. Username: %s +``` + +### `AUTH-30015` + +**メッセージ** + +```markdown +Logging out failed +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-with-sql.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-with-sql.mdx new file mode 100644 index 00000000..7cb5a903 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-auth-with-sql.mdx @@ -0,0 +1,184 @@ +--- +tags: + - Enterprise Premium +--- + +# ユーザーの認証と認可 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB Cluster には、ユーザーを認証および認可するメカニズムがあります。 + +このガイドでは、ScalarDB Cluster で認証と認可を使用する方法について説明します。 + +## 概要 + +認証と認可を使用することで、ユーザーを作成し、その権限を付与または取り消すことができます。`CREATE USER` コマンドを使用してユーザーを作成し、`GRANT` コマンドまたは `REVOKE` コマンドを使用して、それぞれテーブルまたは名前空間に対する権限を付与または取り消すことができます。このようなデータ制御言語 (DCL) コマンドの詳細については、[DCL](../scalardb-sql/grammar.mdx#dcl) を参照してください。 + +ユーザーは、必要な権限を持っている場合、ユーザー名とパスワードを使用して ScalarDB Cluster にログインし、SQL ステートメントを実行できます。 + +認証と認可では、次の 2 種類のユーザーがサポートされます。 + +- **スーパーユーザー:** このタイプのユーザーにはすべての権限があります。スーパーユーザーのみが他のユーザーや名前空間を作成または削除できます。 +- **通常のユーザー:** このタイプのユーザーには最初は権限がないため、スーパーユーザーまたは `GRANT` 権限を持つ別のユーザーによって権限を付与する必要があります。 + +認証と認可を使用する場合、次の権限が利用できます。 + +- `SELECT` +- `INSERT` +- `UPDATE` +- `DELETE` +- `CREATE` +- `DROP` +- `TRUNCATE` +- `ALTER` +- `GRANT` + +権限の詳細については、[各タイプの操作に必要な権限](#各タイプの操作に必要な権限)を参照してください。 + +## 構成 + +このセクションでは、認証と認可に使用できる構成について説明します。 + +### ScalarDB Cluster ノードの構成 + +認証と認可を有効にするには、`scalar.db.cluster.auth.enabled` を `true` に設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|----------------------------------|-----------------------------|-----------| +| `scalar.db.cluster.auth.enabled` | 認証と認可が有効かどうか。 | `false` | + +次の構成を設定することもできます。 + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------------------|---------------------------------------------------------------------------------------------------|-----------------| +| `scalar.db.cluster.auth.cache_expiration_time_millis` | 認証および認可情報のキャッシュ有効期限(ミリ秒単位)。 | `60000` (1 分) | +| `scalar.db.cluster.auth.auth_token_expiration_time_minutes` | 認証および認可トークンの有効期限(分単位)。 | `1440` (1 日) | +| `scalar.db.cluster.auth.auth_token_gc_thread_interval_minutes` | 認証および認可トークンのガベージコレクション (GC) スレッド間隔 (分単位)。 | 360(6 時間) | +| `scalar.db.cluster.auth.pepper` | ハッシュ化の前にパスワードに追加されるシークレットの値。指定しない場合、パスワードはペッパーなしでハッシュ化されます。 | | + +:::note + +認証と認可を有効にする場合は、認証と認可によって内部的にパーティション間スキャンが実行されるため、システム名前空間 (デフォルトでは `scalardb`) の `scalar.db.cross_partition_scan.enabled` を `true` に設定する必要もあります。 + +::: + +### ScalarDB Cluster Java Client SDK 構成 + +クライアント側で認証と認可を有効にするには、`scalar.db.cluster.auth.enabled` を `true` に設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|----------------------------------|------------------------|----------| +| `scalar.db.cluster.auth.enabled` | 認証と認可が有効かどうか。 | `false` | + +[ScalarDB Cluster SQL クライアント構成](developer-guide-for-scalardb-cluster-with-java-api.mdx#scalardb-cluster-sql-クライアント構成) セクションの構成に加えて、クライアントのユーザー名とパスワードを指定するために `scalar.db.sql.cluster_mode.username` と `scalar.db.sql.cluster_mode.password` も設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|---------------------------------------|-----------------------------|---------| +| `scalar.db.sql.cluster_mode.username` | クライアントのユーザー名。 | | +| `scalar.db.sql.cluster_mode.password` | クライアントのパスワード。 | | + +## 初期ユーザー + +認証と認可を有効にすると、初期ユーザー `admin` が作成され、そのユーザーの初期パスワードは `admin` になります。このユーザーはスーパーユーザーであり、すべての権限を持ちます。このユーザーでログインし、必要に応じて他のユーザーを作成できます。 + +:::warning + +セキュリティ上の理由から、特に実稼働環境にデプロイする前に、初期ユーザーのパスワードを必ず変更してください。 + +::: + +## 各タイプの操作に必要な権限 + +次の表は、各タイプの操作に必要な権限を示しています。 + +### DDL + +| コマンド | スーパーユーザーが必要です | 必要な権限 | +|-------------------------------|-----------------------|---------------------| +| `CREATE NAMESPACE` | `true` | | +| `DROP NAMESPACE` | `true` | | +| `CREATE TABLE` | | `CREATE` | +| `DROP TABLE` | | `DROP` | +| `CREATE INDEX` | | `CREATE` | +| `DROP INDEX` | | `DROP` | +| `TRUNCATE TABLE` | | `TRUNCATE` | +| `ALTER TABLE` | | `ALTER` | +| `CREATE COORDINATOR TABLES` | `true` | | +| `DROP COORDINATOR TABLES` | `true` | | +| `TRUNCATE COORDINATOR TABLES` | `true` | | + +### DML + +| コマンド | スーパーユーザーが必要です | 必要な権限 | +|------------------|------------------------|----------------------| +| `SELECT` | | `SELECT` | +| `INSERT` | | `INSERT` | +| `UPSERT` | | `INSERT` | +| `UPDATE` | | `SELECT` と `UPDATE` | +| `DELETE` | | `SELECT` と `DELETE` | + +### DCL + +| コマンド | スーパーユーザーが必要です | 必要な権限 | +|---------------|---------------------------------------------|-------------------------------------------------------------| +| `CREATE USER` | `true` | | +| `ALTER USER` | `true` (ユーザーは自分のパスワードを変更できます。) | | +| `DROP USER` | `true` | | +| `GRANT` | | `GRANT` (ユーザーは自分が持っている権限のみを付与できます。) | +| `REVOKE` | | `GRANT` (ユーザーは自分が持っている権限のみを取り消すことができます。) | + +## ワイヤ暗号化 + +ScalarDB Cluster は、トランスポート層セキュリティ (TLS) を使用したワイヤ暗号化もサポートしています。認証と認可を有効にする場合は、ユーザー資格情報を保護するために、運用環境でワイヤ暗号化を有効にすることを強くお勧めします。 + +このワイヤ暗号化機能では、次のものが暗号化されます: + +* ScalarDB Cluster ノードとクライアント間の通信。 +* すべての ScalarDB Cluster ノード間の通信 (クラスターの内部通信)。 + +この機能では、gRPC の TLS サポートが使用されます。詳細については、公式の gRPC [セキュリティポリシー](https://github.com/grpc/grpc-java/blob/master/SECURITY.md) を参照してください。 + +### 構成 + +このセクションでは、ワイヤ暗号化に使用できる構成について説明します。 + +#### ScalarDB Cluster ノードの構成 + +ワイヤ暗号化を有効にするには、`scalar.db.cluster.tls.enabled` を `true` に設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|---------------------------------|--------------------------------|-----------| +| `scalar.db.cluster.tls.enabled` | ワイヤ暗号化 (TLS) が有効かどうか。 | `false` | + +次の構成も設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------| +| `scalar.db.cluster.tls.ca_root_cert_pem` | TLS 通信用のカスタム CA ルート証明書 (PEM データ)。 | | +| `scalar.db.cluster.tls.ca_root_cert_path` | TLS 通信用のカスタム CA ルート証明書 (ファイルパス)。 | | +| `scalar.db.cluster.tls.override_authority` | TLS 通信のカスタム権限。これは、実際に接続されているホストを変更するものではありません。これはテスト用ですが、DNS オーバーライドの代替としてテスト以外でも安全に使用できます。たとえば、`scalar.db.cluster.node.tls.cert_chain_path` に設定した証明書チェーンファイルで提示されるホスト名を指定できます。 | | +| `scalar.db.cluster.node.tls.cert_chain_path` | TLS 通信に使用される証明書チェーンファイル。 | | +| `scalar.db.cluster.node.tls.private_key_path` | TLS 通信に使用されるシークレット鍵ファイル。 | | + +証明機関 (CA) ルート証明書を指定するには、`scalar.db.cluster.tls.ca_root_cert_pem` または `scalar.db.cluster.tls.ca_root_cert_path` のいずれかを設定する必要があります。両方を設定すると、`scalar.db.cluster.tls.ca_root_cert_pem` が使用されます。 + +#### ScalarDB Cluster Java Client SDK 構成 + +クライアント側でワイヤ暗号化を有効にするには、`scalar.db.cluster.tls.enabled` を `true` に設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|---------------------------------|--------------------------------|----------| +| `scalar.db.cluster.tls.enabled` | ワイヤ暗号化 (TLS) が有効かどうか。 | `false` | + +次の構成も設定する必要があります。 + +| 名前 | 説明 | デフォルト | +|--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------| +| `scalar.db.cluster.tls.ca_root_cert_pem` | TLS 通信用のカスタム CA ルート証明書 (PEM データ)。 | | +| `scalar.db.cluster.tls.ca_root_cert_path` | TLS 通信用のカスタム CA ルート証明書 (ファイルパス)。 | | +| `scalar.db.cluster.tls.override_authority` | TLS 通信のカスタム権限。これは、実際に接続されているホストを変更するものではありません。これはテスト用ですが、DNS オーバーライドの代替としてテスト以外でも安全に使用できます。たとえば、`scalar.db.cluster.node.tls.cert_chain_path` に設定した証明書チェーンファイルで提示されるホスト名を指定できます。 | | + +CA ルート証明書を指定するには、`scalar.db.cluster.tls.ca_root_cert_pem` または `scalar.db.cluster.tls.ca_root_cert_path` のいずれかを設定する必要があります。両方を設定すると、`scalar.db.cluster.tls.ca_root_cert_pem` が使用されます。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-configurations.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-configurations.mdx new file mode 100644 index 00000000..404a818f --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-configurations.mdx @@ -0,0 +1,242 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster の構成 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + + +このドキュメントでは、ScalarDB Cluster の構成について説明します。ScalarDB Cluster は複数のクラスターノードで構成されており、各クラスターノードを構成する必要があります。 + +## 基本構成 + +クラスターノードの基本構成は次のとおりです。 + +| 名前 | 説明 | デフォルト | +|-------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------| +| `scalar.db.cluster.membership.type` | メンバーシップの種類。現在、`KUBERNETES` のみ指定できます。 | `KUBERNETES` | +| `scalar.db.cluster.membership.kubernetes.endpoint.namespace_name` | この構成は、`KUBERNETES` メンバーシップタイプ用です。[endpoint resource](https://kubernetes.io/docs/concepts/services-networking/service/#endpoints) の名前空間名。 | `default` | +| `scalar.db.cluster.membership.kubernetes.endpoint.name` | この構成は、`KUBERNETES` メンバーシップタイプ用です。メンバーシップ情報を取得するための [endpoint resource](https://kubernetes.io/docs/concepts/services-networking/service/#endpoints) の名前。 | | +| `scalar.db.cluster.node.decommissioning_duration_secs` | 廃止期間(秒単位)。 | `30` | +| `scalar.db.cluster.node.grpc.max_inbound_message_size` | 受信可能な最大メッセージサイズ。 | gRPCのデフォルト値 | +| `scalar.db.cluster.node.grpc.max_inbound_metadata_size` | 受信できるメタデータの最大サイズ。 | gRPCのデフォルト値 | +| `scalar.db.cluster.node.port` | ScalarDB Cluster ノードのポート番号。 | `60053` | +| `scalar.db.cluster.node.prometheus_exporter_port` | Prometheus エクスポーターのポート番号。 | `9080` | +| `scalar.db.cluster.grpc.deadline_duration_millis` | gRPC の期限期間(ミリ秒単位)。 | `60000` (60 秒) | +| `scalar.db.cluster.node.standalone_mode.enabled` | スタンドアロンモードが有効かどうか。スタンドアロンモードが有効になっている場合、メンバーシップ構成 (`scalar.db.cluster.membership.*`) は無視されることに注意してください。 | `false` | +| `scalar.db.metadata.cache_expiration_time_secs` | ScalarDB には、データベースへのリクエスト数を減らすためのメタデータキャッシュがあります。この設定では、キャッシュの有効期限を秒単位で指定します。 | `-1` (有効期限なし) | +| `scalar.db.active_transaction_management.expiration_time_millis` | ScalarDB Cluster ノードは進行中のトランザクションを維持し、トランザクション ID を使用して再開できます。この構成では、このトランザクション管理機能の有効期限をミリ秒単位で指定します。 | `60000` (60 秒) | +| `scalar.db.system_namespace_name` | 指定された名前空間名は ScalarDB によって内部的に使用されます。 | `scalardb` | + +## トランザクションマネージャーの構成 + +このセクションでは、トランザクションマネージャーの構成について説明します。ScalarDB は、コンセンサスコミットを使用してトランザクションを実行する方法と、非トランザクションストレージ操作を実行する方法を提供します。 + +### コンセンサスコミットを使用してトランザクションを実行する + +ScalarDB は、コンセンサスコミットと呼ばれる独自のトランザクションプロトコルを提供します。これは、ScalarDB のデフォルトのトランザクションマネージャータイプです。コンセンサスコミットトランザクションマネージャーを使用するには、ScalarDB プロパティファイルに次の内容を追加します。 + +```properties +scalar.db.transaction_manager=consensus-commit +``` + +:::note + +`scalar.db.transaction_manager` プロパティを指定しない場合は、`consensus-commit` がデフォルト値になります。 + +::: + +#### 基本設定 + +コンセンサスコミットトランザクションマネージャーでは、次の基本設定が利用可能です。 + +| 名前 | 説明 | デフォルト | +|-------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `scalar.db.transaction_manager` | `consensus-commit` を指定する必要があります。 | - | +| `scalar.db.consensus_commit.isolation_level` | コンセンサスコミットに使用される分離レベル。`SNAPSHOT` または `SERIALIZABLE` のいずれかを指定できます。 | `SNAPSHOT` | +| `scalar.db.consensus_commit.serializable_strategy` | コンセンサスコミットに使用されるシリアル化可能な戦略。`EXTRA_READ` または `EXTRA_WRITE` のいずれかを指定できます。`scalar.db.consensus_commit.isolation_level` プロパティで `SNAPSHOT` が指定されている場合、この構成は無視されます。 | `EXTRA_READ` | +| `scalar.db.consensus_commit.coordinator.namespace` | コーディネーターテーブルの名前空間名。 | `coordinator` | +| `scalar.db.consensus_commit.include_metadata.enabled` | `true` に設定すると、`Get` および `Scan` 操作の結果にトランザクションメタデータが含まれます。特定のテーブルのトランザクションメタデータ列の詳細を表示するには、`DistributedTransactionAdmin.getTableMetadata()` メソッドを使用します。このメソッドは、トランザクションメタデータ列が追加されたテーブルメタデータを返します。この構成を使用すると、トランザクション関連の問題を調査するのに役立ちます。 | `false` | + +#### パフォーマンス関連の構成 + +コンセンサスコミットトランザクションマネージャーでは、次のパフォーマンス関連の構成が利用できます。 + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------| +| `scalar.db.consensus_commit.parallel_executor_count` | 並列実行のためのエグゼキュータ(スレッド)の数。 | `128` | +| `scalar.db.consensus_commit.parallel_preparation.enabled` | 準備フェーズが並行して実行されるかどうか。 | `true` | +| `scalar.db.consensus_commit.parallel_validation.enabled` | 検証フェーズ (`EXTRA_READ` 内) が並列で実行されるかどうか。 | `scalar.db.consensus_commit.parallel_commit.enabled` の値 | +| `scalar.db.consensus_commit.parallel_commit.enabled` | コミットフェーズが並列で実行されるかどうか。 | `true` | +| `scalar.db.consensus_commit.parallel_rollback.enabled` | ロールバックフェーズが並列で実行されるかどうか。 | `scalar.db.consensus_commit.parallel_commit.enabled` の値 | +| `scalar.db.consensus_commit.async_commit.enabled` | コミットフェーズが非同期で実行されるかどうか。 | `false` | +| `scalar.db.consensus_commit.async_rollback.enabled` | ロールバックフェーズが非同期に実行されるかどうか。 | `scalar.db.consensus_commit.async_commit.enabled` の値 | +| `scalar.db.consensus_commit.parallel_implicit_pre_read.enabled` | 暗黙的な事前読み取りが並列で実行されるかどうか。 | `true` | +| `scalar.db.consensus_commit.coordinator.group_commit.enabled` | トランザクション状態のコミットがバッチモードで実行されるかどうか。この機能は、2 フェーズコミットインターフェイスでは使用できません。 | `false` | +| `scalar.db.consensus_commit.coordinator.group_commit.slot_capacity` | グループコミット機能のグループ内のスロットの最大数。値が大きいとグループコミットの効率は向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1] | `20` | +| `scalar.db.consensus_commit.coordinator.group_commit.group_size_fix_timeout_millis` | グループ内のスロットのサイズを固定するためのタイムアウト。値が大きいとグループコミットの効率が向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1] | `40` | +| `scalar.db.consensus_commit.coordinator.group_commit.delayed_slot_move_timeout_millis` | 遅延スロットをグループから別の分離グループに移動して、元のグループが遅延トランザクションの影響を受けないようにするためのタイムアウト。値が大きいとグループコミットの効率が向上しますが、待ち時間が増加し、トランザクションの競合が発生する可能性も高くなります。[^1] | `1200` | +| `scalar.db.consensus_commit.coordinator.group_commit.old_group_abort_timeout_millis` | 進行中の古いグループをアボートするためのタイムアウト。値が小さいと、積極的なアボートによってリソースの消費量が減りますが、長時間実行されるトランザクションで不要なアボートが発生する可能性も高くなります。 | `60000` | +| `scalar.db.consensus_commit.coordinator.group_commit.timeout_check_interval_millis` | グループコミット関連のタイムアウトをチェックする間隔。 | `20` | +| `scalar.db.consensus_commit.coordinator.group_commit.metrics_monitor_log_enabled` | グループコミットのメトリックが定期的にログに記録されるかどうか。 | `false` | + +#### 基盤となるストレージまたはデータベースの構成 + +Consensus Commit にはストレージ抽象化レイヤーがあり、複数の基盤となるストレージをサポートしています。`scalar.db.storage` プロパティを使用してストレージ実装を指定できます。 + +データベースを選択して、各ストレージで使用可能な構成を確認します。 + + + + JDBC データベースでは次の構成を使用できます。 + + | 名前 | 説明 | デフォルト | + |-----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------| + | `scalar.db.storage` | `jdbc` を指定する必要があります。 | - | + | `scalar.db.contact_points` | JDBC 接続 URL。 | | + | `scalar.db.username` | データベースにアクセスするためのユーザー名。 | | + | `scalar.db.password` | データベースにアクセスするためのパスワード。 | | + | `scalar.db.jdbc.connection_pool.min_idle` | 接続プール内のアイドル接続の最小数。 | `20` | + | `scalar.db.jdbc.connection_pool.max_idle` | 接続プール内でアイドル状態のままにできる接続の最大数。 | `50` | + | `scalar.db.jdbc.connection_pool.max_total` | 接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。 | `100` | + | `scalar.db.jdbc.prepared_statements_pool.enabled` | このプロパティを `true` に設定すると、準備されたステートメントのプールが有効になります。 | `false` | + | `scalar.db.jdbc.prepared_statements_pool.max_open` | ステートメントプールから同時に割り当てることができるオープンステートメントの最大数。制限がない場合は負の値を使用します。 | `-1` | + | `scalar.db.jdbc.isolation_level` | JDBC の分離レベル。`READ_UNCOMMITTED`、`READ_COMMITTED`、`REPEATABLE_READ`、または `SERIALIZABLE` を指定できます。 | 基盤データベース固有 | + | `scalar.db.jdbc.table_metadata.connection_pool.min_idle` | テーブルメタデータの接続プール内のアイドル接続の最小数。 | `5` | + | `scalar.db.jdbc.table_metadata.connection_pool.max_idle` | テーブルメタデータの接続プール内でアイドル状態のままにできる接続の最大数。 | `10` | + | `scalar.db.jdbc.table_metadata.connection_pool.max_total` | テーブルメタデータの接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。 | `25` | + | `scalar.db.jdbc.admin.connection_pool.min_idle` | 管理者の接続プール内のアイドル接続の最小数。 | `5` | + | `scalar.db.jdbc.admin.connection_pool.max_idle` | 管理者の接続プール内でアイドル状態のままにできる接続の最大数。 | `10` | + | `scalar.db.jdbc.admin.connection_pool.max_total` | 管理者の接続プールで同時にアクティブにできるアイドル接続と借用接続の最大合計数。制限がない場合は負の値を使用します。 | `25` | + +:::note + +SQLite3 を JDBC データベースとして使用している場合は、`scalar.db.contact_points` を次のように設定する必要があります。 + +```properties +scalar.db.contact_points=jdbc:sqlite:?busy_timeout=10000 +``` + +他の JDBC データベースとは異なり、[SQLite3 doesn't fully support concurrent access](https://www.sqlite.org/lang_transaction.html)。[`SQLITE_BUSY`](https://www.sqlite.org/rescode.html#busy) によって内部的に頻繁に発生するエラーを回避するには、[`busy_timeout`](https://www.sqlite.org/c3ref/busy_timeout.html) パラメータを設定することをお勧めします。 + +::: + + +DynamoDB では次の構成が利用可能です。 + + | 名前 | 説明 | デフォルト | + |---------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------| + | `scalar.db.storage` | `dynamo` を指定する必要があります。 | - | + | `scalar.db.contact_points` | ScalarDB が通信する AWS リージョン (例: `us-east-1`)。 | | + | `scalar.db.username` | AWS とやり取りするユーザーを識別するために使用される AWS アクセスキー。 | | + | `scalar.db.password` | AWS と対話するユーザーを認証するために使用される AWS シークレットアクセスキー。 | | + | `scalar.db.dynamo.endpoint_override` | ScalarDB が通信する Amazon DynamoDB エンドポイント。これは主に、AWS サービスではなくローカルインスタンスでのテストに使用されます。 | | + | `scalar.db.dynamo.namespace.prefix` | ユーザー名前空間とメタデータ名前空間名のプレフィックス。AWS では単一の AWS リージョン内で一意のテーブル名を持つ必要があるため、単一の AWS リージョン内で複数の ScalarDB 環境 (開発、本番など) を使用する場合に便利です。 | | + + + CosmosDB for NoSQL では次の構成が利用可能です。 + + | 名前 | 説明 | デフォルト | + |--------------------------------------|----------------------------------------------------------------------------------------------------------|----------| + | `scalar.db.storage` | `cosmos` を指定する必要があります。 | - | + | `scalar.db.contact_points` | ScalarDB が通信する NoSQL エンドポイント用の Azure Cosmos DB。 | | + | `scalar.db.password` | Azure Cosmos DB for NoSQL にアクセスするための認証を実行するために使用されるマスターキーまたは読み取り専用キーのいずれか。 | | + | `scalar.db.cosmos.consistency_level` | Cosmos DB 操作に使用される一貫性レベル。`STRONG` または `BOUNDED_STALENESS` を指定できます。 | `STRONG` | + + + Cassandra では次の構成が利用可能です。 + + | 名前 | 説明 | デフォルト | + |-----------------------------------------|-----------------------------------------------------------------------|------------| + | `scalar.db.storage` | `cassandra` を指定する必要があります。 | - | + | `scalar.db.contact_points` | カンマで区切られた連絡先。 | | + | `scalar.db.contact_port` | すべての連絡先ポイントのポート番号。 | | + | `scalar.db.username` | データベースにアクセスするためのユーザー名。 | | + | `scalar.db.password` | データベースにアクセスするためのパスワード。 | | + + + +##### マルチストレージのサポート + +ScalarDB は、複数のストレージ実装を同時に使用することをサポートしています。`scalar.db.storage` プロパティの値として `multi-storage` を指定すると、複数のストレージを使用できます。 + +複数のストレージの使用の詳細については、[マルチストレージトランザクション](../multi-storage-transactions.mdx)を参照してください。 + +##### パーティション間スキャン構成 + +以下で説明するようにパーティション間スキャンオプションを有効にすると、`Scan` 操作でパーティション全体のすべてのレコードを取得できます。さらに、`cross_partition_scan.filtering` と `cross_partition_scan.ordering` をそれぞれ有効にすることで、パーティション間 `Scan` 操作で任意の条件と順序を指定できます。現在、順序付けオプション付きのパーティション間スキャンは、JDBC データベースでのみ使用できます。フィルタリングと順序付けを有効にするには、`scalar.db.cross_partition_scan.enabled` を `true` に設定する必要があります。 + +パーティション間スキャンの使用方法の詳細については、[スキャン操作](../api-guide.mdx#スキャン操作)を参照してください。 + +:::warning + +非 JDBC データベースの場合、トランザクションはより低い分離レベル (つまり、`SNAPSHOT`) で実行される可能性があるため、`SERIALIAZABLE` 分離レベルでパーティション間スキャンを有効にすることはお勧めしません。非 JDBC データベースを使用する場合は、トランザクションの一貫性が重要でない場合にのみ、自己責任でパーティション間スキャンを使用してください。 + +::: + +| 名前 | 説明 | デフォルト | +|----------------------------------------------------|-----------------------------------------------|---------| +| `scalar.db.cross_partition_scan.enabled` | パーティション間スキャンを有効にします。 | `false` | +| `scalar.db.cross_partition_scan.filtering.enabled` | パーティション間スキャンでフィルタリングを有効にします。 | `false` | +| `scalar.db.cross_partition_scan.ordering.enabled` | パーティション間スキャンで順序付けを有効にします。 | `false` | + +### 非トランザクションストレージ操作を実行する + +非トランザクションストレージ操作を実行するには、`scalar.db.transaction_manager` プロパティを `single-crud-operation` に設定する必要があります。 + +```properties +scalar.db.transaction_manager=single-crud-operation +``` + +また、[基盤となるストレージまたはデータベースの構成](#基盤となるストレージまたはデータベースの構成)の説明に従って、基盤となるストレージまたはデータベースを構成する必要があります。 + +## ScalarDB Cluster GraphQL 構成 + +ScalarDB Cluster GraphQL の構成は次のとおりです。 + +| 名前 | 説明 | デフォルト | +|-----------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------| +| `scalar.db.graphql.enabled` | ScalarDB Cluster GraphQL が有効かどうか。 | `false` | +| `scalar.db.graphql.port` | GraphQL サーバーのポート番号。 | `8080` | +| `scalar.db.graphql.path` | GraphQL エンドポイントの URL のパスコンポーネント。 | `/graphql` | +| `scalar.db.graphql.namespaces` | GraphQL サーバーがスキーマを生成するテーブルの名前空間のコンマ区切りリスト。指定しない場合、GraphQL サーバーは、すべての ScalarDB 管理名前空間内のすべてのテーブルのスキーマを生成します。 | | +| `scalar.db.graphql.graphiql` | GraphQL サーバーが [GraphiQL](https://github.com/graphql/graphiql) IDE を提供するかどうか。 | `true` | +| `scalar.db.graphql.schema_checking_interval_millis` | ScalarDB スキーマに変更が検出された場合に GraphQL サーバーが GraphQL スキーマを再構築する間隔 (ミリ秒単位)。 | `30000` (30 秒) | + +### サーバーの実行中に ScalarDB スキーマを作成または変更する + +GraphQL スキーマはサーバーの起動時に静的に構築されるため、ScalarDB スキーマが変更された場合 (たとえば、テーブルが追加、変更、または削除された場合)、対応する GraphQL スキーマは再構築されない限り変更を反映しません。これに対処するために、GraphQL サーバーは、定期的なチェックとオンデマンドチェックの 2 つのメカニズムを提供します。 + +#### 定期的なチェックを実行する + +サーバーは、ScalarDB スキーマに変更が発生したかどうかを定期的にチェックし、必要に応じて対応する GraphQL スキーマを再構築します。デフォルトでは、チェックは 30 秒ごとに行われますが、間隔は `scalar.db.graphql.schema_checking_interval_millis` プロパティを使用して構成できます。 + +定期的なチェックを実行する必要がない場合は、プロパティ値を `-1` に設定して無効にすることができます。 + +#### オンデマンドチェックを実行する + +また、HTTP API の `/update-graphql-schema` エンドポイントに POST リクエストを実行して、サーバーに ScalarDB スキーマの変更をチェックし、必要に応じて対応する GraphQL スキーマを再構築するように要求することもできます。 + +たとえば、HTTP API が `localhost:8080` で実行されていて、`scalar.db.graphql.path` プロパティが `/graphql` に設定されている場合、次のコマンドを実行してこのエンドポイントを呼び出すことができます。 + +```console +curl -X POST http://localhost:8080/graphql/update-graphql-schema +``` + +## ScalarDB Cluster SQL 構成 + +ScalarDB Cluster SQL の構成は次のとおりです。 + +| 名前 | 説明 | デフォルト | +|------------------------------------------|----------------------------------------------------------------------------------------------------------|---------------| +| `scalar.db.sql.enabled` | ScalarDB Cluster SQL が有効かどうか。 | `false` | +| `scalar.db.sql.statement_cache.enabled` | ステートメントキャッシュを有効にします。 | `false` | +| `scalar.db.sql.statement_cache.size` | キャッシュされたステートメントの最大数。 | `100` | +| `scalar.db.sql.default_transaction_mode` | デフォルトのトランザクションモード。`TRANSACTION` または `TWO_PHASE_COMMIT_TRANSACTION` を設定できます。 | `TRANSACTION` | +| `scalar.db.sql.default_namespace_name` | デフォルトの名前空間名。SQL ステートメントで名前空間名を指定しない場合は、この値が使用されます。 | | diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-grpc-api-guide.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-grpc-api-guide.mdx new file mode 100644 index 00000000..0c225b81 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-grpc-api-guide.mdx @@ -0,0 +1,211 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster gRPC API ガイド + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; + + + +このドキュメントでは、ScalarDB Cluster gRPC API について説明します。 + + + +ScalarDB Cluster は、内部で gRPC API を使用する Java API を提供します。 + +Java または JVM 言語を使用する場合は、ScalarDB Cluster gRPC API を直接使用する代わりに、Java API を使用できます。 + +Java API の詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx)を参照してください。 + +ScalarDB Cluster gRPC API のサービスとメッセージの詳細については、`scalardb-cluster.proto` ファイルの定義を参照してください。商用ライセンスを持つ ScalarDB Cluster ユーザーで、`scalardb-cluster.proto` ファイルが必要な場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +ScalarDB Cluster gRPC API は、次のサービスで構成されています。 + +- `scalardb.cluster.rpc.v1.DistributedTransaction`: ScalarDB Cluster に分散トランザクション機能を提供します。 +- `scalardb.cluster.rpc.v1.TwoPhaseCommitTransaction`: ScalarDB Cluster に 2 フェーズコミットトランザクション機能を提供します。 +- `scalardb.cluster.rpc.v1.DistributedTransactionAdmin`: 包括的な管理操作を提供します。 + +次のセクションでは、各サービスの使用方法について説明します。 + +## ScalarDB Cluster gRPC API でのエラー処理の概要 + +各サービスの使用方法を説明する前に、このセクションでは ScalarDB Cluster gRPC API でのエラー処理の仕組みについて説明します。 + +ScalarDB Cluster gRPC API は、エラー処理に [Richer error model](https://grpc.io/docs/guides/error/#richer-error-model) を採用しています。このモデルにより、サーバーは 1 つ以上の protobuf メッセージとして表現される追加のエラー詳細を返すことができ、クライアントはそれを利用できるようになります。ScalarDB Cluster gRPC API は、[standard set of error message types](https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto) の 1 つである `google.rpc.ErrorInfo` を使用し、追加のエラー詳細を `ErrorInfo` フィールドに格納します。 + +`ErrorInfo` には次のフィールドがあります: + +- `reason`: エラーの簡単な説明を提供する文字列。次のセクションでは、各サービスにおける `reason` の可能な値について説明します。 +- `domain`: エラーの原因を示す文字列。ScalarDB Cluster gRPC API では、この文字列は常に `com.scalar.db.cluster` に設定されます。 +- `metadata`: 特定のエラーのメタデータのマップ。ScalarDB Cluster gRPC API では、エラーがトランザクションに関連している場合、マップに `transactionId` キーを持つトランザクション ID が配置されます。 + +エラーが発生した場合は、gRPC レスポンスの `google.rpc.Status` から `ErrorInfo` を取得できますが、取得方法はプログラミング言語によって異なります。 + +特定のプログラミング言語で `ErrorInfo` を取得する方法については、適切なドキュメントを参照してください。 + +## `DistributedTransaction` サービスの使用方法 + +`DistributedTransaction` サービスは次の RPC を提供します: + +- `Begin`: トランザクションを開始します。 +- `Get`: レコードを取得します。 +- `Scan`: レコードをスキャンします。 +- `Put`: レコードを配置します。 +- `Delete`: レコードを削除します。 +- `Mutate` 複数のレコードを変更 (配置および削除) します。 +- `Commit`: トランザクションをコミットします。 +- `Rollback`: トランザクションをロールバックします。 + +まず、`Begin` を呼び出してトランザクションを開始します。 + +次に、`Get` と `Scan` を呼び出してレコードを読み取り、`Put` と `Mutate` を呼び出してレコードを書き込み、`Delete` と `Mutate` を呼び出してレコードを削除します。 + +トランザクションを終了するには、`Commit` を呼び出します。あるいは、トランザクションがコミットされる前にいつでも `Rollback` を呼び出してキャンセルできます。`Begin` を呼び出すと、応答でトランザクション ID を受け取ります。これを使用して、`Get`、`Scan`、`Put`、`Delete`、`Mutate`、`Commit`、および `Rollback` を呼び出すことができます。 + +`Begin` を呼び出すときに、オプションでトランザクション ID を指定できます。トランザクション ID を指定する場合、ユーザーは ID の一意性を保証する責任があります。トランザクション ID を指定しない場合は、ScalarDB Cluster がトランザクションのトランザクション ID を生成します。 + +RPC リクエストごとに `RequestHeader` を設定する必要があります。`RequestHeader` には、リクエストのホップ数を制限している `hop_limit` フィールドが含まれています。`hop_limit` の目的は、クラスター内での無限ループを防ぐことです。リクエストが別のクラスターノードに転送されるたびに、`hop_limit` は 1 つ減少します。`hop_limit` が 0 に達すると、リクエストは拒否されます。 + +### エラー処理 + +以下の表は、`DistributedTransaction` サービスの各 RPC におけるステータスコードと `ErrorInfo` の `reason` の可能な値を示しています。 + +| RPC | ステータスコード | `ErrorInfo` の `reason` | 説明 | +|--------------------------------|---------------------|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Begin | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Begin | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Begin | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Begin | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Get, Scan, Put, Delete, Mutate | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Get, Scan, Put, Delete, Mutate | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Get, Scan, Put, Delete, Mutate | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合は、トランザクションを最初から再試行してください。 | +| Get, Scan, Put, Delete, Mutate | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Get, Scan, Put, Delete, Mutate | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Get, Scan, Put, Delete, Mutate | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Put, Delete, Mutate | FAILED_PRECONDITION | UNSATISFIED_CONDITION | 突然変異条件が満たされていません。 | +| Commit | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Commit | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Commit | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合は、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Commit | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | UNKNOWN_TRANSACTION_STATUS | トランザクションのステータスは不明です (トランザクションが正常にコミットされたかどうかは不明です)。この状況では、トランザクションが正常にコミットされたかどうかを確認し、そうでない場合は再試行する必要があります。トランザクションステータスを判別する責任はユーザーにあります。トランザクションステータステーブルを作成し、他のアプリケーションデータと連動して更新すると、テーブル自体からトランザクションのステータスを判別できるため、便利です。 | +| Commit | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Rollback | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Rollback | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Rollback | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | + +エラーが発生した場合は、`Begin` の場合を除き、トランザクションをロールバックする必要があります。その後、再試行によって解決できるエラーについては、トランザクションを最初から再試行できます。 + +上記のエラーの他に、gRPC ライブラリによって返されるエラーが発生する場合があります。これらの場合、応答には `ErrorInfo` は含まれません。詳細については、[gRPC ドキュメント](https://grpc.io/docs/guides/error/#error-status-codes)を参照してください。 + +gRPC では、RPC ごとに期限を設定できます。期限を超えると、`DEADLINE_EXCEEDED` エラーが表示されます。一般に、RPC が `Begin` または `Commit` でない限り、この状況ではトランザクションをロールバックする必要があります。`Commit` の場合は `UNKNOWN_TRANSACTION_STATUS` (トランザクションが正常にコミットされたかどうか不明) と同等の状況となり、同様にエラーを処理する必要があります。 + +## `TwoPhaseCommitTransaction` サービスの使用方法 + +`TwoPhaseCommitTransaction` サービスは次の RPC を提供します: + +- `Begin`: トランザクションを開始します。 +- `Join`: トランザクションに参加します。 +- `Get`: レコードを取得します。 +- `Scan`: レコードをスキャンします。 +- `Put`: レコードを配置します。 +- `Delete`: レコードを削除します。 +- `Mutate`: 複数のレコードを変更 (配置および削除) します。 +- `Prepare`: トランザクションを準備します。 +- `Validate`: トランザクションを検証します。 +- `Commit`: トランザクションをコミットします。 +- `Rollback`: トランザクションをロールバックします。 + +まず、コーディネータープロセスの場合は、`Begin` を呼び出してトランザクションを開始します。あるいは、参加プロセスの場合は、`Join` を呼び出して、コーディネーターがすでに開始しているトランザクションに参加できます。次に、`Get` と `Scan` を呼び出してレコードを読み取り、`Put` と `Mutate` を呼び出してレコードを書き込み、`Delete` と `Mutate` を呼び出してレコードを削除できます。トランザクションを確定するには、`Prepare`、`Validate`、`Commit` の順に呼び出します。または、トランザクションがコミットされる前であればいつでも `Rollback` を呼び出してトランザクションをキャンセルできます。`Begin` または `Join` を呼び出すと、応答でトランザクション ID が返されます。これを使用して、`Get`、`Scan`、`Put`、`Delete`、`Mutate`、`Prepare`、`Validate`、`Commit`、`Rollback` を呼び出すことができます。 + +`Begin` を呼び出すときに、オプションでトランザクション ID を指定できます。トランザクション ID を指定する場合、ID の一意性を保証するのはユーザーの責任です。トランザクション ID を指定しない場合、ScalarDB Cluster はトランザクションのトランザクション ID を生成します。 + +RPC リクエストごとに `RequestHeader` を設定する必要があります。`RequestHeader` には、リクエストのホップ数を制限している `hop_limit` フィールドが含まれています。`hop_limit` の目的は、クラスター内での無限ループを防ぐことです。リクエストが別のクラスターノードに転送されるたびに、`hop_limit` は 1 つ減ります。`hop_limit` が 0 に達すると、リクエストは拒否されます。 + +### エラー処理 + +次の表は、`TwoPhaseCommitTransaction` サービスの各 RPC のステータスコードと `ErrorInfo` の `reason` の可能な値を示しています。 + +| RPC | ステータスコード | `ErrorInfo` の `reason` | 説明 | +|--------------------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Begin, Join | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Begin, Join | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Begin, Join | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Begin, Join | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Get, Scan, Put, Delete, Mutate | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Get, Scan, Put, Delete, Mutate | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Get, Scan, Put, Delete, Mutate | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。これは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合は、トランザクションを最初から再試行してください。 | +| Get, Scan, Put, Delete, Mutate | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Get, Scan, Put, Delete, Mutate | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Get, Scan, Put, Delete, Mutate | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Put, Delete, Mutate | FAILED_PRECONDITION | UNSATISFIED_CONDITION | 突然変異条件が満たされていません。 | +| Prepare, Validate | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Prepare, Validate | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Prepare, Validate | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合は、トランザクションを最初から再試行してください。 | +| Prepare, Validate | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Prepare, Validate | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Prepare, Validate | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Commit | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Commit | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Commit | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合は、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Commit | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | UNKNOWN_TRANSACTION_STATUS | トランザクションのステータスは不明です (トランザクションが正常にコミットされたかどうかは不明です)。この状況では、トランザクションが正常にコミットされたかどうかを確認し、そうでない場合は再試行する必要があります。トランザクションステータスを判別する責任はユーザーにあります。トランザクションステータステーブルを作成し、他のアプリケーションデータと連動して更新すると、テーブル自体からトランザクションのステータスを判別できるため、便利です。 | +| Commit | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Rollback | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Rollback | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Rollback | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | + +エラーが発生した場合は、`Begin` または `Join` の場合を除き、トランザクションをロールバックする必要があります。その後、再試行によって解決できるエラーについては、トランザクションを最初から再試行できます。 + +上記のエラーの他に、gRPC ライブラリによって返されるエラーが発生する場合があります。これらの場合、応答には `ErrorInfo` は含まれません。詳細については、[gRPC ドキュメント](https://grpc.io/docs/guides/error/#error-status-codes)を参照してください。 + +gRPC では、各 RPC に期限を設定できます。期限を超えると、`DEADLINE_EXCEEDED` エラーが表示されます。一般に、RPC が `Begin`、`Join`、または `Commit` でない限り、この状況ではトランザクションをロールバックする必要があります。`Commit` の場合、状況は `UNKNOWN_TRANSACTION_STATUS` (トランザクションが正常にコミットされたかどうか不明) と同等であり、同じ方法でエラーを処理する必要があります。 + +## `DistributedTransactionAdmin` サービスの使用方法 + +`DistributedTransactionAdmin` サービスは、次の RPC を提供します。 + +- `CreateNamespace`: 名前空間を作成します。 +- `DropNamespace`: 名前空間を削除します。 +- `NamespaceExists`: 指定された名前空間が存在するかどうかを返します。 +- `CreateTable`: テーブルを作成します。 +- `DropTable`: テーブルを削除します。 +- `TruncateTable`: テーブルを切り捨てます。 +- `TableExists`: 指定されたテーブルが存在するかどうかを返します。 +- `CreateIndex`: インデックスを作成します。 +- `DropIndex`: インデックスを削除します。 +- `IndexExists`: 指定されたインデックスが存在するかどうかを返します。 +- `RepairNamespace`: 不明な状態にある可能性がある名前空間を修復します。 +- `RepairTable`: 不明な状態にある可能性がある名前空間を修復します。 +- `AddNewColumnToTable`: テーブルに新しい列を追加します。 +- `CreateCoordinatorTables`: コーディネーターテーブルを作成します。 +- `DropCoordinatorTables`: コーディネーターテーブルを削除します。 +- `TruncateCoordinatorTables`: コーディネーターテーブルを切り捨てます。 +- `CoordinatorTablesExist`: コーディネーターテーブルが存在するかどうかを返します。 +- `RepairCoordinatorTables`: コーディネーターテーブルを修復します。 +- `GetTableMetadata`: 指定されたテーブルのテーブルメタデータを返します。 +- `GetNamespaceTableNames`: 指定された名前空間内のテーブルを返します。 +- `GetNamespaceNames`: ScalarDB によって作成された既存の名前空間名を返します。 +- `ImportTable`: ScalarDB によって管理されていない既存のテーブルをインポートします。 +- `Upgrade`: ScalarDB 環境をアップグレードして、最新バージョンの ScalarDB API をサポートします。 + +### エラー処理 + +以下の表は、`DistributedTransactionAdmin` サービスのすべての RPC のステータスコードと `ErrorInfo` の `reason` の可能な値を示しています。 + +| ステータスコード | `ErrorInfo` の `reason` | 説明 | +|---------------------|----------------------------|------------------------------| +| INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| FAILED_PRECONDITION | ILLEGAL_STATE | が無効な状態で呼び出されました。 | +| INTERNAL | INTERNAL_ERROR | 操作が失敗しました。 | + +上記のエラー以外にも、gRPC ライブラリによって返されるエラーが発生する場合があります。このような場合、応答には `ErrorInfo` は含まれません。詳細については、[gRPC ドキュメント](https://grpc.io/docs/guides/error/#error-status-codes)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-sql-grpc-api-guide.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-sql-grpc-api-guide.mdx new file mode 100644 index 00000000..099acaa0 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-sql-grpc-api-guide.mdx @@ -0,0 +1,184 @@ +--- +tags: + - Enterprise Premium +--- + +# ScalarDB Cluster SQL gRPC API ガイド + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; + + + +このドキュメントでは、ScalarDB Cluster SQL gRPC API について説明します。 + + + +ScalarDB Cluster SQL は、内部で gRPC API を使用する Java API を提供します。Java または JVM 言語を使用する場合は、ScalarDB Cluster SQL gRPC API を直接使用する代わりに、Java API を使用できます。Java API の詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx)を参照してください。 + +ScalarDB Cluster SQL gRPC API のサービスとメッセージの詳細については、`scalardb-cluster-sql.proto` ファイルの定義を参照してください。商用ライセンスを持つ ScalarDB Cluster ユーザーで、`scalardb-cluster-sql.proto` ファイルが必要な場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。 + +ScalarDB Cluster SQL gRPC API は、次のサービスで構成されています: + +- `scalardb.cluster.rpc.v1.sql.SqlTransaction`: ScalarDB Cluster SQL のトランザクション機能を提供します。 +- `scalardb.cluster.rpc.v1.sql.SqlTwoPhaseCommitTransaction`: ScalarDB Cluster SQL の 2 フェーズコミットトランザクション機能を提供します。 +- `scalardb.cluster.rpc.v1.sql.Metadata`: ScalarDB Cluster SQL のメタデータビューを提供します。 + +次のセクションでは、各サービスの使用方法について説明します。 + +## ScalarDB Cluster SQL gRPC API でのエラー処理の概要 + +各サービスの使用方法を説明する前に、このセクションでは、ScalarDB Cluster SQL gRPC API でのエラー処理の仕組みについて説明します。 + +ScalarDB Cluster SQL gRPC API は、エラー処理に [Richer error model](https://grpc.io/docs/guides/error/#richer-error-model) を採用しています。 + +このモデルにより、サーバーは 1 つ以上の protobuf メッセージとして表現される追加のエラー詳細を返すことができ、クライアントはそれを利用できるようになります。 + +ScalarDB Cluster SQL gRPC API は、[standard set of error message types](https://github.com/googleapis/googleapis/blob/master/google/rpc/error_details.proto) の 1 つである `google.rpc.ErrorInfo` を使用し、追加のエラー詳細を `ErrorInfo` フィールドに格納します。 + +`ErrorInfo` には次のフィールドがあります: + +- `reason`: エラーの簡単な説明を提供する文字列。次のセクションでは、各サービスにおける `reason` の可能な値について説明します。 +- `domain`: エラーの原因を示す文字列。ScalarDB Cluster SQL gRPC API では、この文字列は常に `com.scalar.db.cluster.sql` に設定されます。 +- `metadata`: 特定のエラーのメタデータのマップ。ScalarDB Cluster SQL gRPC API では、エラーがトランザクションに関連している場合、マップに `transactionId` キーを持つトランザクション ID が配置されます。 + +エラーが発生した場合は、gRPC レスポンスの `google.rpc.Status` から `ErrorInfo` を取得できますが、その方法はプログラミング言語によって異なります。 + +特定のプログラミング言語で `ErrorInfo` を取得する方法については、適切なドキュメントを参照してください。 + +## `SqlTransaction` サービスの使用方法 + +`SqlTransaction` サービスは次の RPC を提供します: + +- `Begin`: トランザクションを開始します。 +- `Execute`: SQL ステートメントを実行します。 +- `Commit`: トランザクションをコミットします。 +- `Rollback`: トランザクションをロールバックします。 + +まず、`Begin` を呼び出してトランザクションを開始します。その後、`Execute` を呼び出してレコードの読み取り、書き込み、削除を行うことができます。トランザクションを終了するには、`Commit` を呼び出します。 + +または、トランザクションがコミットされる前であればいつでも `Rollback` を呼び出してキャンセルできます。`Begin` を呼び出すと、レスポンスでトランザクション ID を受け取ります。この ID を使用して、`Execute`、`Commit`、および `Rollback` を呼び出すことができます。 + +また、トランザクション ID なしで `Execute` を呼び出して、ワンショットトランザクションを実行することもできます。この場合、トランザクションは実行後に自動的にコミットされます。このメソッドを使用して、DDL ステートメントを実行することもできます。サポートされている SQL ステートメントの詳細については、[ScalarDB SQL 文法](../scalardb-sql/grammar.mdx)を参照してください。ただし、`Execute` は DML ステートメントと DDL ステートメントのみをサポートすることに注意してください。 + +`Begin` を呼び出すときに、オプションでトランザクション ID を指定できます。トランザクション ID を指定する場合、ユーザーは ID の一意性を保証する責任があります。トランザクション ID を指定しない場合、ScalarDB Cluster はトランザクションのトランザクション ID を生成します。 + +各 RPC リクエストに対して `RequestHeader` を設定する必要があります。`RequestHeader` には、リクエストのホップ数を制限する `hop_limit` フィールドが含まれています。`hop_limit` の目的は、クラスター内での無限ループを防ぐことです。リクエストが別のクラスターノードに転送されるたびに、`hop_limit` は 1 つ減ります。`hop_limit` が 0 に達すると、リクエストは拒否されます。 + +### エラー処理 + +以下の表は、`SqlTransaction` サービスの各 RPC におけるステータスコードと `ErrorInfo` の `reason` の可能な値を示しています。 + +| RPC | ステータスコード | `ErrorInfo` の `reason` | 説明 | +|----------|---------------------|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Begin | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Begin | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Begin | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Begin | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Execute | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Execute | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Execute | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合、トランザクションを最初から再試行してください。 | +| Execute | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Execute | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Execute | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Commit | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Commit | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Commit | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Commit | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | UNKNOWN_TRANSACTION_STATUS | トランザクションのステータスは不明です (トランザクションが正常にコミットされたかどうかは不明です)。この状況では、トランザクションが正常にコミットされたかどうかを確認し、そうでない場合は再試行する必要があります。トランザクションステータスを判別する責任はユーザーにあります。トランザクションステータステーブルを作成し、他のアプリケーションデータと連動して更新すると、テーブル自体からトランザクションのステータスを判別できるため、便利です。 | +| Commit | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Rollback | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Rollback | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Rollback | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | + +エラーが発生した場合は、`Begin` の場合を除き、トランザクションをロールバックする必要があります。その後、再試行によって解決できるエラーについては、トランザクションを最初から再試行できます。 + +上記のエラーの他に、gRPC ライブラリによって返されるエラーが発生する場合があります。これらの場合、応答には `ErrorInfo` は含まれません。詳細については、[gRPC ドキュメント](https://grpc.io/docs/guides/error/#error-status-codes)を参照してください。 + +gRPC では、RPC ごとに期限を設定できます。期限を超えると、`DEADLINE_EXCEEDED` エラーが表示されます。一般に、RPC が `Begin` または `Commit` でない限り、この状況ではトランザクションをロールバックする必要があります。`Commit` の場合は `UNKNOWN_TRANSACTION_STATUS` (トランザクションが正常にコミットされたかどうか不明) と同等の状況となり、同様にエラーを処理する必要があります。 + +## `SqlTwoPhaseCommitTransaction` サービスの使用方法 + +`SqlTwoPhaseCommitTransaction` サービスは次の RPC を提供します: + +- `Begin`: トランザクションを開始します。 +- `Join`: トランザクションに参加します。 +- `Execute`: SQL ステートメントを実行します。 +- `Prepare`: トランザクションを準備します。 +- `Validate`: トランザクションを検証します。 +- `Commit`: トランザクションをコミットします。 +- `Rollback`: トランザクションをロールバックします。 + +まず、コーディネータープロセスの場合は、`Begin` を呼び出してトランザクションを開始します。または、参加者プロセスの場合は、`Join` を呼び出して、コーディネーターが既に開始しているトランザクションに参加できます。その後、`Execute` を呼び出してレコードの読み取り、書き込み、および削除を行うことができます。 +トランザクションを確定するには、`Prepare`、`Validate`、`Commit` の順に呼び出します。または、トランザクションがコミットされる前であればいつでも `Rollback` を呼び出してキャンセルできます。`Begin` または `Join` を呼び出すと、応答でトランザクション ID が返されます。これを使用して、`Execute`、`Prepare`、`Validate`、`Commit`、および `Rollback` を呼び出すことができます。 + +また、トランザクション ID なしで `Execute` を呼び出して、ワンショットトランザクションを実行することもできます。この場合、トランザクションは実行後に自動的にコミットされます。この方法を使用して、DDL ステートメントを実行することもできます。 サポートされている SQL ステートメントの詳細については、[ScalarDB SQL 文法](../scalardb-sql/grammar.mdx)を参照してください。ただし、`Execute` は DML ステートメントと DDL ステートメントのみをサポートすることに注意してください。 + +`Begin` を呼び出すときに、オプションでトランザクション ID を指定できます。トランザクション ID を指定する場合、ID の一意性を保証するのはユーザーの責任です。トランザクション ID を指定しない場合、ScalarDB Cluster はトランザクションのトランザクション ID を生成します。 + +RPC リクエストごとに `RequestHeader` を設定する必要があります。`RequestHeader` には、リクエストのホップ数を制限している `hop_limit` フィールドが含まれています。`hop_limit` の目的は、クラスター内での無限ループを防ぐことです。リクエストが別のクラスターノードに転送されるたびに、`hop_limit` は 1 つ減ります。`hop_limit` が 0 に達すると、リクエストは拒否されます。 + +### エラー処理 + +次の表は、`SqlTwoPhaseCommitTransaction` サービスの各 RPC のステータスコードと `ErrorInfo` の `reason` の可能な値を示しています。 + +| RPC | ステータスコード | `ErrorInfo` の `reason` | 説明 | +|-------------------|---------------------|----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Begin, Join | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Begin, Join | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Begin, Join | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Begin, Join | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Execute | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Execute | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Execute | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合、トランザクションを最初から再試行してください。 | +| Execute | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Execute | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Execute | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Prepare, Validate | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Prepare, Validate | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Prepare, Validate | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合、トランザクションを最初から再試行してください。 | +| Prepare, Validate | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Prepare, Validate | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Prepare, Validate | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Commit | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Commit | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Commit | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。このエラーは、トランザクションの有効期限が切れたか、クラスタートポロジの変更によりルーティング情報が更新されたことを示します。この場合、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。これは、クラスターノード間のルーティング情報が矛盾している場合に発生します。通常、このエラーは短時間で解決されるため、このエラーが発生してからしばらく経ってから、トランザクションを最初から再試行できます。 | +| Commit | FAILED_PRECONDITION | TRANSACTION_CONFLICT | トランザクションの競合が発生しました。このエラーが発生した場合は、トランザクションを最初から再試行してください。 | +| Commit | INTERNAL | UNKNOWN_TRANSACTION_STATUS | トランザクションのステータスは不明です (トランザクションが正常にコミットされたかどうかは不明です)。この状況では、トランザクションが正常にコミットされたかどうかを確認し、そうでない場合は再試行する必要があります。トランザクションステータスを判別する責任はユーザーにあります。トランザクションステータステーブルを作成し、他のアプリケーションデータと連動して更新すると、テーブル自体からトランザクションのステータスを判別できるため、便利です。 | +| Commit | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | +| Rollback | INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です。 | +| Rollback | FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| Rollback | NOT_FOUND | TRANSACTION_NOT_FOUND | 指定されたトランザクション ID に関連付けられたトランザクションが見つかりませんでした。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | HOP_LIMIT_EXCEEDED | ホップ制限を超えました。ロールバックの場合、トランザクションは自動的に期限切れになるため、トランザクションを再試行する必要はありません。 | +| Rollback | INTERNAL | INTERNAL_ERROR | 一時的または非一時的障害のため、操作が失敗しました。トランザクションを最初から再試行することはできますが、原因が非一時的である場合、トランザクションは失敗する可能性があります。 | + +エラーが発生した場合は、`Begin` または `Join` の場合を除き、トランザクションをロールバックする必要があります。その後、再試行によって解決できるエラーについては、トランザクションを最初から再試行できます。 + +上記のエラーの他に、gRPC ライブラリによって返されるエラーが発生する場合があります。これらの場合、応答には `ErrorInfo` は含まれません。詳細については、[gRPC ドキュメント](https://grpc.io/docs/guides/error/#error-status-codes)を参照してください。 + +gRPC では、各 RPC に期限を設定できます。期限を超えると、`DEADLINE_EXCEEDED` エラーが表示されます。一般に、RPC が `Begin`、`Join`、または `Commit` でない限り、この状況ではトランザクションをロールバックする必要があります。`Commit` の場合は `UNKNOWN_TRANSACTION_STATUS` (トランザクションが正常にコミットされたかどうか不明) と同等の状況となり、同様にエラーを処理する必要があります。 + +## `Metadata` サービスの使用方法 + +`Metadata` サービスは次の RPC を提供します: + +- `GetNamespaceMetadata`: 指定された名前空間の名前空間メタデータを取得します。 +- `ListTableMetadataInNamespace`: 指定された名前空間内のテーブルのテーブルメタデータを取得します。 +- `GetTableMetadata`: 指定されたテーブルのテーブルメタデータを取得します。 +- `ListNamespaceMetadata`: 名前空間メタデータのリストを取得します。 + +### エラー処理 + +以下の表は、`Metadata` サービスのすべての RPC のステータスコードと `ErrorInfo` の `reason` の可能な値を示しています: + +| ステータスコード | `ErrorInfo` の `reason` | 説明 | +|---------------------|----------------------------|---------------------------------| +| INVALID_ARGUMENT | ILLEGAL_ARGUMENT | 要求メッセージ内の引数が無効です | +| FAILED_PRECONDITION | ILLEGAL_STATE | RPC が無効な状態で呼び出されました。 | +| INTERNAL | INTERNAL_ERROR | 操作が失敗しました。 | + +上記のエラー以外にも、gRPC ライブラリによって返されるエラーが発生する場合があります。このような場合、応答には `ErrorInfo` は含まれません。詳細については、[gRPC ドキュメント](https://grpc.io/docs/guides/error/#error-status-codes)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-status-codes.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-status-codes.mdx new file mode 100644 index 00000000..ddee9a3a --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/scalardb-cluster-status-codes.mdx @@ -0,0 +1,403 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster のエラーコード + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、ScalarDB Cluster のエラーコードの一覧を示します。 + +## エラーコードのクラスと説明 + +| クラス | 説明 | +|:----------------|:--------------------------| +| `CLUSTER-1xxxx` | ユーザーエラーカテゴリのエラー | +| `CLUSTER-2xxxx` | 同時実行エラーカテゴリのエラー | +| `CLUSTER-3xxxx` | 内部エラーカテゴリのエラー | + +## `CLUSTER-1xxxx` ステータスコード + +### `CLUSTER-10000` + +**メッセージ** + +```markdown +The namespace does not exist. Namespace: %s +``` + +### `CLUSTER-10001` + +**メッセージ** + +```markdown +The table does not exist. Table: %s +``` + +### `CLUSTER-10002` + +**メッセージ** + +```markdown +The user does not exist. User: %s +``` + +### `CLUSTER-10003` + +**メッセージ** + +```markdown +ClusterConfig is not specified +``` + +### `CLUSTER-10004` + +**メッセージ** + +```markdown +The get type is unspecified +``` + +### `CLUSTER-10005` + +**メッセージ** + +```markdown +The get type is unrecognized +``` + +### `CLUSTER-10006` + +**メッセージ** + +```markdown +The value of the column is not set. Column: %s +``` + +### `CLUSTER-10007` + +**メッセージ** + +```markdown +The scan type is unspecified +``` + +### `CLUSTER-10008` + +**メッセージ** + +```markdown +The scan type is unrecognized +``` + +### `CLUSTER-10009` + +**メッセージ** + +```markdown +The order is unspecified +``` + +### `CLUSTER-10010` + +**メッセージ** + +```markdown +The order is unrecognized +``` + +### `CLUSTER-10011` + +**メッセージ** + +```markdown +The clustering order is unspecified +``` + +### `CLUSTER-10012` + +**メッセージ** + +```markdown +The clustering order is unrecognized +``` + +### `CLUSTER-10013` + +**メッセージ** + +```markdown +The put condition type is unspecified +``` + +### `CLUSTER-10014` + +**メッセージ** + +```markdown +The put condition type is unrecognized +``` + +### `CLUSTER-10015` + +**メッセージ** + +```markdown +The delete condition type is unspecified +``` + +### `CLUSTER-10016` + +**メッセージ** + +```markdown +The delete condition type is unrecognized +``` + +### `CLUSTER-10017` + +**メッセージ** + +```markdown +The operator is unspecified +``` + +### `CLUSTER-10018` + +**メッセージ** + +```markdown +The operator is unrecognized +``` + +### `CLUSTER-10019` + +**メッセージ** + +```markdown +The mutation is not set +``` + +### `CLUSTER-10020` + +**メッセージ** + +```markdown +The data type is unspecified +``` + +### `CLUSTER-10021` + +**メッセージ** + +```markdown +The data type is unrecognized +``` + +### `CLUSTER-10022` + +**メッセージ** + +```markdown +The user option is unspecified +``` + +### `CLUSTER-10023` + +**メッセージ** + +```markdown +The user option is unrecognized +``` + +### `CLUSTER-10024` + +**メッセージ** + +```markdown +The privilege is unspecified +``` + +### `CLUSTER-10025` + +**メッセージ** + +```markdown +The privilege is unrecognized +``` + +### `CLUSTER-10026` + +**メッセージ** + +```markdown +The username is not set +``` + +### `CLUSTER-10027` + +**メッセージ** + +```markdown +This feature is not supported in ScalarDB Cluster +``` + +### `CLUSTER-10028` + +**メッセージ** + +```markdown +The property 'scalar.db.contact_points' must not be empty +``` + +### `CLUSTER-10029` + +**メッセージ** + +```markdown +The property 'scalar.db.contact_points' must be prefixed with 'indirect:' or 'direct-kubernetes:' +``` + +### `CLUSTER-10030` + +**メッセージ** + +```markdown +The format of the property 'scalar.db.contact_points' for direct-kubernetes client mode is 'direct-kubernetes:/' or 'direct-kubernetes:' +``` + +### `CLUSTER-10031` + +**メッセージ** + +```markdown +The property 'scalar.db.sql.cluster_mode.contact_points' must not be empty +``` + +### `CLUSTER-10032` + +**メッセージ** + +```markdown +The property 'scalar.db.sql.cluster_mode.contact_points' must be prefixed with 'indirect:' or 'direct-kubernetes:' +``` + +### `CLUSTER-10033` + +**メッセージ** + +```markdown +The format of the property 'scalar.db.sql.cluster_mode.contact_points' for direct-kubernetes client mode is 'direct-kubernetes:/' or 'direct-kubernetes:' +``` + +### `CLUSTER-10034` + +**メッセージ** + +```markdown +ClusterNodeManagerFactory is not specified +``` + +### `CLUSTER-10035` + +**メッセージ** + +```markdown +The update condition type is unspecified +``` + +### `CLUSTER-10036` + +**メッセージ** + +```markdown +The update condition type is unrecognized +``` + +### `CLUSTER-10037` + +**メッセージ** + +```markdown +The two-phase commit interface is not supported +``` + +## `CLUSTER-2xxxx` ステータスコード + +### `CLUSTER-20000` + +**メッセージ** + +```markdown +The hop limit is exceeded +``` + +### `CLUSTER-20001` + +**メッセージ** + +```markdown +A transaction associated with the specified transaction ID is not found. The transaction might have expired, or the cluster node that handled the transaction might have been restarted. Transaction ID: %s +``` + +## `CLUSTER-3xxxx` ステータスコード + +### `CLUSTER-30000` + +**メッセージ** + +```markdown +Getting local IP addresses failed +``` + +### `CLUSTER-30001` + +**メッセージ** + +```markdown +Getting a cluster node object from the cache failed. Cluster Node IP Address: %s +``` + +### `CLUSTER-30002` + +**メッセージ** + +```markdown +The ring is empty +``` + +### `CLUSTER-30003` + +**メッセージ** + +```markdown +Getting the Kubernetes API client failed +``` + +### `CLUSTER-30004` + +**メッセージ** + +```markdown +Reading the Kubernetes endpoint failed. Namespace: %s; Name: %s; Code: %d; Response Headers: %s; Response Body: %s +``` + +### `CLUSTER-30005` + +**メッセージ** + +```markdown +Configuring TLS failed +``` + +### `CLUSTER-30006` + +**メッセージ** + +```markdown +No nearest cluster nodes are found +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx new file mode 100644 index 00000000..e995a46c --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/setup-scalardb-cluster-on-kubernetes-by-using-helm-chart.mdx @@ -0,0 +1,257 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster をローカルにデプロイする方法 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; + + + +このガイドでは、テスト環境向けに特別に設計されたローカル Kubernetes クラスターで Helm Chart を使用して ScalarDB Cluster をデプロイする方法について説明します。 + +## 前提条件 + +- [Docker](https://www.docker.com/get-started/) 20.10 以降と [Docker Compose](https://docs.docker.com/compose/install/) V2 以降 +- Kubernetes クラスター ([minikube](https://minikube.sigs.k8s.io/docs/start/) または [kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) のいずれか) +- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) +- [Helm](https://helm.sh/docs/intro/install/) + + + +## 作成するもの + +以下に示すように、ローカル Kubernetes クラスターに次のコンポーネントをデプロイします。 + +``` ++----------------------------------------------------------------------------------------------------------------------------------------+ +| [Kubernetes クラスター] | +| | +| [ポッド] [ポッド] [ポッド] | +| | +| +-------+ | +| +---> | Envoy | ---+ | +| | +-------+ | | +| | | | +| +---------+ | +-------+ | +--------------------+ | +| | サービス | ---+---> | Envoy | ---+---------> | サービス | ---+ | +| | (Envoy) | | +-------+ | | (ScalarDB Cluster) | | | +| +---------+ | | +--------------------+ | +------------------------+ | +| | +-------+ | | +---> | ScalarDB Cluster ノード | ---+ | +| +---> | Envoy | ---+ | | +------------------------+ | | +| +-------+ | | | | +| | | +------------------------+ | +------------+ | +| +---+---> | ScalarDB Cluster ノード | ---+---> | PostgreSQL | | +| | | +------------------------+ | +------------+ | +| | | | | +| | | +------------------------+ | | +| | +---> | ScalarDB Cluster ノード | ---+ | +| | +------------------------+ | +| +-----------------------------+ | | +| | サービス | ---+ | +| | (ScalarDB Cluster GraphQL) | | +| +-----------------------------+ | +| | ++----------------------------------------------------------------------------------------------------------------------------------------+ +``` + +## ステップ 1. PostgreSQL コンテナを起動する + +ScalarDB Cluster は、バックエンドデータベースとして何らかのデータベースシステムを使用する必要があります。このガイドで使用するデータベースは PostgreSQL です。 + +次のようにして、Kubernetes クラスターに PostgreSQL をデプロイできます。 + +1. 次のコマンドを実行して、Bitnami Helm リポジトリを追加します。 + + ```console + helm repo add bitnami https://charts.bitnami.com/bitnami + ``` + +2. 次のコマンドを実行して PostgreSQL をデプロイします。 + + ```console + helm install postgresql-scalardb-cluster bitnami/postgresql \ + --set auth.postgresPassword=postgres \ + --set primary.persistence.enabled=false + ``` + +3. 次のコマンドを実行して、PostgreSQL コンテナが実行されているかどうかを確認します。 + + ```console + kubectl get pod + ``` + + 次の出力が表示されます。 + + ```console + NAME READY STATUS RESTARTS AGE + postgresql-scalardb-cluster-0 1/1 Running 0 17s + ``` + +## ステップ 2. Helm Chart を使用して Kubernetes クラスターに ScalarDB Cluster をデプロイする + +1. 次のコマンドを実行して Scalar Helm Charts リポジトリを追加します。 + + ```console + helm repo add scalar-labs https://scalar-labs.github.io/helm-charts + ``` + +2. ライセンスキーと証明書を環境変数として設定します。ライセンスキーがない場合は、[お問い合わせ](https://www.scalar-labs.com/contact)ください。`` の値の詳細については、[製品ライセンスキーの設定方法](../scalar-licensing/README.mdx)を参照してください。 + + ```console + SCALAR_DB_CLUSTER_LICENSE_KEY='' + SCALAR_DB_CLUSTER_LICENSE_CHECK_CERT_PEM='' + ``` + +3. 次のコマンドを実行して、ScalarDB Cluster のカスタム値ファイル (`scalardb-cluster-custom-values.yaml`) を作成します。 + + ```console + cat << 'EOF' > scalardb-cluster-custom-values.yaml + envoy: + enabled: true + service: + type: "LoadBalancer" + + scalardbCluster: + + image: + repository: "ghcr.io/scalar-labs/scalardb-cluster-node-byol-premium" + + scalardbClusterNodeProperties: | + # ScalarDB Cluster configurations + scalar.db.cluster.membership.type=KUBERNETES + scalar.db.cluster.membership.kubernetes.endpoint.namespace_name=${env:SCALAR_DB_CLUSTER_MEMBERSHIP_KUBERNETES_ENDPOINT_NAMESPACE_NAME} + scalar.db.cluster.membership.kubernetes.endpoint.name=${env:SCALAR_DB_CLUSTER_MEMBERSHIP_KUBERNETES_ENDPOINT_NAME} + + # Storage configurations + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://postgresql-scalardb-cluster.default.svc.cluster.local:5432/postgres + scalar.db.username=${env:SCALAR_DB_CLUSTER_POSTGRES_USERNAME} + scalar.db.password=${env:SCALAR_DB_CLUSTER_POSTGRES_PASSWORD} + + # For ScalarDB Cluster GraphQL tutorial. + scalar.db.graphql.enabled=true + + # For ScalarDB Cluster SQL tutorial. + scalar.db.sql.enabled=true + + ### License key configurations + scalar.db.cluster.node.licensing.license_key=${env:SCALAR_DB_CLUSTER_LICENSE_KEY} + scalar.db.cluster.node.licensing.license_check_cert_pem=${env:SCALAR_DB_CLUSTER_LICENSE_CHECK_CERT_PEM} + graphql: + enabled: true + service: + type: "LoadBalancer" + + secretName: "scalardb-credentials-secret" + EOF + ``` + +:::note + + このガイドでは、ScalarDB Cluster GraphQL および Envoy のサービスタイプは `LoadBalancer` に設定されています。 + +::: + +4. 資格情報とライセンスキーを含む `scalardb-credentials-secret` という名前のシークレットリソースを作成します。 + + ```console + kubectl create secret generic scalardb-credentials-secret \ + --from-literal=SCALAR_DB_CLUSTER_POSTGRES_USERNAME=postgres \ + --from-literal=SCALAR_DB_CLUSTER_POSTGRES_PASSWORD=postgres \ + --from-literal=SCALAR_DB_CLUSTER_LICENSE_KEY="${SCALAR_DB_CLUSTER_LICENSE_KEY}" \ + --from-file=SCALAR_DB_CLUSTER_LICENSE_CHECK_CERT_PEM=<(echo ${SCALAR_DB_CLUSTER_LICENSE_CHECK_CERT_PEM} | sed 's/\\n/\ + /g') \ + -n default + ``` + +5. ScalarDB Cluster のチャートバージョンを設定します。 + + ```console + SCALAR_DB_CLUSTER_VERSION=3.13.1 + SCALAR_DB_CLUSTER_CHART_VERSION=$(helm search repo scalar-labs/scalardb-cluster -l | grep -F "${SCALAR_DB_CLUSTER_VERSION}" | awk '{print $2}' | sort --version-sort -r | head -n 1) + ``` + +6. ScalarDB Cluster をデプロイします。 + + ```console + helm install scalardb-cluster scalar-labs/scalardb-cluster -f scalardb-cluster-custom-values.yaml --version ${SCALAR_DB_CLUSTER_CHART_VERSION} -n default + ``` + +7. ScalarDB Cluster ポッドがデプロイされているかどうかを確認します。 + + ```console + kubectl get pod + ``` + + 次の出力が表示されます。 + + ```console + NAME READY STATUS RESTARTS AGE + postgresql-scalardb-cluster-0 1/1 Running 0 84s + scalardb-cluster-envoy-59899dc588-477tg 1/1 Running 0 35s + scalardb-cluster-envoy-59899dc588-dpvhx 1/1 Running 0 35s + scalardb-cluster-envoy-59899dc588-lv9hx 1/1 Running 0 35s + scalardb-cluster-node-866c756c79-5v2tk 1/1 Running 0 35s + scalardb-cluster-node-866c756c79-9zhq5 1/1 Running 0 35s + scalardb-cluster-node-866c756c79-t6v86 1/1 Running 0 35s + ``` + + ScalarDB Cluster Node Pod と Envoy Pod が適切にデプロイされている場合、各 Pod の `STATUS` は `Running` になります。 + +6. 次のコマンドを実行して、ScalarDB Cluster のサービスリソースがデプロイされているかどうかを確認します。 + + ```console + kubectl get svc + ``` + + 次の出力が表示されます。 + + ```console + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + kubernetes ClusterIP 10.96.0.1 443/TCP 260d + postgresql-scalardb-cluster ClusterIP 10.110.97.40 5432/TCP 86s + postgresql-scalardb-cluster-hl ClusterIP None 5432/TCP 86s + scalardb-cluster-envoy LoadBalancer 10.105.121.51 localhost 60053:30641/TCP 49s + scalardb-cluster-envoy-metrics ClusterIP 10.111.131.189 9001/TCP 49s + scalardb-cluster-graphql LoadBalancer 10.105.74.214 localhost 8080:30514/TCP 49s + scalardb-cluster-headless ClusterIP None 60053/TCP 49s + scalardb-cluster-metrics ClusterIP 10.110.132.22 9080/TCP 49s + ``` + + ScalarDB Cluster と Envoy のサービスリソースが適切にデプロイされている場合、`CLUSTER-IP` 列にプライベート IP アドレスが表示されます。 + + :::note + + `scalardb-cluster-headless` には `CLUSTER-IP` アドレスがありません。 + + ::: + + また、`TYPE` が `LoadBalancer` に設定されている ScalarDB Cluster GraphQL (`scalardb-cluster-graphql`) のサービスリソースと Envoy (`scalardb-cluster-envoy`) のサービスリソースに割り当てられた `EXTERNAL-IP` アドレスも確認できます。 + + また、環境から `LoadBalancer` サービスにアクセスする方法は、Kubernetes ディストリビューションごとに異なります。例: + + - minikube を使用している場合は、[`minikube tunnel` コマンド](https://minikube.sigs.k8s.io/docs/commands/tunnel/)を使用できます。 + - kind を使用している場合は、[Cloud Provider KIND](https://kind.sigs.k8s.io/docs/user/loadbalancer/) を使用できます。 + + `LoadBalancer` サービスにアクセスする方法の詳細については、使用している Kubernetes ディストリビューションの公式ドキュメントを参照してください。 + +## すべてのリソースを削除する + +以下のコマンドを実行すると、このガイドで作成したすべてのリソースを削除できます。 + +```console +helm uninstall scalardb-cluster postgresql-scalardb-cluster +``` + +## 詳細 + +ScalarDB Cluster の他のユースケースについて詳しく知るには、次のチュートリアルをお試しください。 + +- [ScalarDB Cluster をはじめよう](getting-started-with-scalardb-cluster.mdx) +- [ScalarDB Cluster GraphQL をはじめよう](getting-started-with-scalardb-cluster-graphql.mdx) +- [JDBC 経由の ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-jdbc.mdx) +- [Spring Data JDBC for ScalarDB を使用した ScalarDB Cluster SQL をはじめよう](getting-started-with-scalardb-cluster-sql-spring-data-jdbc.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode.mdx new file mode 100644 index 00000000..ee166bde --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode.mdx @@ -0,0 +1,238 @@ +--- +tags: + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB Cluster スタンドアロンモード + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; + + + +Kubernetes クラスターをセットアップし、Helm Chart を使用してその上に ScalarDB Cluster をデプロイする代わりに、ScalarDB Cluster をスタンドアロンモードで実行できます。これにより、開発プロセスとテストプロセスが簡素化されます。この主な使用例は、ローカルマシン上の Docker を介して ScalarDB Cluster をスタンドアロンモードで起動し、開発とテストに使用する場合です。 + +ScalarDB Cluster をスタンドアロンモードで実行するには、`scalar.db.cluster.node.standalone_mode.enabled` プロパティを `true` に設定する必要があります。 + +```properties +scalar.db.cluster.node.standalone_mode.enabled=true +``` + +## Docker Compose で ScalarDB Cluster をスタンドアロンモードで実行 + +このセクションでは、Docker Compose で ScalarDB Cluster をスタンドアロンモードで起動する方法について説明します。 + + + +### ScalarDB サンプルリポジトリのクローンを作成する + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、必要なファイルが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-cluster-standalone-mode/ +``` + +### ScalarDB Cluster 用にデータベースをセットアップする + +データベースを選択し、指示に従って ScalarDB Cluster 用に構成します。 + +ScalarDB がサポートするデータベースの一覧については、[データベース](../requirements.mdx#databases)を参照してください。 + + + +

MySQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で MySQL を実行できます。 + + MySQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d mysql + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の MySQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For MySQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:mysql://mysql-1:3306/ + scalar.db.username=root + scalar.db.password=mysql + ``` +
+ +

PostgreSQL をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で PostgreSQL を実行できます。 + + PostgreSQL を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d postgres + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の PostgreSQL のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For PostgreSQL + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:postgresql://postgres-1:5432/ + scalar.db.username=postgres + scalar.db.password=postgres + ``` +
+ +

Oracle Database をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Oracle Database を実行できます。 + + Oracle Database を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d oracle + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Oracle データベースのプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Oracle + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:oracle:thin:@//oracle-1:1521/FREEPDB1 + scalar.db.username=SYSTEM + scalar.db.password=Oracle + ``` +
+ +

SQL Server をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で SQL Server を実行できます。 + + SQL Server を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d sqlserver + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の SQL Server のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For SQL Server + scalar.db.storage=jdbc + scalar.db.contact_points=jdbc:sqlserver://sqlserver-1:1433;encrypt=true;trustServerCertificate=true + scalar.db.username=sa + scalar.db.password=SqlServer22 + ``` +
+ +

Amazon DynamoDB Local を実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Amazon DynamoDB Local を実行できます。 + + Amazon DynamoDB Local を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d dynamodb + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Amazon DynamoDB Local のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For DynamoDB Local + scalar.db.storage=dynamo + scalar.db.contact_points=sample + scalar.db.username=sample + scalar.db.password=sample + scalar.db.dynamo.endpoint_override=http://dynamodb-1:8000 + ``` +
+ + Azure Cosmos DB for NoSQL を使用するには、Azure アカウントが必要です。Azure アカウントがない場合は、[Azure Cosmos DB アカウントを作成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/quickstart-portal#create-account)にアクセスしてください。 + +

Cosmos DB for NoSQL を構成する

+ + [既定の整合性レベルを構成する](https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-manage-consistency#configure-the-default-consistency-level)の公式ドキュメントに従って、**既定の整合性レベル** を **強力** に設定します。 + +

ScalarDB Cluster を構成する

+ + 次の手順では、ローカル環境に JDK が適切にインストールおよび構成されており、Azure で Cosmos DB for NoSQL アカウントが適切に構成されていることを前提としています。 + + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。説明に従って、`scalar.db.contact_points` と `scalar.db.password` の値を必ず変更してください。 + + ```properties + # For Cosmos DB + scalar.db.storage=cosmos + scalar.db.contact_points= + scalar.db.password= + ``` + +:::note + +Azure Cosmos DB アカウントのプライマリーキーまたはセカンダリキーを `scalar.db.password` の値として使用できます。 + +::: +
+ +

Cassandra をローカルで実行する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの `docker-compose.yaml` ファイルを使用して、Docker Compose で Apache Cassandra を実行できます。 + + Apache Cassandra を起動するには、次のコマンドを実行します。 + + ```console + docker compose up -d cassandra + ``` + +

ScalarDB Cluster を構成する

+ + `scalardb-samples/scalardb-cluster-standalone-mode` ディレクトリの **scalardb-cluster-node.properties** ファイルには、ScalarDB Cluster のデータベース構成が含まれています。**scalardb-cluster-node.properties** ファイル内の Cassandra のプロパティのコメントを解除して、構成が次のようになるようにしてください。 + + ```properties + # For Cassandra + scalar.db.storage=cassandra + scalar.db.contact_points=cassandra-1 + scalar.db.username=cassandra + scalar.db.password=cassandra + ``` +
+
+ +### ライセンスキーを設定する + +構成ファイル `scalardb-cluster-node.properties` で、ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../scalar-licensing/README.mdx) を参照してください。 + +### スタンドアロンモードで ScalarDB Cluster を起動する + +スタンドアロンモードで ScalarDB Cluster を起動するには、次のコマンドを実行します。 + +:::note + +ScalarDB Cluster のその他の設定を変更する場合は、以下のコマンドを実行する前に `scalardb-cluster-node.properties` ファイルを更新してください。 + +::: + +```console +docker compose up -d scalardb-cluster-node +``` + +## ScalarDB Cluster Java API のクライアント構成 + +`indirect` クライアントモードを使用して、スタンドアロンモードで ScalarDB Cluster に接続できます。ScalarDB Cluster Java API のクライアント構成の詳細については、[Java API を使用した ScalarDB Cluster の開発者ガイド](developer-guide-for-scalardb-cluster-with-java-api.mdx) を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/docker-compose.yaml b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/docker-compose.yaml new file mode 100644 index 00000000..005e1608 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/docker-compose.yaml @@ -0,0 +1,28 @@ +version: "3.5" +services: + + postgresql: + container_name: "postgresql" + image: "postgres:15" + ports: + - 5432:5432 + environment: + - POSTGRES_PASSWORD=postgres + healthcheck: + test: ["CMD-SHELL", "pg_isready || exit 1"] + interval: 1s + timeout: 10s + retries: 60 + start_period: 30s + + scalardb-cluster-standalone: + container_name: "scalardb-cluser-node" + image: "ghcr.io/scalar-labs/scalardb-cluster-node:4.0.0-SNAPSHOT" + ports: + - 60053:60053 + - 9080:9080 + volumes: + - ./scalardb-cluster-node.properties:/scalardb-cluster/node/scalardb-cluster-node.properties + depends_on: + postgresql: + condition: service_healthy diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/scalardb-cluster-node.properties b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/scalardb-cluster-node.properties new file mode 100644 index 00000000..6ec8f9a0 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-cluster/standalone-mode/scalardb-cluster-node.properties @@ -0,0 +1,5 @@ +scalar.db.storage=jdbc +scalar.db.contact_points=jdbc:postgresql://postgresql:5432/postgres +scalar.db.username=postgres +scalar.db.password=postgres +scalar.db.cluster.node.standalone_mode.enabled=true diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-core-status-codes.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-core-status-codes.mdx new file mode 100644 index 00000000..9153a5ce --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-core-status-codes.mdx @@ -0,0 +1,1767 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB エラーコード + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、ScalarDB のエラーコードの一覧を示します。 + +## エラーコードのクラスと説明 + +| クラス | 説明 | +|:-------------|:----------------------------------------------| +| `CORE-1xxxx` | ユーザーエラーカテゴリのエラー | +| `CORE-2xxxx` | 同時実行エラーカテゴリのエラー | +| `CORE-3xxxx` | 内部エラーカテゴリのエラー | +| `CORE-4xxxx` | 不明なトランザクションステータスエラーカテゴリのエラー | + +## `CORE-1xxxx` ステータスコード + +### `CORE-10000` + +**メッセージ** + +```markdown +Only a single-column index is supported. Operation: %s +``` + +### `CORE-10001` + +**メッセージ** + +```markdown +The column of the specified index key is not indexed. Operation: %s +``` + +### `CORE-10002` + +**メッセージ** + +```markdown +The index key is not properly specified. Operation: %s +``` + +### `CORE-10003` + +**メッセージ** + +```markdown +Clustering keys cannot be specified when using an index. Operation: %s +``` + +### `CORE-10004` + +**メッセージ** + +```markdown +Orderings cannot be specified when using an index. Operation: %s +``` + +### `CORE-10005` + +**メッセージ** + +```markdown +The limit cannot be negative. Operation: %s +``` + +### `CORE-10006` + +**メッセージ** + +```markdown +Cross-partition scan is not enabled. Operation: %s +``` + +### `CORE-10007` + +**メッセージ** + +```markdown +Cross-partition scan ordering is not enabled. Operation: %s +``` + +### `CORE-10008` + +**メッセージ** + +```markdown +Cross-partition scan filtering is not enabled. Operation: %s +``` + +### `CORE-10009` + +**メッセージ** + +```markdown +The specified projection is not found. Projection: %s, Operation: %s +``` + +### `CORE-10010` + +**メッセージ** + +```markdown +The clustering key boundary is not properly specified. Operation: %s +``` + +### `CORE-10011` + +**メッセージ** + +```markdown +The start clustering key is not properly specified. Operation: %s +``` + +### `CORE-10012` + +**メッセージ** + +```markdown +The end clustering key is not properly specified. Operation: %s +``` + +### `CORE-10013` + +**メッセージ** + +```markdown +Orderings are not properly specified. Operation: %s +``` + +### `CORE-10014` + +**メッセージ** + +```markdown +The specified ordering column is not found. Ordering: %s, Operation: %s +``` + +### `CORE-10015` + +**メッセージ** + +```markdown +The condition is not properly specified. Operation: %s +``` + +### `CORE-10016` + +**メッセージ** + +```markdown +The table does not exist. Table: %s +``` + +### `CORE-10017` + +**メッセージ** + +```markdown +The column value is not properly specified. Column: %s, Operation: %s +``` + +### `CORE-10018` + +**メッセージ** + +```markdown +The mutations are empty +``` + +### `CORE-10019` + +**メッセージ** + +```markdown +Mutations that span multiple partitions are not supported. Mutations: %s +``` + +### `CORE-10020` + +**メッセージ** + +```markdown +The partition key is not properly specified. Operation: %s +``` + +### `CORE-10021` + +**メッセージ** + +```markdown +The clustering key is not properly specified. Operation: %s +``` + +### `CORE-10022` + +**メッセージ** + +```markdown +This feature is not supported in the ScalarDB Community edition +``` + +### `CORE-10023` + +**メッセージ** + +```markdown +This condition is not allowed for the PutIf operation. Condition: %s +``` + +### `CORE-10024` + +**メッセージ** + +```markdown +This condition is not allowed for the DeleteIf operation. Condition: %s +``` + +### `CORE-10025` + +**メッセージ** + +```markdown +Operator must be LIKE or NOT_LIKE. Operator: %s +``` + +### `CORE-10026` + +**メッセージ** + +```markdown +An escape character must be a string of a single character or an empty string +``` + +### `CORE-10027` + +**メッセージ** + +```markdown +The LIKE pattern must not be null +``` + +### `CORE-10028` + +**メッセージ** + +```markdown +The LIKE pattern must not include only an escape character +``` + +### `CORE-10029` + +**メッセージ** + +```markdown +The LIKE pattern must not end with an escape character +``` + +### `CORE-10030` + +**メッセージ** + +```markdown +The column %s does not exist +``` + +### `CORE-10031` + +**メッセージ** + +```markdown +This operation is not supported when getting records of a database without using an index +``` + +### `CORE-10032` + +**メッセージ** + +```markdown +This operation is not supported when getting records of a database by using an index +``` + +### `CORE-10033` + +**メッセージ** + +```markdown +This operation is not supported when scanning all the records of a database or scanning records of a database by using an index +``` + +### `CORE-10034` + +**メッセージ** + +```markdown +This operation is supported only when scanning records of a database by using an index +``` + +### `CORE-10035` + +**メッセージ** + +```markdown +This operation is not supported when scanning records of a database by using an index +``` + +### `CORE-10037` + +**メッセージ** + +```markdown +This operation is supported only when no conditions are specified. If you want to modify a condition, please use clearConditions() to remove all existing conditions first +``` + +### `CORE-10038` + +**メッセージ** + +```markdown +One or more columns must be specified. +``` + +### `CORE-10039` + +**メッセージ** + +```markdown +One or more partition keys must be specified. +``` + +### `CORE-10040` + +**メッセージ** + +```markdown +The column definition must be specified since %s is specified as a partition key +``` + +### `CORE-10041` + +**メッセージ** + +```markdown +The column definition must be specified since %s is specified as a clustering key +``` + +### `CORE-10042` + +**メッセージ** + +```markdown +Invalid ID specified. ID: %d +``` + +### `CORE-10043` + +**メッセージ** + +```markdown +The transaction is not active. Status: %s +``` + +### `CORE-10044` + +**メッセージ** + +```markdown +The transaction has already been committed or rolled back. Status: %s +``` + +### `CORE-10045` + +**メッセージ** + +```markdown +The transaction has not been prepared. Status: %s +``` + +### `CORE-10046` + +**メッセージ** + +```markdown +The transaction has not been prepared or validated. Status: %s +``` + +### `CORE-10047` + +**メッセージ** + +```markdown +The transaction already exists +``` + +### `CORE-10048` + +**メッセージ** + +```markdown +A transaction associated with the specified transaction ID is not found. The transaction might have expired +``` + +### `CORE-10049` + +**メッセージ** + +```markdown +%s is the system namespace name +``` + +### `CORE-10050` + +**メッセージ** + +```markdown +The namespace already exists. Namespace: %s +``` + +### `CORE-10051` + +**メッセージ** + +```markdown +The namespace does not exist. Namespace: %s +``` + +### `CORE-10052` + +**メッセージ** + +```markdown +The table already exists. Table: %s +``` + +### `CORE-10053` + +**メッセージ** + +```markdown +The namespace is not empty. Namespace: %s; Tables in the namespace: %s +``` + +### `CORE-10054` + +**メッセージ** + +```markdown +The column does not exist. Table: %s; Column: %s +``` + +### `CORE-10055` + +**メッセージ** + +```markdown +The index already exists. Table: %s; Column: %s +``` + +### `CORE-10056` + +**メッセージ** + +```markdown +The index does not exist. Table: %s; Column: %s +``` + +### `CORE-10057` + +**メッセージ** + +```markdown +The column already exists. Table: %s; Column: %s +``` + +### `CORE-10058` + +**メッセージ** + +```markdown +The operation does not have the target namespace or table name. Operation: %s +``` + +### `CORE-10059` + +**メッセージ** + +```markdown +The specified value of the property '%s' is not a number. Value: %s +``` + +### `CORE-10060` + +**メッセージ** + +```markdown +The specified value of the property '%s' is not a boolean. Value: %s +``` + +### `CORE-10061` + +**メッセージ** + +```markdown +Reading the file failed. File: %s +``` + +### `CORE-10062` + +**メッセージ** + +```markdown +The property 'scalar.db.cross_partition_scan.enabled' must be set to true to use cross-partition scan with filtering or ordering +``` + +### `CORE-10063` + +**メッセージ** + +```markdown +This column value is out of range for BigInt. Value: %s +``` + +### `CORE-10064` + +**メッセージ** + +```markdown +This type is not supported. Name: %s, Type: %s +``` + +### `CORE-10065` + +**メッセージ** + +```markdown +Storage '%s' is not found +``` + +### `CORE-10066` + +**メッセージ** + +```markdown +Transaction manager '%s' is not found +``` + +### `CORE-10068` + +**メッセージ** + +```markdown +Please use scan() for non-exact match selection. Operation: %s +``` + +### `CORE-10069` + +**メッセージ** + +```markdown +Import-related functionality is not supported in Cassandra +``` + +### `CORE-10070` + +**メッセージ** + +```markdown +The %s network strategy does not exist +``` + +### `CORE-10071` + +**メッセージ** + +```markdown +The property 'scalar.db.contact_port' must be greater than or equal to zero +``` + +### `CORE-10073` + +**メッセージ** + +```markdown +The BLOB type is not supported for clustering keys in Cosmos DB. Column: %s +``` + +### `CORE-10074` + +**メッセージ** + +```markdown +Import-related functionality is not supported in Cosmos DB +``` + +### `CORE-10075` + +**メッセージ** + +```markdown +The property 'scalar.db.contact_points' must not be empty +``` + +### `CORE-10076` + +**メッセージ** + +```markdown +Cosmos DB supports only EQ, NE, IS_NULL, and IS_NOT_NULL operations for the BLOB type in conditions. Mutation: %s +``` + +### `CORE-10077` + +**メッセージ** + +```markdown +The specified consistency level is not supported. Consistency level: %s +``` + +### `CORE-10078` + +**メッセージ** + +```markdown +0x00 bytes are not accepted in BLOB values in DESC order +``` + +### `CORE-10079` + +**メッセージ** + +```markdown +Cannot encode a Text value that contains '\u0000' +``` + +### `CORE-10081` + +**メッセージ** + +```markdown +An index column cannot be set to null or an empty value for Text or Blob in DynamoDB. Operation: %s +``` + +### `CORE-10082` + +**メッセージ** + +```markdown +DynamoDB supports only EQ, NE, IS_NULL, and IS_NOT_NULL operations for the BOOLEAN type in conditions. Mutation: %s +``` + +### `CORE-10083` + +**メッセージ** + +```markdown +Nested multi-storage definitions are not supported. Storage: %s +``` + +### `CORE-10084` + +**メッセージ** + +```markdown +Storage not found. Storage: %s +``` + +### `CORE-10085` + +**メッセージ** + +```markdown +The namespace name is not acceptable. Namespace: %s +``` + +### `CORE-10086` + +**メッセージ** + +```markdown +The table name is not acceptable. Table: %s +``` + +### `CORE-10087` + +**メッセージ** + +```markdown +Importing tables is not allowed in the RDB engine. RDB engine: %s +``` + +### `CORE-10088` + +**メッセージ** + +```markdown +The %s table must have a primary key +``` + +### `CORE-10089` + +**メッセージ** + +```markdown +The RDB engine is not supported. JDBC connection URL: %s +``` + +### `CORE-10090` + +**メッセージ** + +```markdown +Data type %s(%d) is not supported: %s +``` + +### `CORE-10091` + +**メッセージ** + +```markdown +Data type %s is not supported: %s +``` + +### `CORE-10092` + +**メッセージ** + +```markdown +Getting a transaction state is not supported in JDBC transactions +``` + +### `CORE-10093` + +**メッセージ** + +```markdown +Rolling back a transaction is not supported in JDBC transactions +``` + +### `CORE-10094` + +**メッセージ** + +```markdown +Coordinator tables already exist +``` + +### `CORE-10095` + +**メッセージ** + +```markdown +Coordinator tables do not exist +``` + +### `CORE-10096` + +**メッセージ** + +```markdown +The namespace %s is reserved. Any operations on this namespace are not allowed +``` + +### `CORE-10097` + +**メッセージ** + +```markdown +Mutating transaction metadata columns is not allowed. Table: %s; Column: %s +``` + +### `CORE-10098` + +**メッセージ** + +```markdown +A %s condition is not allowed on Put operations +``` + +### `CORE-10099` + +**メッセージ** + +```markdown +A %s condition is not allowed on Delete operations +``` + +### `CORE-10100` + +**メッセージ** + +```markdown +The condition is not allowed to target transaction metadata columns. Column: %s +``` + +### `CORE-10101` + +**メッセージ** + +```markdown +The column '%s' is reserved as transaction metadata +``` + +### `CORE-10102` + +**メッセージ** + +```markdown +Non-primary key columns with the 'before_' prefix, '%s', are reserved as transaction metadata +``` + +### `CORE-10103` + +**メッセージ** + +```markdown +Put cannot have a condition when the target record is unread and implicit pre-read is disabled. Please read the target record beforehand or enable implicit pre-read: %s +``` + +### `CORE-10104` + +**メッセージ** + +```markdown +Writing already-deleted data is not allowed +``` + +### `CORE-10105` + +**メッセージ** + +```markdown +Getting data neither in the read set nor the delete set is not allowed +``` + +### `CORE-10106` + +**メッセージ** + +```markdown +Reading already-written data is not allowed +``` + +### `CORE-10107` + +**メッセージ** + +```markdown +The transaction is not validated. When using the EXTRA_READ serializable strategy, you need to call validate() before calling commit() +``` + +### `CORE-10108` + +**メッセージ** + +```markdown +DynamoDB cannot batch more than 100 mutations at once +``` + +### `CORE-10109` + +**メッセージ** + +```markdown +The partition keys of the table %s.%s were modified, but altering partition keys is not supported +``` + +### `CORE-10110` + +**メッセージ** + +```markdown +The clustering keys of the table %s.%s were modified, but altering clustering keys is not supported +``` + +### `CORE-10111` + +**メッセージ** + +```markdown +The clustering ordering of the table %s.%s were modified, but altering clustering ordering is not supported +``` + +### `CORE-10112` + +**メッセージ** + +```markdown +The column %s of the table %s.%s has been deleted. Column deletion is not supported when altering a table +``` + +### `CORE-10113` + +**メッセージ** + +```markdown +The data type of the column %s of the table %s.%s was modified, but altering data types is not supported +``` + +### `CORE-10114` + +**メッセージ** + +```markdown +Specifying the '--schema-file' option is required when using the '--repair-all' option +``` + +### `CORE-10115` + +**メッセージ** + +```markdown +Specifying the '--schema-file' option is required when using the '--alter' option +``` + +### `CORE-10116` + +**メッセージ** + +```markdown +Specifying the '--schema-file' option is required when using the '--import' option +``` + +### `CORE-10117` + +**メッセージ** + +```markdown +Specifying the '--coordinator' option with the '--import' option is not allowed. Create Coordinator tables separately +``` + +### `CORE-10118` + +**メッセージ** + +```markdown +Reading the configuration file failed. File: %s +``` + +### `CORE-10119` + +**メッセージ** + +```markdown +Reading the schema file failed. File: %s +``` + +### `CORE-10120` + +**メッセージ** + +```markdown +Parsing the schema JSON failed. Details: %s +``` + +### `CORE-10121` + +**メッセージ** + +```markdown +The table name must contain the namespace and the table. Table: %s +``` + +### `CORE-10122` + +**メッセージ** + +```markdown +The partition key must be specified. Table: %s +``` + +### `CORE-10123` + +**メッセージ** + +```markdown +Invalid clustering-key format. The clustering key must be in the format of 'column_name' or 'column_name ASC/DESC'. Table: %s; Clustering key: %s +``` + +### `CORE-10124` + +**メッセージ** + +```markdown +Columns must be specified. Table: %s +``` + +### `CORE-10125` + +**メッセージ** + +```markdown +Invalid column type. Table: %s; Column: %s; Type: %s +``` + +### `CORE-10126` + +**メッセージ** + +```markdown +The mutation type is not supported. Only the Put or Delete type is supported. Mutation: %s +``` + +### `CORE-10127` + +**メッセージ** + +```markdown +This condition is not allowed for the UpdateIf operation. Condition: %s +``` + +### `CORE-10128` + +**メッセージ** + +```markdown +Cross-partition scan with ordering is not supported in Cassandra +``` + +### `CORE-10129` + +**メッセージ** + +```markdown +Cross-partition scan with ordering is not supported in Cosmos DB +``` + +### `CORE-10130` + +**メッセージ** + +```markdown +Cross-partition scan with ordering is not supported in DynamoDB +``` + +### `CORE-10131` + +**メッセージ** + +```markdown +The directory '%s' does not have write permissions. Please ensure that the current user has write access to the directory. +``` + +### `CORE-10132` + +**メッセージ** + +```markdown +Failed to create the directory '%s'. Please check if you have sufficient permissions and if there are any file system restrictions. Details: %s +``` + +### `CORE-10133` + +**メッセージ** + +```markdown +Directory path cannot be null or empty. +``` + +### `CORE-10134` + +**メッセージ** + +```markdown +No file extension was found on the provided file name %s. +``` + +### `CORE-10135` + +**メッセージ** + +```markdown +Invalid file extension: %s. Allowed extensions are: %s +``` + +### `CORE-10136` + +**メッセージ** + +```markdown +Getting a transaction state is not supported in single CRUD operation transactions +``` + +### `CORE-10137` + +**メッセージ** + +```markdown +Rolling back a transaction is not supported in single CRUD operation transactions +``` + +### `CORE-10138` + +**メッセージ** + +```markdown +Multiple mutations are not supported in single CRUD operation transactions +``` + +### `CORE-10139` + +**メッセージ** + +```markdown +Beginning a transaction is not allowed in single CRUD operation transactions +``` + +### `CORE-10140` + +**メッセージ** + +```markdown +Resuming a transaction is not allowed in single CRUD operation transactions +``` + +### `CORE-10141` + +**メッセージ** + +```markdown +Using the group commit feature on the Coordinator table with a two-phase commit interface is not allowed +``` + +### `CORE-10142` + +**メッセージ** + +```markdown +This operation is supported only when no conditions are specified. If you want to modify a condition, please use clearConditions() to remove all existing conditions first +``` + +### `CORE-10145` + +**メッセージ** + +```markdown +The value of the column %s in the primary key contains an illegal character. Primary-key columns must not contain any of the following characters in Cosmos DB: ':', '/', '\', '#', '?'. Value: %s +``` + +## `CORE-2xxxx` ステータスコード + +### `CORE-20000` + +**メッセージ** + +```markdown +No mutation was applied +``` + +### `CORE-20001` + +**メッセージ** + +```markdown +Logging failed in the batch +``` + +### `CORE-20002` + +**メッセージ** + +```markdown +The operation failed in the batch with type %s +``` + +### `CORE-20003` + +**メッセージ** + +```markdown +An error occurred in the batch. Details: %s +``` + +### `CORE-20004` + +**メッセージ** + +```markdown +A Paxos phase in the CAS operation failed +``` + +### `CORE-20005` + +**メッセージ** + +```markdown +The learn phase in the CAS operation failed +``` + +### `CORE-20006` + +**メッセージ** + +```markdown +A simple write operation failed +``` + +### `CORE-20007` + +**メッセージ** + +```markdown +An error occurred in the mutation. Details: %s +``` + +### `CORE-20008` + +**メッセージ** + +```markdown +A RetryWith error occurred in the mutation. Details: %s +``` + +### `CORE-20009` + +**メッセージ** + +```markdown +A transaction conflict occurred in the mutation. Details: %s +``` + +### `CORE-20010` + +**メッセージ** + +```markdown +A transaction conflict occurred in the mutation. Details: %s +``` + +### `CORE-20011` + +**メッセージ** + +```markdown +A conflict occurred. Please try restarting the transaction. Details: %s +``` + +### `CORE-20012` + +**メッセージ** + +```markdown +The %s condition of the %s operation is not satisfied. Targeting column(s): %s +``` + +### `CORE-20013` + +**メッセージ** + +```markdown +The record being prepared already exists +``` + +### `CORE-20014` + +**メッセージ** + +```markdown +A conflict occurred when preparing records +``` + +### `CORE-20015` + +**メッセージ** + +```markdown +The committing state in the coordinator failed. The transaction has been aborted +``` + +### `CORE-20016` + +**メッセージ** + +```markdown +A conflict occurred during implicit pre-read +``` + +### `CORE-20017` + +**メッセージ** + +```markdown +This record needs to be recovered +``` + +### `CORE-20018` + +**メッセージ** + +```markdown +The record does not exist, so the %s condition is not satisfied +``` + +### `CORE-20019` + +**メッセージ** + +```markdown +The record exists, so the %s condition is not satisfied +``` + +### `CORE-20020` + +**メッセージ** + +```markdown +The condition on the column '%s' is not satisfied +``` + +### `CORE-20021` + +**メッセージ** + +```markdown +Reading empty records might cause a write skew anomaly, so the transaction has been aborted for safety purposes +``` + +### `CORE-20022` + +**メッセージ** + +```markdown +An anti-dependency was found. The transaction has been aborted +``` + +### `CORE-20023` + +**メッセージ** + +```markdown +A transaction conflict occurred in the Insert operation +``` + +### `CORE-20024` + +**メッセージ** + +```markdown +The %s condition of the %s operation is not satisfied. Targeting column(s): %s +``` + +### `CORE-20025` + +**メッセージ** + +```markdown +A transaction conflict occurred in the Insert operation +``` + +## `CORE-3xxxx` ステータスコード + +### `CORE-30000` + +**メッセージ** + +```markdown +Creating the namespace failed. Namespace: %s +``` + +### `CORE-30001` + +**メッセージ** + +```markdown +Dropping the namespace failed. Namespace: %s +``` + +### `CORE-30002` + +**メッセージ** + +```markdown +Creating the table failed. Table: %s +``` + +### `CORE-30003` + +**メッセージ** + +```markdown +Dropping the table failed. Table: %s +``` + +### `CORE-30004` + +**メッセージ** + +```markdown +Truncating the table failed. Table: %s +``` + +### `CORE-30005` + +**メッセージ** + +```markdown +Creating the index failed. Table: %s, Column: %s +``` + +### `CORE-30006` + +**メッセージ** + +```markdown +Dropping the index failed. Table: %s, Column: %s +``` + +### `CORE-30007` + +**メッセージ** + +```markdown +Getting the table metadata failed. Table: %s +``` + +### `CORE-30008` + +**メッセージ** + +```markdown +Getting the table names in the namespace failed. Namespace: %s +``` + +### `CORE-30009` + +**メッセージ** + +```markdown +Checking the namespace existence failed. Namespace: %s +``` + +### `CORE-30010` + +**メッセージ** + +```markdown +Checking the table existence failed. Table: %s +``` + +### `CORE-30011` + +**メッセージ** + +```markdown +Checking the index existence failed. Table: %s; Column: %s +``` + +### `CORE-30012` + +**メッセージ** + +```markdown +Repairing the namespace failed. Namespace: %s +``` + +### `CORE-30013` + +**メッセージ** + +```markdown +Repairing the table failed. Table: %s +``` + +### `CORE-30014` + +**メッセージ** + +```markdown +Adding a new column to the table failed. Table: %s; Column: %s; ColumnType: %s +``` + +### `CORE-30015` + +**メッセージ** + +```markdown +Getting the namespace names failed +``` + +### `CORE-30016` + +**メッセージ** + +```markdown +Getting the table metadata of the table being imported failed. Table: %s +``` + +### `CORE-30017` + +**メッセージ** + +```markdown +Importing the table failed. Table: %s +``` + +### `CORE-30018` + +**メッセージ** + +```markdown +Adding the raw column to the table failed. Table: %s; Column: %s; ColumnType: %s +``` + +### `CORE-30019` + +**メッセージ** + +```markdown +Upgrading the ScalarDB environment failed +``` + +### `CORE-30020` + +**メッセージ** + +```markdown +Something wrong because WriteType is neither CAS nor SIMPLE +``` + +### `CORE-30021` + +**メッセージ** + +```markdown +An error occurred in the selection. Details: %s +``` + +### `CORE-30022` + +**メッセージ** + +```markdown +An error occurred in the mutation. Details: %s +``` + +### `CORE-30023` + +**メッセージ** + +```markdown +An error occurred in the selection. Details: %s +``` + +### `CORE-30024` + +**メッセージ** + +```markdown +An error occurred in the mutation. Details: %s +``` + +### `CORE-30025` + +**メッセージ** + +```markdown +An error occurred in the selection. Details: %s +``` + +### `CORE-30026` + +**メッセージ** + +```markdown +An error occurred in the mutation. Details: %s +``` + +### `CORE-30027` + +**メッセージ** + +```markdown +An error occurred in the selection. Details: %s +``` + +### `CORE-30028` + +**メッセージ** + +```markdown +Fetching the next result failed +``` + +### `CORE-30029` + +**メッセージ** + +```markdown +Rolling back the transaction failed. Details: %s +``` + +### `CORE-30030` + +**メッセージ** + +```markdown +Committing the transaction failed. Details: %s +``` + +### `CORE-30031` + +**メッセージ** + +```markdown +The Get operation failed. Details: %s +``` + +### `CORE-30032` + +**メッセージ** + +```markdown +The Scan operation failed. Details: %s +``` + +### `CORE-30033` + +**メッセージ** + +```markdown +The Put operation failed. Details: %s +``` + +### `CORE-30034` + +**メッセージ** + +```markdown +The Delete operation failed. Details: %s +``` + +### `CORE-30035` + +**メッセージ** + +```markdown +Beginning a transaction failed. Details: %s +``` + +### `CORE-30036` + +**メッセージ** + +```markdown +Preparing records failed +``` + +### `CORE-30037` + +**メッセージ** + +```markdown +Validation failed +``` + +### `CORE-30038` + +**メッセージ** + +```markdown +Executing implicit pre-read failed +``` + +### `CORE-30039` + +**メッセージ** + +```markdown +Reading a record from the underlying storage failed +``` + +### `CORE-30040` + +**メッセージ** + +```markdown +Scanning records from the underlying storage failed +``` + +### `CORE-30041` + +**メッセージ** + +```markdown +Rollback failed because the transaction has already been committed +``` + +### `CORE-30042` + +**メッセージ** + +```markdown +Rollback failed +``` + +### `CORE-30043` + +**メッセージ** + +```markdown +The Insert operation failed. Details: %s +``` + +### `CORE-30044` + +**メッセージ** + +```markdown +The Upsert operation failed. Details: %s +``` + +### `CORE-30045` + +**メッセージ** + +```markdown +The Update operation failed. Details: %s +``` + +## `CORE-4xxxx` ステータスコード + +### `CORE-40000` + +**メッセージ** + +```markdown +Rolling back the transaction failed. Details: %s +``` + +### `CORE-40001` + +**メッセージ** + +```markdown +Committing state failed with NoMutationException, but the coordinator status does not exist +``` + +### `CORE-40002` + +**メッセージ** + +```markdown +The state cannot be retrieved +``` + +### `CORE-40003` + +**メッセージ** + +```markdown +The coordinator status is unknown +``` + +### `CORE-40004` + +**メッセージ** + +```markdown +Aborting state failed with NoMutationException, but the coordinator status does not exist +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/how-to-run-two-phase-commit-transaction.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/how-to-run-two-phase-commit-transaction.mdx new file mode 100644 index 00000000..818a7a8c --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/how-to-run-two-phase-commit-transaction.mdx @@ -0,0 +1,144 @@ +--- +tags: + - Enterprise Premium +--- + +# 2 フェーズコミットトランザクションを実行する方法 + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +ScalarDB GraphQL は、[2 フェーズコミットトランザクション](../two-phase-commit-transactions.mdx)と呼ばれるトランザクションをサポートしています。 +2 フェーズコミットトランザクションを使用すると、複数のプロセス/アプリケーション (マイクロサービスなど) にまたがるトランザクションを実行できます。 +トランザクションを開始するアプリケーションを「コーディネーター」と名付け、トランザクションに参加するアプリケーションを「参加者」と名付けます。 +すべての 2 フェーズコミット操作では、ミューテーションまたはクエリ操作に `@twoPhaseCommit` ディレクティブをアノテーションする必要があります。以下は、このような操作の説明です。 + +## トランザクションを開始する + +トランザクションを開始するには、パラメータを設定せずに `@twoPhaseCommit` ディレクティブを追加します。 + +```graphql +query some_query @twoPhaseCommit { + # some query +} +``` + +開始されたトランザクションのトランザクション ID は、結果の一部である拡張オブジェクトで返されます。 + +```json +{ + "data": { + ... + }, + "extensions": { + "transaction": { + "id": "the_transaction_id" + } + } +} +``` + +## トランザクションに参加する (参加者用) + +参加者アプリケーションで、コーディネーターアプリケーションによって開始されたトランザクションに参加するには、トランザクション ID を `id` パラメータで設定し、`join` パラメータを true に設定します。 + +```graphql +query some_query_from_participant @twoPhaseCommit(id:"the_transaction_id", join:true) { + # some query +} +``` + +## トランザクションを再開する + +開始または結合されたトランザクションで操作の実行を継続するには、`@twoPhaseCommit` ディレクティブの `id` パラメータにトランザクション ID 値を設定します。 + +```graphql +mutation some_mutation @twoPhaseCommit(id:"the_transaction_id") { + # some mutation +} +``` + +## トランザクションの準備、検証、コミット + +クエリと変更操作が完了したら、トランザクションをコミットする必要があります。 + +よく知られている 2 フェーズコミットプロトコルと同様に、準備とコミットの 2 つのフェーズがあります。 + +まず、すべてのコーディネータ/参加者アプリケーションでトランザクションを準備し、次にすべてのコーディネータ/参加者アプリケーションでトランザクションをコミットする必要があります。 + +Consensus Commit トランザクションマネージャーが `SERIALIZABLE` 分離レベルで `EXTRA_READ` シリアル化可能戦略を使用して設定されている場合、準備フェーズとコミットフェーズの間に追加の「検証」フェーズが必要です。 + +準備とコミットと同様に、検証はすべてのコーディネータ/参加者アプリケーションで実行する必要があります。 + +準備、検証、コミットは、すべてのコーディネータ/参加者アプリケーションで並行して実行できます。 + +### トランザクションを準備する + +2 フェーズコミットトランザクションを準備するには、2 つのオプションがあります。 + +#### ディレクティブパラメータ経由 + +ディレクティブの `prepare` パラメータを使用すると、操作フィールドの実行後に、エラーが発生しない場合にのみトランザクションが準備されます。 + +```graphql +mutation some_mutation_then_prepare_tx @twoPhaseCommit(id:"the_transaction_id", prepare:true) { + mutation1 : ... + mutation2 : ... + # the transaction will be prepared after the execution of the mutation1 and mutation2 fields +} +``` + +#### ミューテーションフィールド経由 + +ミューテーション操作に `prepare` フィールドを追加します。このフィールドはトランザクションの準備を開始します。 + +```graphql +mutation prepare_tx @twoPhaseCommit(id:"the_transaction_id") { + prepare +} +``` + +### トランザクションを検証する + +ミューテーション操作に `validate` フィールドを追加します。このフィールドはトランザクションの検証をトリガーします。 + +```graphql +mutation validate_tx @twoPhaseCommit(id:"the_transaction_id") { + validate +} +``` + +### トランザクションをコミットする + +ミューテーション操作に `commit` フィールドを追加します。このフィールドはトランザクションのコミットをトリガーします。 + +```graphql +mutation commit_tx @twoPhaseCommit(id:"the_transaction_id") { + commit +} +``` + +### トランザクションのアボート/ロールバック + +トランザクションを明示的にアボート/ロールバックする必要がある場合は、`abort` または `rollback` ミューテーションフィールドを互換的に使用できます (どちらも効果と使用法は同じです)。他の操作と混在させることはできないため、単独で指定する必要があります。 + +```graphql +mutation AbortTx @twoPhaseCommit(id: "the_transaction_id") { + abort +} +``` + +または + +```graphql +mutation RollbackTx @twoPhaseCommit(id: "the_transaction_id") { + rollback +} +``` + +## エラー処理 + +`@twoPhaseCommit` 操作によって例外がスローされた場合、ScalarDB GraphQL はトランザクションを回復するロールバックプロシージャをトリガーします。 +2 フェーズコミットトランザクションでの例外処理の詳細については、 +[ScalarDB 2 フェーズコミットトランザクションの例外処理ガイド](../two-phase-commit-transactions.mdx#handle-exceptions) を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/scalardb-graphql-status-codes.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/scalardb-graphql-status-codes.mdx new file mode 100644 index 00000000..480e58ff --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-graphql/scalardb-graphql-status-codes.mdx @@ -0,0 +1,244 @@ +--- +tags: + - Enterprise Premium +--- + +# ScalarDB GraphQL エラーコード + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このページでは、ScalarDB GraphQL のエラーコードの一覧を示します。 + +## エラーコードのクラスと説明 + +| クラス | 説明 | +|:----------------|:--------------------------| +| `GRAPHQL-1xxxx` | ユーザーエラーカテゴリのエラー | + +## `GRAPHQL-1xxxx` ステータスコード + +### `GRAPHQL-10000` + +**メッセージ** + +```markdown +A long value was expected +``` + +### `GRAPHQL-10001` + +**メッセージ** + +```markdown +The value is out of range for BigIntValue +``` + +### `GRAPHQL-10002` + +**メッセージ** + +```markdown +A long, integer, or string value was expected +``` + +### `GRAPHQL-10003` + +**メッセージ** + +```markdown +The AST type `IntValue` was expected +``` + +### `GRAPHQL-10004` + +**メッセージ** + +```markdown +A float value was expected +``` + +### `GRAPHQL-10005` + +**メッセージ** + +```markdown +An integer or float value was expected +``` + +### `GRAPHQL-10006` + +**メッセージ** + +```markdown +The AST type `IntValue` or `FloatValue` was expected +``` + +### `GRAPHQL-10007` + +**メッセージ** + +```markdown +The type is not supported. Type: %s +``` + +### `GRAPHQL-10008` + +**メッセージ** + +```markdown +The field `%s` requires a `@transaction` or `@twoPhaseCommit` directive with proper arguments +``` + +### `GRAPHQL-10009` + +**メッセージ** + +```markdown +The field `%s` cannot be used together with other fields +``` + +### `GRAPHQL-10010` + +**メッセージ** + +```markdown +The `@twoPhaseCommit` directive with the `id` argument is required to `%s` the transaction +``` + +### `GRAPHQL-10011` + +**メッセージ** + +```markdown +`%s` and `prepare` cannot be run simultaneously +``` + +### `GRAPHQL-10012` + +**メッセージ** + +```markdown +`%s` and `join` cannot be run simultaneously +``` + +### `GRAPHQL-10013` + +**メッセージ** + +```markdown +The `@transaction` directive with the `id` argument is required to `%s` the transaction +``` + +### `GRAPHQL-10014` + +**メッセージ** + +```markdown +`%s` and `commit` cannot be run simultaneously +``` + +### `GRAPHQL-10015` + +**メッセージ** + +```markdown +An object cannot be annotated with both `@transaction` and `@twoPhaseCommit` directives +``` + +### `GRAPHQL-10016` + +**メッセージ** + +```markdown +The `join` argument of the `@twoPhaseCommit` directive requires a transaction `id` argument +``` + +### `GRAPHQL-10017` + +**メッセージ** + +```markdown +`%s` requires the mutation object to be annotated with a `@twoPhaseCommit` directive +``` + +### `GRAPHQL-10018` + +**メッセージ** + +```markdown +The `%s` clustering key must have only one of the following: %s +``` + +### `GRAPHQL-10019` + +**メッセージ** + +```markdown +A string variable is expected but got %s +``` + +### `GRAPHQL-10020` + +**メッセージ** + +```markdown +Unexpected value of id: %s +``` + +### `GRAPHQL-10021` + +**メッセージ** + +```markdown +A Boolean variable is expected but got %s +``` + +### `GRAPHQL-10022` + +**メッセージ** + +```markdown +Unexpected value of %s: %s +``` + +### `GRAPHQL-10023` + +**メッセージ** + +```markdown +Invalid column. Column: %s; Type: %s +``` + +### `GRAPHQL-10024` + +**メッセージ** + +```markdown +Unexpected value of type: %s +``` + +### `GRAPHQL-10025` + +**メッセージ** + +```markdown +Only one of the following can be specified: %s +``` + +### `GRAPHQL-10026` + +**メッセージ** + +```markdown +Unexpected mutation field: %s +``` + +### `GRAPHQL-10027` + +**メッセージ** + +```markdown +Invalid type: %s +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/README.mdx new file mode 100644 index 00000000..542c1b4e --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/README.mdx @@ -0,0 +1,21 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# ScalarDB サンプル + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +以下は ScalarDB のサンプルアプリケーションです: + +- [マルチストレージトランザクションサンプル](multi-storage-transaction-sample/README.mdx) +- [マイクロサービストランザクションサンプル](microservice-transaction-sample/README.mdx) +- [ScalarDB Analytics with PostgreSQL](scalardb-analytics-postgresql-sample/README.mdx) +- [ScalarDB Analytics with Spark](scalardb-analytics-spark-sample/README.mdx) +- [マルチストレージトランザクションサンプルを使用した Spring Data JDBC for ScalarDB](spring-data-multi-storage-transaction-sample/README.mdx) +- [マイクロサービストランザクションサンプルを使用した Spring Data JDBC for ScalarDB](spring-data-microservice-transaction-sample/README.mdx) diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/README.mdx new file mode 100644 index 00000000..33f3908d --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/README.mdx @@ -0,0 +1,537 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# マイクロサービストランザクションをサポートするサンプルアプリケーションを作成する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、ScalarDB でマイクロサービストランザクションをサポートするサンプルアプリケーションを作成する方法について説明します。 + +## 概要 + +このチュートリアルでは、ScalarDB の [2 フェーズコミットインターフェースを使用したトランザクション](../../two-phase-commit-transactions.mdx)を通じてアイテムを注文し、信用枠で支払いを行うことができるサンプル電子商取引アプリケーションを作成するプロセスを示します。 + +サンプルアプリケーションには、[database-per-service pattern](https://microservices.io/patterns/data/database-per-service.html) に基づく *Customer Service* と *Order Service* という 2 つのマイクロサービスがあります。 + +- **Customer Service** は、信用枠情報、信用限度額、信用合計などの顧客情報を管理します。 +- **Order Service** は、注文の確定や注文履歴の取得などの注文操作を担当します。 + +各サービスには gRPC エンドポイントがあります。クライアントはエンドポイントを呼び出し、サービスも各エンドポイントを呼び出します。 + +サンプルアプリケーションで使用するデータベースは Cassandra と MySQL です。 Customer Service と Order Service は、それぞれ ScalarDB を介して Cassandra と MySQL を使用します。 + +![概要](images/overview.png) + +図に示されているように、両方のサービスは、Consensus Commit プロトコルに使用される小さな Coordinator データベースにアクセスします。データベースはサービスに依存せず、Consensus Commit のトランザクションメタデータを高可用性の方法で管理するために存在します。 + +サンプルアプリケーションでは、セットアップと説明を簡単にするために、Coordinator データベースを Order Service の同じ Cassandra インスタンスに共存させています。または、Coordinator データベースを別のデータベースとして管理することもできます。 + +:::note + +サンプルアプリケーションは ScalarDB の使用方法を示すことに重点を置いているため、アプリケーション固有のエラー処理、認証処理、および同様の機能はサンプルアプリケーションに含まれていません。ScalarDB での例外処理の詳細については、[例外の処理方法](../../api-guide.mdx#例外の処理方法)を参照してください。 + +さらに、サンプルアプリケーションの目的上、各サービスには 1 つのコンテナがあるため、サービス間のリクエストルーティングは不要です。ただし、実稼働環境では、スケーラビリティと可用性のために各サービスに複数のサーバーまたはホストがあるため、2 フェーズコミットインターフェイスを使用したトランザクションでは、サービス間のリクエストルーティングを検討する必要があります。要求ルーティングの詳細については、[2 フェーズコミットインターフェイスを使用したトランザクションでのリクエストルーティング](../../two-phase-commit-transactions.mdx#2-フェーズコミットインターフェイスを使用したトランザクションでのリクエストルーティング) を参照してください。 + +::: + +### サービスエンドポイント + +サービスで定義されているエンドポイントは次のとおりです。 + +- Customer Service + - `getCustomerInfo` + - `payment` + - `prepare` + - `validate` + - `commit` + - `rollback` + - `repayment` + +- Order Service + - `placeOrder` + - `getOrder` + - `getOrders` + +### このサンプルアプリケーションで実行できること + +サンプルアプリケーションは、次の種類のトランザクションをサポートしています。 + +- Customer Service の `getCustomerInfo` エンドポイントを介して顧客情報を取得します。 +- Order Service の `placeOrder` エンドポイントと、Customer Service の `payment`、`prepare`、`validate`、`commit`、`rollback` エンドポイントを介して、信用枠を使用して注文を行います。 + - 注文のコストが顧客の信用限度額を下回っているかどうかを確認します。 + - チェックに合格した場合、注文履歴を記録し、顧客が支払った金額を更新します。 +- Order Service の `getOrder` エンドポイントと、Customer Service の `getCustomerInfo`、`prepare`、`validate`、`commit`、`rollback` エンドポイントを介して、注文 ID で注文情報を取得します。 +- Order Service の `getOrders` エンドポイントと、Customer Service の `getCustomerInfo`、`prepare`、`validate`、`commit`、`rollback` エンドポイントを介して、顧客 ID で注文情報を取得します。 +- Customer Service の `repayment` エンドポイントを介して支払いを行います。 + - 顧客が支払った金額を減らします。 + +:::note + +`getCustomerInfo` エンドポイントは、コーディネーターからトランザクション ID を受信するときに、参加者サービスエンドポイントとして機能します。 + +::: + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- [Docker](https://www.docker.com/get-started/) 20.10 以降 ([Docker Compose](https://docs.docker.com/compose/install/) V2 以降) + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../../requirements.mdx)を参照してください。 + +::: + +## ScalarDB のセットアップ + +次のセクションでは、ScalarDB でマイクロサービストランザクションをサポートするサンプルアプリケーションをセットアップする方法について説明します。 + +### ScalarDB サンプルリポジトリをクローンする + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリをクローンします。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/microservice-transaction-sample +``` + +### CassandraとMySQLを起動する + +Cassandra と MySQL は、それぞれ [`database-cassandra.properties`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/database-cassandra.properties) と [`database-mysql.properties`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/database-mysql.properties) に示されているように、サンプルアプリケーション用にすでに設定されています。ScalarDB でのマルチストレージトランザクション機能の設定の詳細については、[マルチストレージトランザクションをサポートするように ScalarDB を設定する方法](../../multi-storage-transactions.mdx#マルチストレージトランザクションをサポートするように-scalardb-を設定する方法)を参照してください。 + +サンプルアプリケーションの Docker コンテナに含まれている Cassandra と MySQL を起動するには、次のコマンドを実行します。 + +```console +docker-compose up -d mysql cassandra +``` + +:::note + +開発環境によっては、Docker コンテナの起動に 1 分以上かかる場合があります。 + +::: + +### スキーマをロードします + +サンプルアプリケーションのデータベーススキーマ (データを整理する方法) は、Customer Service の場合は [`customer-service-schema.json`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service-schema.json)、Order Service の場合は [`order-service-schema.json`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service-schema.json) で既に定義されています。 + +スキーマを適用するには、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases)ページに移動し、使用する ScalarDB のバージョンに一致する ScalarDB スキーマローダーを `scalardb-samples/microservice-transaction-sample` フォルダーにダウンロードします。 + +#### MySQL + +[`customer-service-schema.json`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service-schema.json) のスキーマを MySQL にロードするには、次のコマンドを実行します。`` は、ダウンロードした ScalarDB Schema Loader のバージョンに置き換えます。 + +```console +java -jar scalardb-schema-loader-.jar --config database-mysql.properties --schema-file customer-service-schema.json +``` + +#### Cassandra + +[`order-service-schema.json`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service-schema.json) のスキーマを Cassandra にロードするには、次のコマンドを実行します。`` は、ダウンロードした ScalarDB Schema Loader のバージョンに置き換えます。 + +```console +java -jar scalardb-schema-loader-.jar --config database-cassandra.properties --schema-file order-service-schema.json --coordinator +``` + +#### Schema details + +[`customer-service-schema.json`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service-schema.json) に示されているように、Customer Service のすべてのテーブルは `customer_service` 名前空間に作成されます。 + +- `customer_service.customers`: 顧客の情報を管理するテーブル + - `credit_limit`: 貸し手が各顧客に信用枠の使用を許可する最大金額 + - `credit_total`: 各顧客が信用枠を使用してすでに使用した金額 + +[`order-service-schema.json`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service-schema.json) に示されているように、Order Service のすべてのテーブルは `order_service` 名前空間に作成されます。 + +- `order_service.orders`: 注文情報を管理するテーブル +- `order_service.statements`: 注文明細情報を管理するテーブル +- `order_service.items`: 注文する商品の情報を管理するテーブル + +スキーマのエンティティリレーションシップダイアグラムは次のとおりです。 + +![ERD](images/ERD.png) + +### マイクロサービスを起動して初期データをロードします + +マイクロサービスを起動する前に、次のコマンドを実行してサンプルアプリケーションの Docker イメージをビルドします。 + +```console +./gradlew docker +``` + +次に、次のコマンドを実行してマイクロサービスを起動します。 + +```console +docker-compose up -d customer-service order-service +``` + +マイクロサービスを起動し、初期データが読み込まれた後、次のレコードが `customer_service.customers` テーブルに保存されるはずです。 + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +そして、次のレコードが `order_service.items` テーブルに保存される必要があります。 + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## サンプルアプリケーションでトランザクションを実行し、データを取得する + +次のセクションでは、サンプル電子商取引アプリケーションでトランザクションを実行し、データを取得する方法について説明します。 + +### 顧客情報を取得する + +次のコマンドを実行して、ID が `1` である顧客に関する情報を取得することから始めます。 + +```console +./gradlew :client:run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。 + +```console +... +{"id": 1,"name": "Yamada Taro","credit_limit": 10000} +... +``` + +この時点では、`credit_total` は表示されません。つまり、`credit_total` の現在の値は `0` です。 + +### 注文する + +次に、次のコマンドを実行して、顧客 ID `1` にリンゴ 3 個とオレンジ 2 個を注文してもらいます。 + +:::note + +このコマンドの注文形式は `./gradlew run --args="PlaceOrder :,:,..."` です。 + +::: + +```console +./gradlew :client:run --args="PlaceOrder 1 1:3,2:2" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す出力が表示されます。 + +```console +... +{"order_id": "4ccdb21c-ac03-4b48-bcb7-cad57eac1e79"} +... +``` + +### 注文の詳細を確認する + +次のコマンドを実行して注文の詳細を確認します。`` は、前のコマンドを実行した後に表示される `order_id` の UUID に置き換えます。 + +```console +./gradlew :client:run --args="GetOrder " +``` + +`order_id` と `timestamp` の UUID が異なる、以下のような出力が表示されます。 + +```console +... +{"order": {"order_id": "4ccdb21c-ac03-4b48-bcb7-cad57eac1e79","timestamp": 1631605253126,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}} +... +``` + +### 別の注文をする + +次のコマンドを実行して、顧客 ID `1` の `credit_total` の残額を使用してメロン 1 個を注文します。 + +```console +./gradlew :client:run --args="PlaceOrder 1 5:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す出力が表示されます。 + +```console +... +{"order_id": "0b10db66-faa6-4323-8a7a-474e8534a7ee"} +... +``` + +### 注文履歴を確認する + +次のコマンドを実行して、顧客 ID `1` のすべての注文履歴を取得します。 + +```console +./gradlew :client:run --args="GetOrders 1" +``` + +`order_id` と `timestamp` の UUID が異なる以下のような出力が表示されます。これは、顧客 ID `1` のすべての注文履歴をタイムスタンプの降順で表示します。 + +```console +... +{"order": [{"order_id": "0b10db66-faa6-4323-8a7a-474e8534a7ee","timestamp": 1631605501485,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 5,"item_name": "Melon","price": 3000,"count": 1,"total": 3000}],"total": 3000},{"order_id": "4ccdb21c-ac03-4b48-bcb7-cad57eac1e79","timestamp": 1631605253126,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}]} +... +``` + +### クレジット合計の確認 + +次のコマンドを実行して、顧客 ID `1` のクレジット合計を取得します。 + +```console +./gradlew :client:run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` が `credit_total` の `credit_limit` に達しており、これ以上注文できないことを示しています。 + +```console +... +{"id": 1,"name": "Yamada Taro","credit_limit": 10000,"credit_total": 10000} +... +``` + +次のコマンドを実行して、ブドウ 1 個とマンゴー 1 個を注文してみます。 + +```console +./gradlew :client:run --args="PlaceOrder 1 3:1,4:1" +``` + +次の出力が表示されます。これは、`credit_total` 金額が `credit_limit` 金額を超えたために注文が失敗したことを示しています。 + +```console +... +io.grpc.StatusRuntimeException: FAILED_PRECONDITION: Credit limit exceeded + at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:271) + at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:252) + at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:165) + at sample.rpc.OrderServiceGrpc$OrderServiceBlockingStub.placeOrder(OrderServiceGrpc.java:296) + at sample.client.command.PlaceOrderCommand.call(PlaceOrderCommand.java:38) + at sample.client.command.PlaceOrderCommand.call(PlaceOrderCommand.java:12) + at picocli.CommandLine.executeUserObject(CommandLine.java:2041) + at picocli.CommandLine.access$1500(CommandLine.java:148) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + at picocli.CommandLine.execute(CommandLine.java:2170) + at sample.client.Client.main(Client.java:39) +... +``` + +### 支払いを行う + +注文を続行するには、顧客 ID `1` が支払いを行って `credit_total` の金額を減らす必要があります。 + +次のコマンドを実行して支払いを行います。 + +```console +./gradlew :client:run --args="Repayment 1 8000" +``` + +次に、次のコマンドを実行して、顧客 ID `1` の `credit_total` 金額を確認します。 + +```console +./gradlew :client:run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` に支払いが適用され、`credit_total` の金額が減ったことを示しています。 + +```console +... +{"id": 1,"name": "Yamada Taro","credit_limit": 10000,"credit_total": 2000} +... +``` + +顧客 ID `1` が支払いを済ませたので、次のコマンドを実行してブドウ 1 個とメロン 1 個を注文します。 + +```console +./gradlew :client:run --args="PlaceOrder 1 3:1,4:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す出力が表示されます。 + +```console +... +{"order_id": "dd53dd9d-aaf4-41db-84b2-56951fed6425"} +... +``` + +## サンプルアプリケーションを停止する + +サンプルアプリケーションを停止するには、Cassandra、MySQL、およびマイクロサービスを実行している Docker コンテナを停止する必要があります。Docker コンテナを停止するには、次のコマンドを実行します。 + +```console +docker-compose down +``` + +## リファレンス - マイクロサービストランザクションの実現方法 + +注文、単一注文の取得、注文履歴の取得のトランザクションは、マイクロサービストランザクションを実現します。このセクションでは、注文を例に、Customer Service と Order Service にまたがるトランザクションの実装方法に焦点を当てます。 + +次のシーケンス図は、注文を行うトランザクションを示しています。 + +![マイクロサービストランザクションシーケンス図](images/sequence_diagram.png) + +### 1. 2 フェーズコミットインターフェースを使用したトランザクションが開始されます + +クライアントが Order Service に注文リクエストを送信すると、`OrderService.placeOrder()` が呼び出され、マイクロサービストランザクションが開始されます。 + +最初に、Order Service は次のように `start()` を使用して 2 フェーズコミットインターフェースを使用したトランザクションを開始します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +transaction = twoPhaseCommitTransactionManager.start(); +``` + +### 2. CRUD 操作が実行されます + +2 フェーズコミットインターフェースを使用したトランザクションが開始されると、CRUD 操作が実行されます。Order Service は、次のように、注文情報を `order_service.orders` テーブルに、詳細情報を `order_service.statements` テーブルに格納します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +// Put the order info into the `orders` table. +Order.put(transaction, orderId, request.getCustomerId(), System.currentTimeMillis()); + +int amount = 0; +for (ItemOrder itemOrder : request.getItemOrderList()) { + // Put the order statement into the `statements` table. + Statement.put(transaction, orderId, itemOrder.getItemId(), itemOrder.getCount()); + + // Retrieve the item info from the `items` table. + Optional item = Item.get(transaction, itemOrder.getItemId()); + if (!item.isPresent()) { + responseObserver.onError( + Status.NOT_FOUND.withDescription("Item not found").asRuntimeException()); + return; + } + + // Calculate the total amount. + amount += item.get().price * itemOrder.getCount(); +} +``` + +次に、Order Service は、トランザクション ID とともに Customer Service の `payment` gRPC エンドポイントを呼び出します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +customerServiceStub.payment( + PaymentRequest.newBuilder() + .setTransactionId(transactionId) + .setCustomerId(customerId) + .setAmount(amount) + .build()); +``` + +Customer Service の `payment` エンドポイントは、まず次のように `join()` を使用してトランザクションを結合します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +private void execOperationsAsParticipant(String funcName, String transactionId, + TransactionFunction operations, + StreamObserver responseObserver) { + try { + // Join the transaction + TwoPhaseCommitTransaction transaction = twoPhaseCommitTransactionManager.join(transactionId); + + // Execute operations + T response = operations.apply(transaction); +``` + +次に、エンドポイントは顧客情報を取得し、支払い後に顧客のクレジット合計がクレジット限度額を超えているかどうかを確認します。クレジット合計がクレジット限度額を超えていない場合、エンドポイントは顧客のクレジット合計を更新します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +execOperationsAsParticipant("Payment", request.getTransactionId(), + transaction -> { + // Retrieve the customer info for the customer ID + Optional result = Customer.get(transaction, request.getCustomerId()); + if (!result.isPresent()) { + throw Status.NOT_FOUND.withDescription("Customer not found").asRuntimeException(); + } + + int updatedCreditTotal = result.get().creditTotal + request.getAmount(); + + // Check if the credit total exceeds the credit limit after payment + if (updatedCreditTotal > result.get().creditLimit) { + throw Status.FAILED_PRECONDITION + .withDescription("Credit limit exceeded") + .asRuntimeException(); + } + + // Update `credit_total` for the customer + Customer.updateCreditTotal(transaction, request.getCustomerId(), updatedCreditTotal); + + return Empty.getDefaultInstance(); + }, responseObserver +); +``` + +### 3. 2 フェーズコミットプロトコルを使用してトランザクションがコミットされます + +Order Service は、支払いが成功したという更新を受信すると、トランザクションをコミットしようとします。 + +トランザクションをコミットするために、Order Service はトランザクションの準備から始めます。Order Service は、トランザクションオブジェクトから `prepare()` を呼び出し、Customer Service の `prepare` gRPC エンドポイントを呼び出します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +transaction.prepare(); +callPrepareEndpoint(transaction.getId()); +``` + +このエンドポイントでは、Customer Service がトランザクションを再開し、トランザクションオブジェクトから `prepare()` も呼び出します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +// Resume the transaction. +transaction = twoPhaseCommitTransactionManager.resume(request.getTransactionId()); + +// Prepare the transaction. +transaction.prepare(); +``` + +同様に、Order Service と Customer Service は、トランザクションオブジェクトから `validate()` を呼び出します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) と [`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。`validate()` の詳細については、[トランザクションの検証](../../two-phase-commit-transactions.mdx#トランザクションの検証)を参照してください。 + +Order Service と Customer Service の両方でトランザクションの準備と検証が成功したら、トランザクションをコミットできます。この場合、Order Service はトランザクションオブジェクトから `commit()` を呼び出し、次に Customer Service の `commit` gRPC エンドポイントを呼び出します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +transaction.commit(); +callCommitEndpoint(transaction.getId()); +``` + +このエンドポイントでは、Customer Service がトランザクションを再開し、トランザクションオブジェクトから `commit()` も呼び出します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +// Resume the transaction. +transaction = twoPhaseCommitTransactionManager.resume(request.getTransactionId()); + +// Commit the transaction. +transaction.commit(); +``` + +### エラー処理 + +トランザクションの実行中にエラーが発生した場合は、トランザクションをロールバックする必要があります。この場合、Order Service はトランザクションオブジェクトから `rollback()` を呼び出し、次に Customer Service の `rollback` gRPC エンドポイントを呼び出します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +transaction.rollback(); +callRollbackEndpoint(transaction.getId()); +``` + +このエンドポイントでは、Customer Service がトランザクションを再開し、トランザクションオブジェクトから `rollback()` も呼び出します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +// Resume the transaction. +TwoPhaseCommitTransaction transaction = + twoPhaseCommitTransactionManager.resume(request.getTransactionId()); + +// Roll back the transaction. +transaction.rollback(); +``` + +ScalarDB で例外を処理する方法の詳細については、[例外の処理方法](../../api-guide.mdx#例外の処理方法)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/ERD.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/ERD.png new file mode 100644 index 0000000000000000000000000000000000000000..c0468efa7251809e62238d14f84007bfc0b363b7 GIT binary patch literal 10993 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 T!495n3IK|-A7nu9Og{fNI)qZK literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/overview.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/microservice-transaction-sample/images/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..4340b4f5a8db6b7f532a007244c109ad2a603c1d GIT binary patch literal 50911 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%0A31mA^BD7EzI*07PZJUtVFjX3R-9Rwj! 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 A+yDRo literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/README.mdx new file mode 100644 index 00000000..999ea4f5 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/README.mdx @@ -0,0 +1,317 @@ +--- +tags: + - Community + - Enterprise Standard + - Enterprise Premium +--- + +# マルチストレージトランザクションをサポートするサンプルアプリケーションを作成する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、ScalarDB のマルチストレージトランザクション機能をサポートするサンプルアプリケーションを作成する方法について説明します。 + +## 概要 + +このチュートリアルでは、ScalarDB の[マルチストレージトランザクション](../../multi-storage-transactions.mdx)機能を使用して、アイテムを注文し、信用枠で支払うことができるサンプル電子商取引アプリケーションを作成するプロセスを示します。 + +このチュートリアルでは、Cassandra と MySQL の両方を使用するアプリケーションを構築します。ScalarDB のマルチストレージトランザクション機能を使用すると、Cassandra と MySQL の両方にまたがるトランザクションを実行できます。 + +![概要](images/overview.png) + +:::note + +サンプルアプリケーションは ScalarDB の使用方法を示すことに重点を置いているため、アプリケーション固有のエラー処理、認証処理、および同様の機能はサンプルアプリケーションに含まれていません。ScalarDB での例外処理の詳細については、[例外の処理方法](../../api-guide.mdx#例外の処理方法)を参照してください。 + +::: + +### このサンプルアプリケーションで実行できること + +サンプルアプリケーションは、次の種類のトランザクションをサポートしています: + +- 顧客情報を取得します。 +- 信用枠を使用して注文を行います。 + - 注文のコストが顧客の信用限度額を下回っているかどうかを確認します。 + - チェックが成功した場合は、注文履歴を記録し、顧客が支払った金額を更新します。 +- 注文 ID で注文情報を取得します。 +- 顧客 ID で注文情報を取得します。 +- 支払いを行います。 + - 顧客が支払った金額を減らします。 + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- [Docker](https://www.docker.com/get-started/) 20.10 以降 ([Docker Compose](https://docs.docker.com/compose/install/) V2 以降) + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../../requirements.mdx)を参照してください。 + +::: + +## ScalarDB のセットアップ + +次のセクションでは、ScalarDB のマルチストレージトランザクション機能をサポートするサンプルアプリケーションをセットアップする方法について説明します。 + +### ScalarDB サンプルリポジトリをクローンする + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリをクローンします。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/multi-storage-transaction-sample +``` + +### Cassandra と MySQL を起動します + +[`database.properties`](https://github.com/scalar-labs/scalardb-samples/tree/master/multi-storage-transaction-sample/database.properties) に示されているように、Cassandra と MySQL はサンプルアプリケーション用にすでに設定されています。ScalarDB のマルチストレージトランザクション機能の設定の詳細については、[マルチストレージトランザクションをサポートするように ScalarDB を設定する方法](../../multi-storage-transactions.mdx#マルチストレージトランザクションをサポートするように-scalardb-を設定する方法)を参照してください。 + +サンプルアプリケーションの Docker コンテナに含まれている Cassandra と MySQL を起動するには、Docker が実行されていることを確認してから、次のコマンドを実行します。 + +```console +docker-compose up -d +``` + +:::note + +開発環境によっては、Docker コンテナの起動に 1 分以上かかる場合があります。 + +::: + +### スキーマをロードする + +サンプルアプリケーションのデータベーススキーマ (データを整理する方法) は、すでに [`schema.json`](https://github.com/scalar-labs/scalardb-samples/tree/master/multi-storage-transaction-sample/schema.json) で定義されています。 + +スキーマを適用するには、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases)ページに移動し、使用する ScalarDB のバージョンに一致する ScalarDB Schema Loader を `scalardb-samples/multi-storage-transaction-sample` フォルダーにダウンロードします。 + +次に、次のコマンドを実行します。`` は、ダウンロードした ScalarDB Schema Loader のバージョンに置き換えます。 + +```console +java -jar scalardb-schema-loader-.jar --config database.properties --schema-file schema.json --coordinator +``` + +#### スキーマの詳細 + +サンプルアプリケーションの [`schema.json`](https://github.com/scalar-labs/scalardb-samples/tree/master/multi-storage-transaction-sample/schema.json) に示されているように、すべてのテーブルは `customer` および `order` 名前空間に作成されます。 + +- `customer.customers`: 顧客の情報を管理するテーブル + - `credit_limit`: 貸し手が各顧客に信用枠の使用を許可する最大金額 + - `credit_total`: 各顧客が信用枠を使用してすでに使用した金額 +- `order.orders`: 注文情報を管理するテーブル +- `order.statements`: 注文明細情報を管理するテーブル +- `order.items`: 注文するアイテムの情報を管理するテーブル + +スキーマのエンティティリレーションシップダイアグラムは次のとおりです。 + +![ERD](images/ERD.png) + +### 初期データをロードする + +Docker コンテナが起動したら、次のコマンドを実行して初期データをロードします。 + +```console +./gradlew run --args="LoadInitialData" +``` + +初期データがロードされた後、次のレコードがテーブルに保存される必要があります。 + +**`customer.customers` テーブル** + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +**`order.items` テーブル** + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## サンプルアプリケーションでトランザクションを実行し、データを取得する + +次のセクションでは、サンプル電子商取引アプリケーションでトランザクションを実行し、データを取得する方法について説明します。 + +### 顧客情報を取得する + +次のコマンドを実行して、ID が `1` である顧客に関する情報を取得することから始めます。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 0} +... +``` + +### 注文する + +次に、次のコマンドを実行して、顧客 ID `1` にリンゴ 3 個とオレンジ 2 個を注文してもらいます。 + +:::note + +このコマンドの注文形式は `./gradlew run --args="PlaceOrder :,:,..."` です。 + +::: + +```console +./gradlew run --args="PlaceOrder 1 1:3,2:2" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す出力が表示されます。 + +```console +... +{"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e"} +... +``` + +### 注文の詳細を確認する + +次のコマンドを実行して注文の詳細を確認します。`` は、前のコマンドを実行した後に表示される `order_id` の UUID に置き換えます。 + +```console +./gradlew run --args="GetOrder " +``` + +`order_id` と `timestamp` の UUID が異なる、以下のような出力が表示されます。 + +```console +... +{"order": {"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e","timestamp": 1650948340914,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}} +... +``` + +### 別の注文をする + +次のコマンドを実行して、顧客 ID `1` の `credit_total` の残額を使用してメロン 1 個を注文します。 + +```console +./gradlew run --args="PlaceOrder 1 5:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す出力が表示されます。 + +```console +... +{"order_id": "bcc34150-91fa-4bea-83db-d2dbe6f0f30d"} +... +``` + +### 注文履歴を確認する + +次のコマンドを実行して、顧客 ID `1` のすべての注文履歴を取得します。 + +```console +./gradlew run --args="GetOrders 1" +``` + +`order_id` と `timestamp` の UUID が異なる以下のような出力が表示されます。これは、顧客 ID `1` のすべての注文履歴をタイムスタンプの降順で表示します。 + +```console +... +{"order": [{"order_id": "dea4964a-ff50-4ecf-9201-027981a1566e","timestamp": 1650948340914,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000},{"order_id": "bcc34150-91fa-4bea-83db-d2dbe6f0f30d","timestamp": 1650948412766,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 5,"item_name": "Melon","price": 3000,"count": 1,"total": 3000}],"total": 3000}]} +... +``` + +### クレジット合計の確認 + +次のコマンドを実行して、顧客 ID `1` のクレジット合計を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` が `credit_total` の `credit_limit` に達しており、これ以上注文できないことを示しています。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 10000} +... +``` + +次のコマンドを実行して、ブドウ 1 個とマンゴー 1 個を注文してみます。 + +```console +./gradlew run --args="PlaceOrder 1 3:1,4:1" +``` + +次の出力が表示されます。これは、`credit_total` 金額が `credit_limit` 金額を超えたために注文が失敗したことを示しています。 + +```console +... +java.lang.RuntimeException: Credit limit exceeded + at sample.Sample.placeOrder(Sample.java:205) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:33) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:8) + at picocli.CommandLine.executeUserObject(CommandLine.java:1783) + at picocli.CommandLine.access$900(CommandLine.java:145) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2141) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2108) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:1975) + at picocli.CommandLine.execute(CommandLine.java:1904) + at sample.command.SampleCommand.main(SampleCommand.java:35) +... +``` + +### 支払いを行う + +注文を続行するには、顧客 ID `1` が支払いを行って `credit_total` の金額を減らす必要があります。 + +次のコマンドを実行して支払いを行います。 + +```console +./gradlew run --args="Repayment 1 8000" +``` + +次に、次のコマンドを実行して、顧客 ID `1` の `credit_total` 金額を確認します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +``` + +次の出力が表示されます。これは、顧客 ID `1` に支払いが適用され、`credit_total` の金額が減ったことを示しています。 + +```console +... +{"id": 1, "name": "Yamada Taro", "credit_limit": 10000, "credit_total": 2000} +... +``` + +顧客 ID `1` が支払いを済ませたので、次のコマンドを実行してブドウ 1 個とメロン 1 個を注文します。 + +```console +./gradlew run --args="PlaceOrder 1 3:1,4:1" +``` + +以下のように、`order_id` の UUID が異なる、注文が成功したことを示す出力が表示されます。 + +```console +... +{"order_id": "8911cab3-1c2b-4322-9386-adb1c024e078"} +... +``` + +## サンプルアプリケーションを停止します + +サンプルアプリケーションを停止するには、次のコマンドを実行して Docker コンテナを停止します。 + +```console +docker-compose down +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/images/ERD.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/images/ERD.png new file mode 100644 index 0000000000000000000000000000000000000000..021004371c536704a4381817a954488bc4aaef1f GIT binary patch literal 9786 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 ZwfFl!8(dVAjAIM{6-7;j3OUOU{|4=(#hCyA literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/images/overview.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/multi-storage-transaction-sample/images/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..16749f3bcb57f4b41b1147a7b144e7b569690c86 GIT binary patch literal 64426 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 FqHo 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 T(Rd=m!9LRB3Su=PUjzRiw>MX; literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-postgresql-sample/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-postgresql-sample/README.mdx new file mode 100644 index 00000000..75e65c50 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-postgresql-sample/README.mdx @@ -0,0 +1,308 @@ +--- +tags: + - Community +--- + +# ScalarDB Analytics with PostgreSQL を使用してサンプルデータに対して分析クエリを実行する + +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、ScalarDB Analytics with PostgreSQL を使用してサンプルデータに対して分析クエリを実行する方法について説明します。 + +## 概要 + +このサンプルチュートリアルでは、単一テーブルクエリと複数テーブルクエリの 2 種類のクエリを実行する方法を示します。 + +### このサンプルチュートリアルで実行できること + +このサンプルチュートリアルでは、次の種類のクエリを実行する方法を示します。 + +- データを読み取り、要約を計算します。 +- 複数のストレージにまたがるテーブルを結合します。 + +:::note + +このサンプルチュートリアルでインポートされたテーブルに対して、PostgreSQL がサポートする任意のクエリを実行できます。ScalarDB Analytics with PostgreSQL は PostgreSQL がサポートするすべてのクエリをサポートしているため、例に示されている結合、集計、フィルタリング、順序付けだけでなく、ウィンドウ関数、ラテラル結合、さまざまな分析操作も使用できます。 + +PostgreSQL がサポートするクエリの種類を確認するには、[PostgreSQL ドキュメント](https://www.postgresql.org/docs/current/index.html)を参照してください。 + +::: + +## 前提条件 + +- [Docker](https://www.docker.com/get-started/) 20.10 以降、および [Docker Compose](https://docs.docker.com/compose/install/) V2 以降 +- [psql](https://www.postgresql.org/docs/current/app-psql.html) + +## ScalarDB Analytics with PostgreSQL を設定する + +まず、ScalarDB Analytics with PostgreSQL を使用して分析クエリを実行するためにデータベースを設定する必要があります。まだデータベースを設定していない場合は、[ScalarDB Analytics with PostgreSQL の使用開始](../../scalardb-analytics-postgresql/getting-started.mdx)の手順に従ってください。 + +### ScalarDB のスキーマの詳細 + +このサンプルチュートリアルでは、ScalarDB データベースに次のスキーマを持つテーブルがあります。 + +```mermaid +erDiagram + "dynamons.customer" ||--|{ "postgresns.orders" : "custkey" + "dynamons.customer" { + int c_custkey + text c_name + text c_address + int c_nationkey + text c_phone + double c_acctbal + text c_mktsegment + text c_comment + } + "postgresns.orders" ||--|{ "cassandrans.lineitem" : "orderkey" + "postgresns.orders" { + int o_orderkey + int o_custkey + text o_orderstatus + double o_totalprice + text o_orderdate + text o_orderpriority + text o_clerk + int o_shippriority + text o_comment + } + "cassandrans.lineitem" { + int l_orderkey + int l_partkey + int l_suppkey + int l_linenumber + double l_quantity + double l_extendedprice + double l_discount + double l_tax + text l_returnflag + text l_linestatus + text l_shipdate + text l_commitdate + text l_receiptdate + text l_shipinstruct + text l_shipmode + text l_comment + } +``` + +参考までに、この図には次の内容が示されています。 + +- `dynamons`、`postgresns`、`cassandrans`。それぞれ DynamoDB、PostgreSQL、Cassandra のバックエンドストレージにマップされる名前空間。 +- `dynamons.customer`。顧客に関する情報を表すテーブル。このテーブルには、顧客キー、名前、住所、電話番号、口座残高などの属性が含まれます。 +- `postgresns.orders`。顧客が行った注文に関する情報を含むテーブル。このテーブルには、注文キー、顧客キー、注文ステータス、注文日、注文優先度などの属性が含まれます。 +- `cassandrans.lineitem`。注文に関連付けられた明細項目を表すテーブル。このテーブルには、注文キー、部品キー、サプライヤーキー、数量、価格、出荷日などの属性が含まれます。 + +### PostgreSQL のスキーマの詳細 + +ScalarDB の設定時にスキーマインポーターを実行すると、ScalarDB データベースのテーブルスキーマを PostgreSQL データベースにインポートできます。より正確には、ScalarDB データベースの各 `namespace_name.table_name` テーブルに対して、PostgreSQL データベースに `namespace_name._table_name` の外部テーブルと `namespace_name.table_name` のビューが作成されます。 + +作成された外部テーブルには、ScalarDB テーブルと同じ列と、ScalarDB が内部で管理するトランザクションメタデータ列が含まれます。作成されたビューは、外部テーブルからトランザクションメタデータ列を除外するように定義されているため、作成されたビューには ScalarDB テーブルと同じ列のみが含まれます。 + +ScalarDB テーブルのスキーマは `schema.json` にあります。たとえば、`dynamons.customer` テーブルは次のように定義されています。 + +```json + "dynamons.customer": { + "transaction": true, + "partition-key": [ + "c_custkey" + ], + "columns": { + "c_custkey": "INT", + "c_name": "TEXT", + "c_address": "TEXT", + "c_nationkey": "INT", + "c_phone": "TEXT", + "c_acctbal": "DOUBLE", + "c_mktsegment": "TEXT", + "c_comment": "TEXT" + } + }, +``` + +PostgreSQL データベース内の `dynamons._customer` の外部テーブルを表示するには、次のコマンドを実行し、プロンプトが表示されたら PostgreSQL ユーザーパスワードを入力します。 + +```console +psql -U postgres -h localhost test -c '\d dynamons._customer'; +``` + +パスワードを入力すると、次の出力が表示されます。これには、`dynamons.customer` テーブルと同じ `c_` 列が表示されます。 + +```console + Foreign table "dynamons._customer" + Column | Type | Collation | Nullable | Default | FDW options +------------------------+------------------+-----------+----------+---------+------------- + c_custkey | integer | | | | + c_name | text | | | | + c_address | text | | | | + c_nationkey | integer | | | | + c_phone | text | | | | + c_acctbal | double precision | | | | + c_mktsegment | text | | | | + c_comment | text | | | | + tx_id | text | | | | + tx_version | integer | | | | + tx_state | integer | | | | + tx_prepared_at | bigint | | | | + tx_committed_at | bigint | | | | + before_tx_id | text | | | | + before_tx_version | integer | | | | + before_tx_state | integer | | | | + before_tx_prepared_at | bigint | | | | + before_tx_committed_at | bigint | | | | + before_c_name | text | | | | + before_c_address | text | | | | + before_c_nationkey | integer | | | | + before_c_phone | text | | | | + before_c_acctbal | double precision | | | | + before_c_mktsegment | text | | | | + before_c_comment | text | | | | +Server: multi_storage_dynamodb +FDW options: (namespace 'dynamons', table_name 'customer') +``` + +外部テーブルを見るとわかるように、テーブルにはトランザクションメタデータ列も含まれています。これらの列は、Read Committed 分離レベルを確保するために必要です。 + +`dynamons.customer` のビューを表示するには、次のコマンドを実行し、プロンプトが表示されたら PostgreSQL ユーザーパスワードを入力します。 + +```console +psql -U postgres -h localhost test -c '\d dynamons.customer'; +``` + +パスワードを入力すると、次の出力が表示されます。 + +```console + View "dynamons.customer" + Column | Type | Collation | Nullable | Default +--------------+------------------+-----------+----------+--------- + c_custkey | integer | | | + c_name | text | | | + c_address | text | | | + c_nationkey | integer | | | + c_phone | text | | | + c_acctbal | double precision | | | + c_mktsegment | text | | | + c_comment | text | | | +``` + +このビューの列定義は、ScalarDB データベースの元のテーブルと同じです。このビューは、トランザクションメタデータ列を解釈して、Read Committed 分離レベルで有効なデータのみを公開するために、上で説明した外部テーブルに基づいて作成されます。 + +:::note + +通常、外部テーブルに直接アクセスする必要はありません。代わりに、ビューを ScalarDB データベース内のテーブルと同等にすることができます。 + +::: + +ScalarDB と PostgreSQL 間の型マッピングの詳細については、[ScalarDB と他のデータベース間のデータ型マッピング](../../schema-loader.mdx#scalardb-と他のデータベース間のデータ型マッピング) を参照してください。 + +## 分析クエリを実行する + +次のセクションでは、データの読み取り、サマリーの計算、複数のストレージにまたがるテーブルの結合方法について説明します。 + +### データの読み取りとサマリーの計算 + +Cassandra バックエンドに保存されている実際のデータを使用して `cassandrans.lineitem` からデータを読み取り、データを集計して順序付けられた明細項目の複数のサマリーを計算するクエリを実行できます。 + +クエリを実行するには、次のコマンドを実行して psql ターミナルにログインします。 + +```console +psql -U postgres -h localhost test +``` + +パスワードを入力した後、psql ターミナルに次のクエリを入力します。 + +```console +SELECT + l_returnflag, + l_linestatus, + sum(l_quantity) AS sum_qty, + sum(l_extendedprice) AS sum_base_price, + sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price, + sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, + avg(l_quantity) AS avg_qty, + avg(l_extendedprice) AS avg_price, + avg(l_discount) AS avg_disc, + count(*) AS count_order +FROM + cassandrans.lineitem +WHERE + to_date(l_shipdate, 'YYYY-MM-DD') <= date '1998-12-01' - 3 +GROUP BY + l_returnflag, + l_linestatus +ORDER BY + l_returnflag, + l_linestatus; +``` + +次の出力が表示されます。 + +```console + l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order +--------------+--------------+---------+--------------------+--------------------+--------------------+---------------------+--------------------+---------------------+------------- + A | F | 1519 | 2374824.6560430005 | 1387363.5818635763 | 1962762.9341866106 | 26.6491228070175439 | 41663.590456894744 | 0.4150182982456142 | 57 + N | F | 98 | 146371.22954200002 | 85593.92837883368 | 121041.52567369482 | 32.6666666666666667 | 48790.409847333336 | 0.4098473333333333 | 3 + N | O | 5374 | 8007373.247144971 | 4685645.630765834 | 6624209.157932242 | 24.4272727272727273 | 36397.15112338623 | 0.414759749999999 | 220 + R | F | 1461 | 2190869.967642001 | 1284177.8484816086 | 1814150.7929095028 | 25.1896551724137931 | 37773.62013175864 | 0.41323520689655185 | 58 +(4 rows) +``` + +### 複数のストレージにまたがるテーブルを結合する + +クエリを実行して、3 つのバックエンドストレージに接続されているテーブルを結合し、特定の日付に最も高い収益を持つ未出荷の注文を計算することもできます。 + +クエリを実行するには、次のコマンドを実行して psql ターミナルにログインします。 + +```console +psql -U postgres -h localhost test +``` + +パスワードを入力した後、psql ターミナルに次のクエリを入力します。 + +```console +SELECT + l_orderkey, + sum(l_extendedprice * (1 - l_discount)) AS revenue, + o_orderdate, + o_shippriority +FROM + dynamons.customer, + postgresns.orders, + cassandrans.lineitem +WHERE + c_mktsegment = 'AUTOMOBILE' + AND c_custkey = o_custkey + AND l_orderkey = o_orderkey + AND o_orderdate < '1995-03-15' + AND l_shipdate > '1995-03-15' +GROUP BY + l_orderkey, + o_orderdate, + o_shippriority +ORDER BY + revenue DESC, + o_orderdate, + l_orderkey +LIMIT 10; +``` + +次の出力が表示されます。 + +```console + l_orderkey | revenue | o_orderdate | o_shippriority +------------+--------------------+-------------+---------------- + 1071617 | 128186.94002748765 | 1995-03-10 | 0 + 1959075 | 33104.49713665398 | 1994-12-23 | 0 + 430243 | 19476.107574179696 | 1994-12-24 | 0 +(3 rows) +``` + +## ScalarDB Analytics with PostgreSQL とデータベースを停止する + +ScalarDB Analytics with PostgreSQL とデータベースを停止するには、次のコマンドを実行して Docker コンテナを停止します。 + +```console +docker-compose down +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-spark-sample/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-spark-sample/README.mdx new file mode 100644 index 00000000..a9325d77 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/scalardb-analytics-spark-sample/README.mdx @@ -0,0 +1,283 @@ +--- +tags: + - Enterprise Option + - Private Preview +--- + +# ScalarDB Analytics with Spark を使用してサンプルデータに対して分析クエリを実行する + +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、ScalarDB Analytics with Spark を使用してサンプルデータに対して分析クエリを実行する方法について説明します。ソースコードは https://github.com/scalar-labs/scalardb-samples/scalardb-analytics-spark-sample で入手できます。 + +## このサンプルアプリケーションでできること + +このサンプルチュートリアルでは、ScalarDB Analytics with Spark を使用して Spark シェルでインタラクティブ分析を実行する方法を説明します。特に、次の 2 種類のクエリを実行する方法を学習します。 + +- データを読み取り、要約を計算します。 +- 複数のストレージにまたがるテーブルを結合します。 + +## 前提条件 + +- [Docker](https://www.docker.com/get-started/) 20.10 以降と [Docker Compose](https://docs.docker.com/compose/install/) V2 以降 + + + +## ScalarDB Analytics with Spark を設定する + +### ScalarDB サンプルリポジトリをクローンする + +**ターミナル** を開き、次のコマンドを実行して ScalarDB サンプルリポジトリをクローンします。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、サンプルアプリケーションが含まれているディレクトリに移動します。 + +```console +cd scalardb-samples/scalardb-analytics-spark-sample +``` + +### ライセンス証明書をサンプルディレクトリに追加する + +次のコマンドを実行して、ライセンス証明書 (`cert.pem`) をサンプルディレクトリにコピーします。`` はライセンスへのパスに置き換えてください。 + +```console +cp //cert.pem cert.pem +``` + +### ScalarDB でサンプルの基礎データベースを設定する + +ScalarDB のサンプルの基礎データベースを設定するには、次のコマンドを実行します。 + +```console +docker compose up -d --wait +``` + +このコマンドは、PostgreSQL、Cassandra、DynamoDB の 3 つのサービスをローカルで起動します。 + +次に、次のコマンドを実行して、これらのサービスにサンプルデータベースを設定します。 + +```console +docker compose run --rm sample-data-loader +``` + +このコマンドは、それぞれローカルの PostgreSQL、Cassandra、DyanmoDB サービスにマップされる `postgresns`、`cassandrans`、`dynamons` 名前空間を作成し、`postgresns.orders`、`cassandrans.lineitem`、`dynamons.customer` テーブルを作成し、サンプルデータをそれらのテーブルにロードします。テーブルスキーマの詳細については、[スキーマの詳細](#schema-details) を参照してください。 + +### Spark シェルで ScalarDB Analytics with Spark を設定する + +Spark シェルを起動するには、次のコマンドを実行します。 + +```console +docker compose run --rm spark-shell +``` + +`docker-compose.yml` でわかるように、このコマンドは `--packages com.scalar-labs:scalardb-analytics-spark-_:` オプションを指定して `spark-shell` コマンドを実行します。このオプションを使用すると、`spark-shell` は Maven Central Repository から ScalarDB Analytics with Spark を自動的にダウンロードし、それを `spark-shell` のクラスパスに追加します。 + +Spark シェルコンソールで、次のコマンドを実行して ScalarDB Analytics with Spark を設定できます。 + +```console +scala> import com.scalar.db.analytics.spark.implicits._ +scala> spark.setupScalarDbAnalytics( + | configPath = "/etc/scalardb.properties", + | namespaces = Set("postgresns", "cassandrans", "dynamons"), + | license = License.certPath("""{"your":"license", "key":"in", "json":"format"}""", "/etc/cert.pem") + | ) +``` + +:::warning + +ライセンスは JSON 文字列で参照されるため、[ライセンス証明書をサンプルディレクトリに追加する](#ライセンス証明書をサンプルディレクトリに追加する)の説明に従って、ライセンス証明書をサンプルディレクトリにコピーしておく必要があることに注意してください。 + +::: + +これで、Spark 側に、ScalarDB のテーブルと同等の `postgresns.orders`、`cassandrans.lineitem`、`dynamons.customer` のテーブルが作成されます。例: + +```console +scala> sql("DESCRIBE postgresns.orders").show() ++---------------+---------+-------+ +| col_name|data_type|comment| ++---------------+---------+-------+ +| o_orderkey| int| NULL| +| o_custkey| int| NULL| +| o_orderstatus| string| NULL| +| o_totalprice| double| NULL| +| o_orderdate| string| NULL| +|o_orderpriority| string| NULL| +| o_clerk| string| NULL| +| o_shippriority| int| NULL| +| o_comment| string| NULL| ++---------------+---------+-------+ +``` + +## 分析クエリを実行する + +次のセクションでは、データの読み取り、サマリーの計算、複数のストレージにまたがるテーブルの結合方法について説明します。 + +### データの読み取りとサマリーの計算 + +Cassandra に保存されている実際のデータを使用して `cassandrans.lineitem` からデータを読み取り、データを集計して順序付けられた明細項目の複数のサマリーを計算するクエリを実行できます。 + +クエリを実行するには、Spark シェルコンソールで次のコマンドを実行します。 + +```scala +scala> sql(""" + SELECT + l_returnflag, + l_linestatus, + sum(l_quantity) AS sum_qty, + sum(l_extendedprice) AS sum_base_price, + sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price, + sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge, + avg(l_quantity) AS avg_qty, + avg(l_extendedprice) AS avg_price, + avg(l_discount) AS avg_disc, + count(*) AS count_order + FROM + cassandrans.lineitem + WHERE + to_date(l_shipdate, 'yyyy-MM-dd') <= date '1998-12-01' - 3 + GROUP BY + l_returnflag, + l_linestatus + ORDER BY + l_returnflag, + l_linestatus; + """).show() +``` + +次の出力が表示されます。 + +```console ++------------+------------+-------+------------------+------------------+------------------+------------------+------------------+-------------------+-----------+ +|l_returnflag|l_linestatus|sum_qty| sum_base_price| sum_disc_price| sum_charge| avg_qty| avg_price| avg_disc|count_order| ++------------+------------+-------+------------------+------------------+------------------+------------------+------------------+-------------------+-----------+ +| A| F| 1519|2374824.6560278563|1387364.2207725341|1962763.4654265852|26.649122807017545|41663.590456629056|0.41501802923479575| 57| +| N| F| 98| 146371.2295412012| 85593.96776336085|121041.55837332775|32.666666666666664|48790.409847067065|0.40984706454007996| 3| +| N| O| 5374| 8007373.247086477| 4685647.785126835| 6624210.945739046|24.427272727272726| 36397.15112312035| 0.4147594809559689| 220| +| R| F| 1461|2190869.9676265526|1284178.4378283697|1814151.2807494882|25.189655172413794| 37773.62013149229|0.41323493790730753| 58| ++------------+------------+-------+------------------+------------------+------------------+------------------+------------------+-------------------+-----------+ +``` + +### 複数のデータベースにまたがるテーブルを結合する + +クエリを実行して、3 つのバックエンドデータベースに接続されているテーブルを結合し、特定の日付に最も高い収益を持つ未出荷の注文を計算することもできます。 + +クエリを実行するには、Spark シェルコンソールで次のコマンドを実行します。 + +```scala +scala> sql(""" + SELECT + l_orderkey, + sum(l_extendedprice * (1 - l_discount)) AS revenue, + o_orderdate, + o_shippriority + FROM + dynamons.customer, + postgresns.orders, + cassandrans.lineitem + WHERE + c_mktsegment = 'AUTOMOBILE' + AND c_custkey = o_custkey + AND l_orderkey = o_orderkey + AND o_orderdate < '1995-03-15' + AND l_shipdate > '1995-03-15' + GROUP BY + l_orderkey, + o_orderdate, + o_shippriority + ORDER BY + revenue DESC, + o_orderdate, + l_orderkey + LIMIT 10; + """).show() +``` + +次の出力が表示されます。 + +```console ++----------+------------------+-----------+--------------+ +|l_orderkey| revenue|o_orderdate|o_shippriority| ++----------+------------------+-----------+--------------+ +| 1071617|128186.99915996166| 1995-03-10| 0| +| 1959075| 33104.51278645416| 1994-12-23| 0| +| 430243|19476.115819260962| 1994-12-24| 0| ++----------+------------------+-----------+--------------+ +``` + +:::note + +このサンプルチュートリアルでインポートされたテーブルに対して、Apache Spark および Spark SQL がサポートする任意のクエリを実行することもできます。ScalarDB Analytics with Spark は、Spark SQL がサポートするすべてのクエリをサポートしているため、例に示されている結合、集計、フィルタリング、順序付けだけでなく、ウィンドウ関数、ラテラル結合、さまざまな分析操作も使用できます。 + +Spark SQL がサポートするクエリの種類を確認するには、[Spark SQL ドキュメント](https://spark.apache.org/docs/latest/sql-ref.html)を参照してください。 + +::: + +## サンプルアプリケーションを停止します + +サンプルアプリケーションを停止するには、次のコマンドを実行して Docker コンテナを停止します。 + +```console +docker compose down +``` + +## リファレンス - スキーマの詳細 + +このサンプルチュートリアルでは、ScalarDB の基盤となるデータベースに次のスキーマを持つテーブルがあります。 + +```mermaid +erDiagram + "dynamons.customer" ||--|{ "postgresns.orders" : "custkey" + "dynamons.customer" { + int c_custkey + text c_name + text c_address + int c_nationkey + text c_phone + double c_acctbal + text c_mktsegment + text c_comment + } + "postgresns.orders" ||--|{ "cassandrans.lineitem" : "orderkey" + "postgresns.orders" { + int o_orderkey + int o_custkey + text o_orderstatus + double o_totalprice + text o_orderdate + text o_orderpriority + text o_clerk + int o_shippriority + text o_comment + } + "cassandrans.lineitem" { + int l_orderkey + int l_partkey + int l_suppkey + int l_linenumber + double l_quantity + double l_extendedprice + double l_discount + double l_tax + text l_returnflag + text l_linestatus + text l_shipdate + text l_commitdate + text l_receiptdate + text l_shipinstruct + text l_shipmode + text l_comment + } +``` + +参考までに、この図には次の内容が示されています。 + +- `dynamons`、`postgresns`、`cassandrans`。それぞれ DynamoDB、PostgreSQL、Cassandra のバックエンドストレージにマップされる名前空間。 +- `dynamons.customer`。顧客に関する情報を表すテーブル。このテーブルには、顧客キー、名前、住所、電話番号、口座残高などの属性が含まれます。 +- `postgresns.orders`。顧客が行った注文に関する情報を含むテーブル。このテーブルには、注文キー、顧客キー、注文ステータス、注文日、注文優先度などの属性が含まれます。 +- `cassandrans.lineitem`。注文に関連付けられた明細項目を表すテーブル。このテーブルには、注文キー、部品キー、サプライヤーキー、数量、価格、出荷日などの属性が含まれます。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/README.mdx new file mode 100644 index 00000000..c251e259 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/README.mdx @@ -0,0 +1,532 @@ +--- +tags: + - Enterprise Premium +--- + +# マイクロサービストランザクションを使用した Spring Data JDBC for ScalarDB のサンプルアプリケーション + +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、Spring Data JDBC for ScalarDB を使用してマイクロサービストランザクション用のサンプル Spring Boot アプリケーションを作成する方法について説明します。 + +これらの機能の詳細については、[2 フェーズコミットトランザクション](../../two-phase-commit-transactions.mdx) および [Spring Data JDBC for ScalarDB ガイド](../../scalardb-sql/spring-data-guide.mdx)を参照してください。 + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- [Docker](https://www.docker.com/get-started/) 20.10 以降 ([Docker Compose](https://docs.docker.com/compose/install/) V2 以降) + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../../requirements.mdx)を参照してください。 + +::: + + + +## サンプルアプリケーション + +### 概要 + +このチュートリアルでは、ScalarDB の [2 フェーズコミットインターフェースを使用したトランザクション](../../two-phase-commit-transactions.mdx)を通じて、アイテムを注文し、信用枠で支払うことができるサンプル電子商取引アプリケーションを作成するプロセスについて説明します。 + +このサンプルアプリケーションには、[*Database-per-service* pattern](https://microservices.io/patterns/data/database-per-service.html) に基づく *Customer Service* と *Order Service* という 2 つのマイクロサービスがあります。 + +Customer Service は、クレジット限度額やクレジット合計などのクレジットカード情報を含む顧客情報を管理します。Order Service は、注文の確定や注文履歴の取得などの注文操作を担当します。 + +各サービスには gRPC エンドポイントがあります。クライアントはエンドポイントを呼び出し、サービスも互いにエンドポイントを呼び出します。Customer Service と Order Service は、それぞれ ScalarDB を介して MySQL と Cassandra を使用します。 + +![概要](images/overview.png) + +各サービスは、専用の ScalarDB Cluster を介してデータベースにアクセスします。 + +:::note + +両方の ScalarDB Cluster は、Consensus Commit プロトコルに使用される小さなコーディネーターデータベースにアクセスします。このサンプルアプリケーションでは、セットアップと説明を簡単にするために、コーディネーターデータベースは Order Service の同じ Cassandra インスタンスに共存していますが、もちろん、コーディネーターデータベースは別のデータベースとして管理できます。 + +また、サンプルアプリケーションでは ScalarDB の使用方法の説明に重点を置いているため、アプリケーション固有のエラー処理、認証処理などは省略されています。 + +ScalarDB での例外処理の詳細については、[例外の処理方法](../../two-phase-commit-transactions.mdx#例外の処理方法)を参照してください。 + +::: + +### サービスエンドポイント + +サービスで定義されているエンドポイントは次のとおりです。 + +- Customer Service + - `getCustomerInfo` + - `payment` + - `prepare` + - `validate` + - `commit` + - `rollback` + - `repayment` + +- Order Service + - `placeOrder` + - `getOrder` + - `getOrders` + +### このサンプルアプリケーションで実行できること + +サンプルアプリケーションは、次の種類のトランザクションをサポートしています。 + +- Customer Service の `getCustomerInfo` エンドポイントを介して顧客情報を取得します。 +- Order Service の `placeOrder` エンドポイントと、Customer Service の `payment`、`prepare`、`validate`、`commit`、`rollback` エンドポイントを介して、信用枠を使用して注文を行います。 + - 注文のコストが顧客の信用限度額を下回っているかどうかを確認します。 + - チェックに合格した場合、注文履歴を記録し、顧客が支払った金額を更新します。 +- Order Service の `getOrder` エンドポイントと、Customer Service の `getCustomerInfo`、`prepare`、`validate`、`commit`、`rollback` エンドポイントを介して、注文 ID で注文情報を取得します。 +- Order Service の `getOrders` エンドポイントと、Customer Service の `getCustomerInfo`、`prepare`、`validate`、`commit`、`rollback` エンドポイントを介して、顧客 ID で注文情報を取得します。 +- Customer Service の `repayment` エンドポイントを介して支払いを行います。 + - 顧客が支払った金額を減らします。 + +:::note + +`getCustomerInfo` エンドポイントは、コーディネーターからトランザクション ID を受信するときに、参加者サービスエンドポイントとして機能します。 + +::: + +## ScalarDB Cluster の設定 + +[Customer Service 用の ScalarDB Cluster の設定](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/scalardb-cluster-node-for-customer-service.properties)は次のとおりです。 + +```properties +scalar.db.storage=multi-storage +scalar.db.multi_storage.storages=cassandra,mysql +scalar.db.multi_storage.storages.cassandra.storage=cassandra +scalar.db.multi_storage.storages.cassandra.contact_points=cassandra-1 +scalar.db.multi_storage.storages.cassandra.username=cassandra +scalar.db.multi_storage.storages.cassandra.password=cassandra +scalar.db.multi_storage.storages.mysql.storage=jdbc +scalar.db.multi_storage.storages.mysql.contact_points=jdbc:mysql://mysql-1:3306/ +scalar.db.multi_storage.storages.mysql.username=root +scalar.db.multi_storage.storages.mysql.password=mysql +scalar.db.multi_storage.namespace_mapping=customer_service:mysql,coordinator:cassandra +scalar.db.multi_storage.default_storage=mysql +scalar.db.consensus_commit.isolation_level=SERIALIZABLE + +scalar.db.cluster.node.standalone_mode.enabled=true +scalar.db.sql.enabled=true + +# License key configurations +scalar.db.cluster.node.licensing.license_key= +scalar.db.cluster.node.licensing.license_check_cert_pem= +``` + +- `scalar.db.sql.connection_mode`: この設定は、ScalarDB への接続方法を決定します。 +- `scalar.db.storage`: ScalarDB でマルチストレージトランザクションを使用するには、`multi-storage` を指定する必要があります。 +- `scalar.db.multi_storage.storages`: ここでストレージ名を定義する必要があります。 +- `scalar.db.multi_storage.storages.cassandra.*`: これらの設定は、`scalar.db.multi_storage.storages` で定義されているストレージ名の 1 つである `cassandra` ストレージ用です。`cassandra` ストレージのすべての `scalar.db.*` プロパティをここで設定できます。 +- `scalar.db.multi_storage.storages.mysql.*`: これらの設定は、`scalar.db.multi_storage.storages` で定義されているストレージ名の 1 つである `mysql` ストレージ用です。ここで、`mysql` ストレージのすべての `scalar.db.*` プロパティを設定できます。 +- `scalar.db.multi_storage.namespace_mapping`: この設定は、名前空間をストレージにマップします。このサンプルアプリケーションでは、`customer_service` 名前空間テーブルの操作は `mysql` ストレージにマップされ、`order_service` 名前空間テーブルの操作は `cassandra` ストレージにマップされます。また、Consensus Commit トランザクションで使用される `coordinator` 名前空間にマップされるストレージを定義することもできます。 +- `scalar.db.multi_storage.default_storage`: この設定は、マッピングされていない名前空間テーブルでの操作に使用されるデフォルトのストレージを設定します。 +- `scalar.db.sql.default_transaction_mode`: ScalarDB で 2 フェーズコミットトランザクションモードを使用するには、`two_phase_commit_transaction` を指定する必要があります。 +- `scalar.db.consensus_commit.isolation_level`: この設定は、ConsensusCommit に使用される分離レベルを決定します。 + +詳細については、[マルチストレージトランザクション](../../multi-storage-transactions.mdx)を参照してください。 + +[Order Service 用の ScalarDB Cluster の設定](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/scalardb-cluster-node-for-order-service.properties)は次のとおりです。 + +```properties +scalar.db.storage=cassandra +scalar.db.contact_points=cassandra-1 +scalar.db.username=cassandra +scalar.db.password=cassandra +scalar.db.consensus_commit.isolation_level=SERIALIZABLE + +scalar.db.cluster.node.standalone_mode.enabled=true +scalar.db.sql.enabled=true + +# License key configurations +scalar.db.cluster.node.licensing.license_key= +scalar.db.cluster.node.licensing.license_check_cert_pem= +``` + +- `scalar.db.storage`: このサービスは Cassandra のみを基盤データベースとして使用するため、`cassandra` が指定されています。 +- `scalar.db.contact_points`: この設定では、Cassandra に接続するための連絡先 (ホストなど) を指定します。 +- `scalar.db.username`: この設定では、Cassandra に接続するためのユーザー名を指定します。 +- `scalar.db.password`: この設定では、Cassandra に接続するためのパスワードを指定します。 +- `scalar.db.sql.default_namespace_name`: この設定では、デフォルトの名前空間が `order_service` に設定されるため、アプリケーションで名前空間を指定する必要がなくなります。 +- `scalar.db.sql.default_transaction_mode`: ScalarDB で 2 フェーズコミットトランザクションモードを使用するには、`two_phase_commit_transaction` を指定する必要があります。 +- `scalar.db.consensus_commit.isolation_level`: この設定は、ConsensusCommit に使用される分離レベルを決定します。 + +このサンプルアプリケーションでは、ScalarDB Cluster はスタンドアロンモード (`scalar.db.cluster.node.standalone_mode.enabled=true`) で実行されています。 + +また、設定ファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定する必要があります。詳細については、[製品ライセンスキーの設定方法](../../scalar-licensing/README.mdx)を参照してください。 + +## セットアップ + +### ScalarDB サンプルリポジトリのクローンを作成する + +ターミナルを開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、このサンプルがあるディレクトリに移動します。 + +```console +cd scalardb-samples/spring-data-microservice-transaction-sample +``` + +### ライセンスキーを設定する + +設定ファイル [`scalardb-cluster-node-for-customer-service.properties`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/scalardb-cluster-node-for-customer-service.properties) および [`scalardb-cluster-node-for-order-service.properties`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/scalardb-cluster-node-for-order-service.properties) で、ScalarDB Clusters のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../../scalar-licensing/README.mdx) を参照してください。 + +### Cassandra、MySQL、および ScalarDB Cluster を起動する + +Cassandra、MySQL、および ScalarDB Cluster を起動するには、次の `docker-compose` コマンドを実行する必要があります。 + +```console +docker-compose up -d cassandra mysql scalardb-cluster-node-for-customer-service scalardb-cluster-node-for-order-service +``` + +:::note + +コンテナが完全に起動するまで 1 分以上待つ必要があります。 + +::: + +### スキーマをロード + +サンプルアプリケーションのデータベーススキーマ (データを整理する方法) は、Customer Service の場合は [`schema-for-customer-service.sql`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/schema-for-customer-service.sql)、Order Service の場合は [`schema-for-order-service.sql`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/schema-for-order-service.sql) で既に定義されています。 + +スキーマを適用するには、[ScalarDB リリース](https://github.com/scalar-labs/scalardb/releases)ページに移動し、使用する ScalarDB のバージョンに一致する SQL CLI ツールをダウンロードします。 + +#### MySQL + +[`schema-for-customer-service.sql`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/schema-for-customer-service.sql) のスキーマを MySQL にロードするには、`` をダウンロードした ScalarDB Schema Loader のバージョンに置き換えて、次のコマンドを実行します。 + +```console +java -jar scalardb-cluster-sql-cli--all.jar --config scalardb-cluster-node-for-customer-service-client.properties --file schema-for-customer-service.sql +``` + +#### Cassandra + +[`schema-for-order-service.sql`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/schema-for-order-service.sql) のスキーマを Cassandra にロードするには、`` をダウンロードした ScalarDB Schema Loader のバージョンに置き換えて、次のコマンドを実行します。 + +```console +java -jar scalardb-cluster-sql-cli--all.jar --config scalardb-cluster-node-for-order-service-client.properties --file schema-for-order-service.sql +``` + +#### スキーマの詳細 + +[`schema-for-customer-service.sql`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/schema-for-customer-service.sql) に示されているように、Customer Service のすべてのテーブルは `customer_service` 名前空間に作成されます。 + +- `customer_service.customers`: 顧客の情報を管理するテーブル + - `credit_limit`: 貸し手が各顧客に信用枠の使用を許可する最大金額 + - `credit_total`: 各顧客が信用枠を使用してすでに使用した金額 + +[`schema-for-order-service.sql`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/schema-for-order-service.sql) に示されているように、Order Service のすべてのテーブルは `order_service` 名前空間に作成されます。 + +- `order_service.orders`: 注文情報を管理するテーブル +- `order_service.statements`: 注文明細情報を管理するテーブル +- `order_service.items`: 注文する商品の情報を管理するテーブル + +スキーマのエンティティリレーションシップダイアグラムは次のとおりです。 + +![ERD](images/ERD.png) + +### マイクロサービスを開始する + +まず、次のコマンドを使用してサンプルアプリケーションの Docker イメージをビルドする必要があります。 + +```console +./gradlew docker +``` + +次に、次の `docker-compose` コマンドを使用してマイクロサービスを起動できます。 + +```console +docker-compose up -d customer-service order-service +``` + +### 初期データ + +マイクロサービスが起動すると、初期データが自動的にロードされます。 + +初期データがロードされたら、次のレコードがテーブルに保存されます: + +- `customer_service.customers` テーブルの場合: + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +- `order_service.items` テーブルの場合: + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## サンプルアプリケーションを実行する + +まず、ID が `1` である顧客に関する情報を取得します。 + +```console +./gradlew :client:run --args="GetCustomerInfo 1" +... +{"id": 1,"name": "Yamada Taro","credit_limit": 10000} +... +``` + +この時点では、`credit_total` は表示されません。つまり、`credit_total` の現在の値は `0` です。 + +次に、顧客 ID `1` を使用して、リンゴ 3 個とオレンジ 2 個を注文します。 + +注文の形式は `:,:,...` であることに注意してください。 + +```console +./gradlew :client:run --args="PlaceOrder 1 1:3,2:2" +... +{"order_id": "415a453b-cfee-4c48-b8f6-d103d3e10bdb"} +... +``` + +このコマンドを実行すると、注文 ID が表示されます。 + +注文 ID を使用して注文の詳細を確認してみましょう。 + +```console +./gradlew :client:run --args="GetOrder 415a453b-cfee-4c48-b8f6-d103d3e10bdb" +... +{"order": {"order_id": "415a453b-cfee-4c48-b8f6-d103d3e10bdb","timestamp": 1686555272435,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": $ +,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}} +... +``` + +次に、別の注文を出して、顧客 ID `1` の注文履歴を取得しましょう。 + +```console +./gradlew :client:run --args="PlaceOrder 1 5:1" +... +{"order_id": "069be075-98f7-428c-b2e0-6820693fc41b"} +... +./gradlew :client:run --args="GetOrders 1" +... +{"order": [{"order_id": "069be075-98f7-428c-b2e0-6820693fc41b","timestamp": 1686555279366,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 5,"item_name": "Melon","price": 3000,"count": 1,"total": 3000}],"total": 3000},{"order_id": "415a453b-cfee-4c48-b8f6-d103d3e10bdb","timestamp": 1686555272435,"customer_id": 1,"customer_name": "Yamada Taro","statement": [{"item_id": 1,"item_name": "Apple","price": 1000,"count": 3,"total": 3000},{"item_id": 2,"item_name": "Orange","price": 2000,"count": 2,"total": 4000}],"total": 7000}]} +... +``` + +この注文履歴は、タイムスタンプの降順で表示されます。 + +顧客の現在の `credit_total` は `10000` です。顧客は、情報を取得したときに表示された `credit_limit` に達したため、これ以上注文することはできません。 + +```console +./gradlew :client:run --args="GetCustomerInfo 1" +... +{"id": 1,"name": "Yamada Taro","credit_limit": 10000,"credit_total": 10000} +... +./gradlew :client:run --args="PlaceOrder 1 3:1,4:1" +... +io.grpc.StatusRuntimeException: FAILED_PRECONDITION: Credit limit exceeded. creditTotal:10000, payment:7500 + at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:271) + at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:252) + at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:165) + at sample.rpc.OrderServiceGrpc$OrderServiceBlockingStub.placeOrder(OrderServiceGrpc.java:296) + at sample.client.command.PlaceOrderCommand.call(PlaceOrderCommand.java:38) + at sample.client.command.PlaceOrderCommand.call(PlaceOrderCommand.java:12) + at picocli.CommandLine.executeUserObject(CommandLine.java:2041) + at picocli.CommandLine.access$1500(CommandLine.java:148) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + at picocli.CommandLine.execute(CommandLine.java:2170) + at sample.client.Client.main(Client.java:39) +... +``` + +支払いが完了すると、顧客は再度注文できるようになります。 + +```console +./gradlew :client:run --args="Repayment 1 8000" +... +./gradlew :client:run --args="GetCustomerInfo 1" +... +{"id": 1,"name": "Yamada Taro","credit_limit": 10000,"credit_total": 2000} +... +./gradlew :client:run --args="PlaceOrder 1 3:1,4:1" +... +{"order_id": "b6adabd8-0a05-4109-9618-3420fea3161f"} +... +``` + +## クリーンアップ + +Cassandra、MySQL、マイクロサービスを停止するには、次のコマンドを実行します。 + +```console +docker-compose down +``` + +## リファレンス - マイクロサービストランザクションの実現方法 + +注文、単一注文の取得、注文履歴の取得のトランザクションは、マイクロサービストランザクションを実現します。このセクションでは、注文を例に、Customer Service と Order Service にまたがるトランザクションの実装方法に焦点を当てます。 + +次のシーケンス図は、注文を行うトランザクションを示しています。 + +![シーケンス図](images/sequence_diagram.png) + +### 1. 2 フェーズコミットインターフェースによるトランザクションが開始されます + +クライアントが Order Service に注文リクエストを送信すると、`OrderService.placeOrder()` が呼び出され、マイクロサービストランザクションが開始されます。 + +最初に、Order Service は次のように `ScalarDbTwoPcRepository.executeTwoPcTransaction()` を使用して 2 フェーズコミットインターフェースによるトランザクションを開始します。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +// Start a two-phase commit interface transaction +TwoPcResult result = orderRepository.executeTwoPcTransaction(txId -> { + ... +}, ...); +``` + +[CRUD 操作が実行される](#2-crud-operations-are-executed)、[2 フェーズコミットプロトコルを使用してトランザクションがコミットされる](#3-トランザクションは-2-相コミットプロトコルを使用してコミットされます)、[エラー処理](#エラー処理)のアクションは、API によって自動的に実行されます。 + +### 2. CRUD 操作が実行される + +2 フェーズコミットインターフェイスを使用したトランザクションが開始されると、`ScalarDbTwoPcRepository.executeTwoPcTransaction()` によって CRUD 操作が実行されます。Order Service は、注文情報を `order_service.orders` テーブルに、詳細情報を `order_service.statements` テーブルに次のように格納します。参考までに、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +// Put the order info into the `orders` table +orderRepository.insert(order); + +AtomicInteger amount = new AtomicInteger(); +for (ItemOrder itemOrder : request.getItemOrderList()) { + int itemId = itemOrder.getItemId(); + int count = itemOrder.getCount(); + // Retrieve the item info from the `items` table + Optional itemOpt = itemRepository.findById(itemId); + if (!itemOpt.isPresent()) { + String message = "Item not found: " + itemId; + responseObserver.onError( + Status.NOT_FOUND.withDescription(message).asRuntimeException()); + throw new ScalarDbNonTransientException(message); + } + Item item = itemOpt.get(); + + int cost = item.price * count; + // Put the order statement into the `statements` table + statementRepository.insert(new Statement(itemId, orderId, count)); + // Calculate the total amount + amount.addAndGet(cost); +} +``` + +次に、Order Service は、トランザクション ID とともに Customer Service の `payment` gRPC エンドポイントを呼び出します。参考については、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +customerServiceStub.payment( + PaymentRequest.newBuilder() + .setTransactionId(transactionId) + .setCustomerId(customerId) + .setAmount(amount) + .build()); +``` + +Customer Service の `payment` エンドポイントは、まず次のように `ScalarDbTwoPcRepository.joinTransactionOnParticipant()` を使用してトランザクションを結合します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +customerRepository.joinTransactionOnParticipant(request.getTransactionId(), ...); +``` + +次に、エンドポイントは顧客情報を取得し、支払い後に顧客のクレジット合計がクレジット限度額を超えているかどうかを確認します。クレジット合計がクレジット限度額を超えていない場合、エンドポイントは顧客のクレジット合計を更新します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +Customer customer = getCustomer(responseObserver, request.getCustomerId()); + +int updatedCreditTotal = customer.creditTotal + request.getAmount(); +// Check if the credit total exceeds the credit limit after payment +if (updatedCreditTotal > customer.creditLimit) { + String message = String.format( + "Credit limit exceeded. creditTotal:%d, payment:%d", customer.creditTotal, request.getAmount()); + responseObserver.onError( + Status.FAILED_PRECONDITION.withDescription(message).asRuntimeException()); + throw new ScalarDbNonTransientException(message); +} + +// Reduce `credit_total` for the customer +customerRepository.update(customer.withCreditTotal(updatedCreditTotal)); +``` + +### 3. トランザクションは 2 相コミットプロトコルを使用してコミットされます + +Order Service は、支払いが成功したという更新を受け取った後、トランザクションをコミットしようとします。 + +Order Service で呼び出された `ScalarDbTwoPcRepository.executeTwoPcTransaction()` API は、ローカル Order Service とリモート Customer Service の両方の準備、検証、およびコミットを自動的に実行します。これらの手順は、上記の CRUD 操作が正常に終了した後に順番に実行されます。Customer Service の `prepare`、`validate`、および `commit` gRPC エンドポイントを呼び出す実装は、API にパラメーターとして渡す必要があります。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +TwoPcResult result = orderRepository.executeTwoPcTransaction(txId ->{ + ... + }, + + Collections.singletonList( + RemotePrepareCommitPhaseOperations.createSerializable( + this::callPrepareEndpoint, + this::callValidateEndpoint, + this::callCommitEndpoint, + this::callRollbackEndpoint + ) + ) +); +``` + +![高レベル 2PC API のシーケンス図](images/seq-diagram-high-level-2pc-api.png) + +Customer Service の `prepare` エンドポイントでは、エンドポイントは `ScalarDbTwoPcRepository.prepareTransactionOnParticipant()` を使用してトランザクションを再開し、準備します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +customerRepository.prepareTransactionOnParticipant(request.getTransactionId()); +``` + +Customer Service の `validate` エンドポイントでは、エンドポイントは `ScalarDbTwoPcRepository.validateTransactionOnParticipant()` を使用してトランザクションを再開し、検証します。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +customerRepository.validateTransactionOnParticipant(request.getTransactionId()); +``` + +Customer Service の `commit` エンドポイントでは、エンドポイントは `ScalarDbTwoPcRepository.commitTransactionOnParticipant()` を使用してトランザクションを再開し、コミットします。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +customerRepository.commitTransactionOnParticipant(request.getTransactionId()); +``` + +### エラー処理 + +トランザクションの実行中にエラーが発生した場合、`ScalarDbTwoPcRepository.executeTwoPcTransaction()` は、ローカルの Order Service とリモートの Customer Service の両方でトランザクションを自動的にロールバックします。Customer Service の `rollback` gRPC エンドポイントを呼び出す実装も、他の実装とともに API にパラメータとして渡す必要があります。参考として、[`OrderService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/order-service/src/main/java/sample/order/OrderService.java) を参照してください。 + +```java +TwoPcResult result = orderRepository.executeTwoPcTransaction(txId ->{ + ... + }, + + Collections.singletonList( + RemotePrepareCommitPhaseOperations.createSerializable( + this::callPrepareEndpoint, + this::callValidateEndpoint, + this::callCommitEndpoint, + this::callRollbackEndpoint + ) + ) +); +``` + +Customer Service の `rollback` エンドポイントでは、エンドポイントがトランザクションを再開してロールバックします。参考として、[`CustomerService.java`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-microservice-transaction-sample/customer-service/src/main/java/sample/customer/CustomerService.java) を参照してください。 + +```java +customerRepository.rollbackTransactionOnParticipant(request.getTransactionId()); +``` + +ScalarDB で例外を処理する方法の詳細については、[例外の処理方法](../../two-phase-commit-transactions.mdx#例外の処理方法)を参照してください。 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/ERD.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/ERD.png new file mode 100644 index 0000000000000000000000000000000000000000..c0468efa7251809e62238d14f84007bfc0b363b7 GIT binary patch literal 10993 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 T!495n3IK|-A7nu9Og{fNI)qZK literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/overview.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..223c8ad73c2ecbef91d936daf17b1ad2bbc308dd GIT binary patch literal 55118 zcmag`1ymi&(f|s>4ha@q65QS0-Ccq^1b26L_u%dXcb6bRgS&eO8XSWC13CBJ^Syt) z^|EHeW@fs&y1Klo6DBV!1_y%)0|o{LCm}AZ2nGh40X{NN?|?fc#E>+rn_SX zE<_+`L@EfF8-lLrE*Tm>Fhjv1|2U458am{yn8|}pzTdWO#)iLaQPv*k@)Mk7-ikn4 zKUiuVzw(bDSYc09Zm8ugCTFPm?d4H?7TVj{;QM%}SfP-;KE7s!oebX|m*4f2g&}P+ zoVJ3nm{WvB%Kp$Z99_EHPR4B@PQDrbW06&NA;bJaW+Wj}Ea)^Sq#+{>-5dG3xb@QV z!-w3Jg5N z3=9JJ1`d2Mfe#qioA_WbNZ>az@Da`d{pTrYCg;t6zstP5DDX*0LIU{x>9f6&k+p-V zjpNh!;3xoU&P++oQB6jg^RtZ=t-hg+ff22%mF>$AFm6{);H#C9qdvZ?m8G=l>WF_m|srg!r$oI9l)!s>#UX3)$Ek;j_}x)6x_2!ru6?UjsF5y-@wMnk%y4*WupK7`-`WMtJ(i%vUd1qS-=A6UY^h~(9+ZW7d9}I`{gdD zyqT+!rMj@06+j+f4qg^^4(`|Y|Nox+Z^nO(RQumZHb&-ukNnq@|K~_$2P1nS8!KQ+ zN8bPK%s+$w{qUcG+;lH1{}(0xlKJ&6KxbYUZo2>O881vQ`$<0-7(bYVuz->)_)#XL zEB0)|K#aSMN}b_QJjo5|2g?_~0W#z2Miq3T3&Xz%SR;smNl{+X!;8 zz+Kwr2h}++n$GRSna9l2Y43FNd{%vdxWNhX7C+kJTwq6r^5tKLU?zY=T4f`%(eZd3 zM@J59V7s9ogM(;K023|gsMEDm!QZfh$nv%da#P|YXAbW%n40B)2om*JY03F^jbdt3 znh)sFKw87NRtvrHRjIuil=!6G85 zG}6-bFrk>nLel$zVIu=r5qB&YDT%vYaqbZQh7|;}k6Eah&EcY7X3UEC5DR{hHp-jj zH|7BV-MS|beRFUzPuM8|vBh0xQ|D3oK!iiH11HzRBp7nAe{(uCRBdfOiiR1+1m*TnqOFQiPWeVSMWZ#_Y z#ma%O0ACNp3BetLv=EQW5UzT`HuQRnUYw;s)|c($*M-0@xz7u5`ajz=fdCG5;0>nF z@~?UUjJ`k{kpy9KL3T<4F>gamPWyBW6!NT z-!M(mrEAq-B(Db+6nOhd=yRJg2k&2SuB_lt=Hn-P^|%0syoLB~@_k~4!H$`iC|)!s zG$&d%FMb$(sl6+$b4gyX;mT@HrEefm-qaQhE~d#FjNQZ@wCZt;3Il&$?BnT~qVvQ& z-VTTUR~op}!5|t;Ztye^0Dck%`GI>o{y-3$j%O0R<{VC`7uQHh;GfrymGN==jOW!^ z*{q5);xDntASo@SZZ4RzOPNd;^CL9(a>w@T&$x5AHcBmTPi({&Icbjq05@Hck3j+` z6F~R}fcC>QjVB5eCifn3_`EYJf ztD{h>&*nQ^9R8w(qP5x1A9iu9a;AojxBSj@&_Cb^+O>Bbw6c0Pd{ww8uQ$c~f-KOF z_QQNRNhRTSo;B$L1{SUW@p^lXnu9m8epPk0QC=+MTB6L)j-Fni$r9Ue|$QJM#aLgtehV6fA}`P(3JkR z%Q$A0IrDpwm>J&eecR0#laKe#@#E#G4a|@1n!j3656>@4ALjlbAN_^hU3vVdad&5r zDykx|dCjr#g(lIRS>!w)x~Rymk*5_&{PKgj?Jk(($qAB*j`f#P)c%ZIeX8iIpMiz> zUA#`0&Obc>$7Hi-;-GZ_L;aWE--iP_3o-}+3lJz*BEPsH9tC!I>|d$U`;iVZc(?+5 zT+=%`Q%h?iG3^c6or_A60!K-9{VnpI?!@yw$uneHbK9 z%RuYxoQxypoeF{RfPLV(b8@`cZrK}(c6qXb?6?}>kPMC4J!Y9+`E-!(?pbD~Em7a< z3i)a@sNvsxM4-GEA3ddG+#Er7k6@5iOZTLEpu+(>1FZN)AEn`s4N67lqXUtrytJhLQ-Z z?3NxJ+JX!Pyx&FL@?)F0(%f&`ngmP3cr#|L71mDIqeR{qWV}_POByOxmYYa+i(Rw^ zE9UrwCh_tkFj@J4eH=`T_E#Od4ZvJFldcg1SQddyesD;W8EZ^`H^XRCAG;?SrFX%C z&?ek_2?@F1q>lcu|oug$Pvn`tw~R}F+pdsaHXnP(>O_9kVr&I3nw;D z$k1du&c4Bdi<$m@MNG=_*MfIH0z%QIo1G&9EJ#RN?`N(Cr;m5Ic|XN83I!8O_<2MW zkzQy_t)Puf>hr# zT7D}gOP#1-_d_&_UM75ocN^!`PteJF@VmlOoSCtGn4)?Cmk9(sUUw z%wIkKhZIa;l?|^P@J)UzfT$W1rvj=VCuR6>^GV?)_rAUTgfcUNKIA7rEIhPrrTa6G zTBK$ZGkl34?yd`Tunk|%DJ|7 zfsty0QD0p920y(zx1^7={O9flVd6Sq_HqPvK>nSHS-mvUTK~Y}k1)-(JDa%17I!wz zXcY;~^|i&>kuHzpYkT*r3(%iM3?k)Gi$&4sPxCwMla&o`PG2_@7UF@Of`8n{O_%+1 z1`!~`nn)?G*BxJZ&M+KSzG}Nig+)T;@kbwGBV+T=I$6!kS<^%sVMz=lqhpF&S!q+} zRm@AZ+zKA{N6kflz((aS#ZKppj8Ryh5#2rdGr45kk^K}+bVwo~<7ygf%~k(-$gO}h zxQsPfiCL2*Wb)wstcTGzPN)6V>{S*enQprmpRd~*^f9*)3ysnr5JOJC;O|djwnha_ zlX?ZJJv&z>gi{wWm}01tji-m~iekt!9~*?0L!hpDow23LV*VNia4%5kdG7ez!j~of z_tN_ScnNLvxqvtLUnc|%Y9GZnXYQxJ;;TjZk6T(D0a!lm6nSU>8+8cdpN1vcO-(Z# zhlmSRAxIOIZ;zLLSMTMw0I+$*0T&CB3#a(~%S+_bBsFe}ZXJR$kL zao55e6Z9aRx*+6?D(T@-2G>=!9Fx$ITLthAEc98^;Ai&O6gb4m+nx6m*IrDzT1_!t$1j^AF zr&!yqK~mVKttC?OtA^wF+IWnqf$@8qj3oZzG3lb2z-pbVCC*mUi!929ss=8~(!9Ba zYkpI-&(ICVQzNjr_7x()cf=2LtJ;32ayc~O~GTFBbu{#S)=^} z5D8{O(S~0|4GG{*908bJpqjd<|sU0)(ZlTaQ2s4IgX5lK|N|0;W5=4Ti0%+1sy zlHeLX$9T-JtPC6`L*CJ?-i~cOxC(>$*x8knymRAT)`<1%97LpOa_UCZ0K9UVh4%K7HEVYdZak68{&+jLYYH$u(FYO z3{R* z4fxGELY?uTB(P0`}$DVfHFAOaM$YR_5 z2NOsjc;=t-s#?$}TET9_`^vDxkii5O?wh1Kwy$<>(gdm7aGr*~>(CJ{bZ)gcKyc^E ztU2!g=8b6*%uq7F!`(aLto-!u7en6t0h(X_-k@qbLjdq822IOup?!JcAVL7m*J2x@Vq2fb>;e zGLNA^w5RZ!{Ipvd%iSVwUv<$OE@>BC$6LteVJkB1KPPtt(d-Rk4{=k%)n)Umx@b6k zsfg=6N3#_dAWA^;L7InUC)OQHQHzJpq<_&Ezf}NMSX-)Nr$hX05BgD&Nj#*ivS%M@ ziarG=^9PBlZ@>l6G+zuw0v#Rux~IH6IKB&HW;IWj?+lV7UuamHMk22Y2fm9pG)r`y zcUU0fp(HewAL#%7%EQ(G53g2;P2d7E34yk(@qcxy+M05?v7H~IePdOf@~ZRA8aaVX zVK)h#(Wk;pTjC(bBTLw<_B>oIX`_jg7%feqLSe^LPRhP; z+jk_9vEr6lGFXa}7V~{*LX;q9Vqp4SOcsDC*aHKAZ6X7}UTX)w^Y=Y{)yOOCD%D(K zx&$kXYLPTsak3a;S=|Qj_p%`BpAucyJvd+sk!BThtFYp}C66k$0r+;yIrM7^myVZYrJT8axIB14B+425R?t*+|quVT;S zIvlomq4OGxP+@qC%-~qhHM_SP)coBZfXD73r@JN1-+c@{!`4_f6v&7SP_0TL@-t7u z*Yf#7x7mw{*fT-VF0fuZ!_XgogIwu?j4D9nz^oc67Ez0*?Ru=?|e@IwRh1D7>+ zs5@^`sp0hX-o7|=K=Q>o!kV85m?A& zQ}ljB8NY?%%R{+BA~`YDH4Hx93z3z^?GG(7?2yS$(IZw9Of0Mj96E}7rJq~cf_s=O@$Bo{MRoh#<^=d0j z3?EL1!w97-Pg7zi3KNAFYqb%QSId>+C#|;Tlm84qG(X>vl+?#&$suusi!7I*Zc3Dx zN2~av8QFaSpl|REKHzUeKoFNoo_NdN{760T-2Ux6`wnGTxKA2u#bEX&gF?tHo?gT-cD zuYre+Eloi|!TkCA`|#-KMvdZ|+z1n&ljWuuR+}~HO?KxKbs|*tX>>z3=4-ev%&Z(}K z5K&c2)f8ApnEe|LC zHsrPkVpI*9=V54}5DIm!%2iFKi)0*s6(%d{=wz*#bNG!VCg25RkaJv3knMrJUzJ^8X6|! zh{Q^2Y9`xvr{(x$x*m4veq7jmc6{QRPofDLQl{$a03wm8%O0 z2ng&ks>eRA+KNhuuK7HBm2NqZ=3;+oHeNrhxHkv# z&{D|);;}`5W=`5zSx>_EM=jnFaaXX65yv*!yu7cTNPr5#4z>DNYg~h`HgPai1rqADLXqoe$?y7mb~*6Dw0g7a(cxc?%b1Oyi@((C7rw{@BpN zw;7h?OlU~vo>yt#+yZ=Y0r#DUlKc%g9SMFav{CJxWb`mWmfgH zK|WC|b?9Rte5;rU;Wd# zWO`xZt-Ler=EsAhbLKCrnII6N(CRxRUVmRXr0yAy>;vnJaysPLLC8bb9jmuw>gwYX z3`?As(_T_)3`5LhAor6*2xJAgLjwGSdqYFF-e5Rle+^MzBjQDS!@D_6n?j4qmLijU z-lQU#bYt`xG&D4?nR*=(LUu;RcuY*p#QV@j=l*asV+IRP88EfD2RKb*^JgPyLgkgmcv5Iq?QRQFIuQxknlSdAssz`)lD z0Ncmq6~%N#02*Mos=EyxCU-n}GN&TY3nSo&p7wIsr+>B2@L_b+n`+e0H(k#p7>{2D zF$}hrsYkXDtjylNeVc@Luf=P-;p^t*?A++q()AYUoN!A-KB9Wga<$cIi7>1>1TKqT zLy?_^<8y)gEQ_Rgr{tFkyEp488o`l?($Tus)XH=;Cx1Mjbi%rm!rEROp3@ft|L7IT zbcqCFjFX4BgmM14;M2z*E+8riK{LF0JCR{%Bq$mgGl8*UHoPN4$cj-E11%dCtbXhb5zwdNe$% z$c#k+6O@XI&fnekVvbdPwk$nEea~-3%ajTKw9yz5$K+f^LNeclaErFsQv>cEk?Rbc zF`wVomI0^dZS~T|n#U=N9Buo4UW9m_@rvC54&_{ZUvP9p#PsUftg3E>Xo8VqjwMn4 zhyf$x<5mRSfpxxWv)8?|Mx$k_+n0I)CK>q=sK&sZ0FD@6;^0&s2AvLTb;f9Tbe0Lq z&N#I7LoaNafvNLwEODKxC$el}m3t6wLsHyf0_l4q315gefL{p@=!vz-7rAhARw)LDnejiOkH8R0K9Rju4D35)wL^d1HZ z3JSy$dU};a^qe$`L9y)*D+)^A!eZwf0T-gZ>AU%u|ES5Wp;L|fTgZ3SC3}`p5B1`E z)Wo(A7C^q!_vcHxFiTniHVlm_sq0_#)uql2fbpp)Y8~@;aX-xd{k0 z9vJ%RK8+KXEpv|@kP=Oj$%GQQp~5+E`}IeBn08tBDi-yoYu*5Hp0;0zPX$Od_FP{( zYgFrjS7^0N9dwK8Ul`7)AB>bZC@RJe8-GO7$C*}(5aMw@Qfu9bmtrT@^bH>-$S#&n z6|AYLQ5lFwNY?e{=y*6E`Kq-vm)w2YzyOmW%Wn{U%BeMy5JUwy^BLzcSHw3pJg(=} z^3g6oF0dC^h(q$DA>M9zSdBns3jnoLAkVz&4sm>@4ib~Z{DKwI>~J*JblqDY7@zd< zyEV2%Mk&1jNg86ddddY<=i&NMX!*vTJUaM<17$mP1o^C!L zrjnrh7BLCcP_LEeD9&k*bV%rFB)m9Pk7VA_N1Jp-oh%|OmG_|ru=SML7R&WJNmn&T zybzci-=@+s(I|5ywrATD2J+E7msy%-V*&a@A2QnglgaJ~PxG)FoMdQe( zr~6yY6B#F5P0~S4WnT}^O6vpj`fIgQK4XT-MjlH@S*at8jFDA;9)Nd3OnvWqK17xv z{SLdFgqV0D=!1^9P3Ily@nW4=m}6=I`$v>@Yde{{>t!2d&!fZ2w&*Oky;L0()Ll_o z!ib~wu54V--`~DrBQJA?@(a7-XEJy+yE_4?^p!W*@iAnqmBz_*Bl|pCcO=hzJ6D$; zkQAR?12J2&1}X^>>I~R5I@obQ9d|P?>l^YdXNnFQoXlJp?f>kkP0=5 zpxTLqpy`h+_DHe3eiufh#X0KD_nWmzdzyl)GHJ|V$S5evhVW+|NeYLP`C`Mh=O&rv$f4 z*AjaJ9)ee+P|tG5*>|kHJ{+$W&%tQn%kYomBO{;k2e(9#@$jmm?Feb{G`0b~&hzC- z>*9WH*lL|5J&!oW&kY{@u8T0vn;7R0kRJ?2@*%d|i#!7;ZZm3h$w>h(*UVjb#SPY93xbR?e`Ll|Jr^vr%7y$z9e2(0Qn(7!NO|s{IWpn;CYX&iy-xg z+5TmFAQ|YIleXTNcW`%f<9XQQ#Z160)Dj}5URTSC0SBy$EjJ*8 zTv-&?`$7=c4l2w@6Y+*3iauECtOH-rz&k>j&?J$eQhp-F(mQdvoD?vPb0_dVKV0a* zHD$cN?L(29fMZ($j6^EZn>TNUSgEsGKy))RGrwiNbSe9PKw8)`AfzR!wWcSvE0vOz zoFR8LH#eutKKOQowcH8`-lD!Va)Mvxy5r7ruY-56?W15|8JadhzUBU>nVlQWA%<3% zs@?aclOqSk4yKX_A0@aEZ$~1CI!D!#CcpL|OMzfSWpE{jVzGvjae#t4FJu70vtZKR zM-7(~r14HrA|uZvsS+(I_prcPS~_x#RK>`hp^#*Hvs%Bm{2+55QUZdAF69O}wipM6 z@$<~#0c@>A&q-LbPD4i|8U37MNYIG7n+%m#b)I;K^abmdvS4bB30WGlZ*uJG$A`>HZ#x9{mE=H zo8kl)cRtC68X~T;F24lodq2H+Gm>(-nY1MG%M(RFnr(xaYAb}?%>Rm-k~`GU&}6e7 zB8`c|&#(`2PaC3dRY=&$sE|UW9!TsK6il4&j+iago4J=MyaQPa@H1APY>-)MhNYQYV|6A&anQgXSP8`Hieu>`R~wjhODi3Z5!X4sw6n=5WNP zXyeLwe(Qh~Ge^DSxQ@d3=O%(>1xe+l@Z*aG?4ms~jqu76tNmr{p30+T6r&=~Yescz zDC#T)Z!6daI`hX&yfT3 z*T{yI>U4ZUoavld=5?%$lEJArHVMKEOByvmE)^Q@ z5dxWwp=K!!=2Km`D(bU)zPY0RTi8YQdrhm-bk1vD&&Ea?AEt)>N??E6`e2he^8A^B zKUWOeXiXT%Z=}0V4~&c4i_x86r{Aa~jGE3fS)qz(aTwbg1mG9k&-DT(5XfupC-6I1 zkXbEg_YWBk0}hD4Io74n`H(EBvFJ1?YmnyGgjk{IWs7b(1h^bA5E6uS1hb|?4^le; zGH`+oXM}K8}v~T0rf_hcdnRG*_*e8MsTe@%%$H2^r5E zekhrVGzql03jYq2_0sD!?J+U1L`UI#V;jEu1#l3!#+205<_yL4Rt8Nk3VNiYr(QG} zfT}H=U;aavdKP-+UYx}c?Q-EMh9FYzk@G;!gONdg-(}3s!V^8>Z(+cp&RVeGoimn5 zZ~NkPrLvQB#e`Zys1 zy#I6N-^81*ZyU-)yoH2XXUEZ)iD8YxH|Ci9AnFYW&2t~!cc1j|H)LN@%cX3d)ii0@ ztHUcWOL3|~M}!p?jA0^AaewU?G!a^B%HNa)t`z^u9kIqBC2q@FeQ_`lH}_^r8Wtsd zA1GaifF6Rp;f*=AuQF$cXi#-3Hpz%2hDHRZndC5Z>=`6}lMH2w5r&(IZl(mc`;yiM z1L=sql)qTN#(JWe8+>-k^cJM$uuApq)qW)SJ7?N2=Q?NXe5Oc}d;b{H zRgnO8{|k0%e!Yf|Vs7(*%+Q`hP)4D=u%je5X@RSGcK+%M>@0UN zY1M)&J}C#Su#9=4(*E=S;ka-9AF%sh*#83w5tP7O6*fojnb%4;s;-d&9C1GfG8jv@D;B+$p1qBfjXXoGde7J@bIEL-u z9&|X`(*K$1)?kkMqRCOQR<7>P;GX(MKLX@&{wXf^ov1+|Z(#2)((w55+H|yGN0>cZ z8hbZ`+;}{&?|&C#Y#RXf7f3BPX9JL4la}v+crCl?0Ll=gftx-1n~#WR z`st3^0G!6<=8S>BeOCT&g%Rw<*4=w)_RFcyAC(lqMEh77=1=D*j$e5`d10|JhCdkY zK)nNT0s`Tbb8D_ZB)6y5o50nF=T7sSz|b0i@H2JVfj#Ak@ClO1#U2zC^7aoUV+Pw_ zz6e2yeILbW-w_TO1CNf;#z6YpH%>So*^b8nyY|xEwTY|!4sixv>_DB1y2?!9SzK7y zW=+%Tqc=G%r`p>wzMyTP@sA-3Sy{6qrZj&c@<15oJz}EIm9Z1A&w2f=$)*d9!G#G8s%p!2DnSVxOLeSzRRY0YTS9qanckf!)Kq+rslF^Snfj*sM83iAk`XA> z*U~W1q8QEZAVpTOPE$G|LvVM1d3iw*`XTf|ba?Oz6m9%v2<2SAQw&hLkbkslrH?no zG^m;YCBVq3IA!QM7vH1Ih?dpEJDFN~TdW5KL-mr>2HNz3eTich-AaPDwN-1oX^VRp zx7R0U0_oA`u{Xn4g@E22krXw&7D=EETc6LT>k~P~$UpZm|x^WKAtT0Fz4ponSd zU!4vkrqd_pz0jyYoI`mzPMD=cjzZxd;A)Eb-wA;xj$>?lXDSmobi0mVGS(y&tdN}% zAdi)RNwRj;H)`6txk*zW#l#~?ToK~U^2PppA4j?NLfi#V8|BKb>5cw9>H+!d2OaF_ zJuEcLhU;Wz@M5;&me68U02$hO=5N%qZ9#KoCa!;)4Sjvg+?Qc~!oN$wLE~i*!i!jy9re2NuYinM#0lgsvvE5RzwsO6D2vBoV zU^TdldS0y!yL<%7r%=I1#I|}=AZvmWwiEK4VqIM`>xEz|9&5NgK|Jly$nm0B@$I(h z=p@dsG^@w6jxQ}g7wIf+1@2wmzX+>%bu+ME`0JJtTz4A6+xrPMoi*YCZiVrVfQ3aF zrzj~{QMZ$N^yf)sn%*Ep!*!6KE2}P12l~UC019?)KTtsL5FgOu5YRIyx3!|aV8?{81!u|DHKdp?*0yRhx?PO>IbKKwofJ= z`R+CqCIVjVHf(V^TxW40mk9{k4>Rt%X*m<*FcA`LE*|oxa^&m|1n4QggC>Ms+ur6w zF}LcmiGOf@l1$f9{;uUa=7ymo%|A1cX%IQkz9-TphO&ryxAxi#;sC{u^4q5Qp}KB} zj;okBDck+7+gK+Sq1qaB@)cT(vV^W{n`KJ0fCUNeEb??P4AHcbq851$ah6OFY57I? zx+jo)Nk4L4uQ?mOV1_i)=#sO^V1|mGzGw9qc7Xu`HR|Ri<7r6N6&b!4kg^s3Ya@X2 zC(42lw3BRLx4b#17}or5i@NQRrC&s}Fh7AT6N(5j~{?pQvjOh6wEea30Kg>+z-8jbkFK%%OIkODzeXqf5)^@F zk=GeA?vle?B?r>%c_`9f8K!rH$bk-y=82ZxYw;MHgBU}aSye}97&zURN3>-DKVF)) zKGO2?#71}(m2P4Fd%p5V-FF}Uc~~i8g1x@!ui;Tn6!j(7`6JZ(x8NfK+#d^Z!*RPA zUbfQrXPsl44-Bj+NDE0wq#G@*8+bjSa23up`wSjbNt$D{?zo3jS~dsc3>`p8 z&H3>kuOk8?qZAsO5)e!7ygy|0%u65cp?|(M)4jYgAp@2Mmh4Z5WLuJRO=8Qg`j=(? z`H2XEN1IvNq5E-$6)K=t0&O~<=WGS<}LiA^LB$n@E7zr%^i~_#a2{)oi(f081pdPg0NcKbZX8R)ETGvzpI& z$vOY``oAYW{y$KKx(pP}i~8@_6OoNmJls4mAHLR|ddKkh2=-Oq@AxfFTJ0G#nQ4FnU5&M}{uwP29S@dymFr*#G$R_sd#WB-yMa+iumDHCdA;U2#s+#@g zEUR)p@5;y?ev2%imkfo@Ww(a3+=q6}%z=OZJKw^aJuNANq4vWngXbjOs6@^o?O;(? zdrb_luIfrzbREoh<34$Jd-hqj#_3>fv@y>2*Fb;cE0t(TCKjdy=)Bw)iUXa-7TEvv zj+0RcSU_`8um+ME3YX>SYQ>7gbb9#$UFqiPZ%1?_yUQS)Y~{gt>_*Ea*BiR&MHnvqDfSt4%%=FJbUFnI2X7 z1szO*d4W*ZKQzC`?>DQLAI^M4xg$7%9wI?*eW8Tt8Ig8KTXEmbJ5! ze5Jo9I7-`M*O9jbDX3WD341`lOx^01bREimea|UQGLx{-b<)NHj{C&($sr@*odeF{ z*AlbB)ewsoZJvAx3D1YK2l1~F2p-kdmFsjZn5%NpISMOT(POm3Tuc0gqkfRj9;tZQ z#@~OF6L#9sv8%{^^8;u8{6HVB_io@ed#JKKO=mghuh;^eH-pa}NO1^!H_`J^@^p{h z!I*AIYfBylS=R23R4lAbnoc^<&&ImX^FJOT)>7VNI>5V6UA+G=Rb%^d5n5~(`Iz1>wxOTnn1y_~kb{cira z`_pK8ib+fZ+PJhjf$mn9ul5UWn_250L3QiPla7l~JUllKzQ_A?!Hb`69ATHs*-^#% z)EidE7g2?mtH(n6gww7D^7OE(;;V38No8oYXx3a)4>YK%G)Bf3?X9sMcMhzBfDN!c$q8aIs2!@ z&XJNmU8QFEVOK(qT0@f7ko6+B+<*^t9x}6(fzbTZP9AuNs!aBW_u6 zZVE-q^OBD&=T^Ty7tS)dclr0wAbX_OmaWR@|mPCOG>}g;Ee-lurzbX zPfm~W8&iNMzIWEtc|$z2aewBeaNR8Uyy{95{hQ%bGq}QObux-NXa1g9nn4E6ELC_-B?FL{torm4sJJcQ&45~#mrK91C+ED|}u7a>ElVoKd+&eB8Z^|E;%+kyC^KJRwT~`44 z^j^q^D`3TNPU#X|Sv>=hKqbTj`!lLd#^vj|(cQeN*l5UyE=xPQQkw$|g+`}@*x`|d zE=kYqeqJ?oX@ss$F`AL=hy1G}*j3RRT`u)6G@D^xo_EA#2zRWkOmt{g&s}Nn)l;KC ze83TA(`B5~I%e^PxO%uRTKtaXqDrZXerFKAfzD?uBTvUe^+`lH4ldjCG>79z&Vg!j z`ys{V@0lv0d__VEDw;I-8oI_Tp1U;y_n#x49m+tr&5M`tTMwk_0HvW@tCVF~qK+{x zS36*i>F#}>-*ZJWUlR^A*jlCH33(Q=0A1K~5>31{vk&*}_7)V6dp@L7ZWq!4?v2N` zeWy)2>6S48<8u)2GqB64TJFit7D5{br)GL&?<=bX;Rnb_Y0-R|-NP|Ac_z1I4e+cO z&Z69p`R>dY&&Ll|6tiYbS`}ieeZtVahctK=ujj}-`sx#HR#vyS+ns!()TJ$!E%g*C z7U`Y0CoHAi3p5hFylYNUknag^8|K5Ucw$-=UC;BgtQJ1KWvGCBXY|+RbIqv83%ai2c1xvkUauaK)1K__#T-4V5%xactdaR>`;z z2&yCaWtHU@k8USLyQGp1h3Qr;&^yXtJ)X9hvn#7oWETfL&5pfD%QU{nVf_dLPu^G!L)YxLmNMOWWfiKfOJr8{YD+Ymhg$ma zW@owcH+Jki3FK%3t*-8bJPyn6|E$(Z0DavSL4ilpeU=qtA7q!MO8VLADgsUkkE$!Z zznXQfB(=eqbg^T+ZJMVRY3W$b!F|RI%VM{AWlzV1UFVJrk@52VG@wj0uuHt! zYePGi)C5h&Byy!>W%A>=TjY-*9YUsQ;Sp|-ARSJ}57L(s%R(aGiQU-EFHqq1JO`S;GPhFN`rwW~mD5-^7 zE`LhnVem6>>y|E$&PH736=qwAbwUtI?q&CtZl8C4$8-<*du% z#mE}FrM%g;LcFB%*go1Nh!9~}Mj|9WOPMX*v5jiiG&I%yds(wX$P3!mN7ELwXXKOO zuyHx$+5HauB1j?3<(CeAfY31D5)UeC$Fh`_X+KA$SS)LCe^7Um6tUMf{;vEWyGXHS>pm78iW5KJ&XUJh^u}jwYdxS-Ayb9Q|tlT`i3~{sy~zI z#uN7l)bv&Hmi}p(J)IM2LFW*GK$7UkQB(Pskv8t(p}l?dq#iBW9RwQDf@QZ$6()?c zSxZzCq1uKwL2!F{RAWDCm#WHd8N{w*hhhxk59CC+AMvF$kFKoUo;p$gPL_!7Ldu#~4>0abmcIuDKf}-@_YrlBKN-Ip z5UE?A2*mTDTlYD&@RVw*&WF^k?7v@IeQ__jJ{S1sluURjO3p=VF-I@Hwt zSEagR%5-Gcoe`1=L3w^PqEG9=1MZo+;wsThLz~9pj~{#(Qm0;@gnw}(cLcxb9SICn z<)zAbISQySwgW*s6a zj<<7M8a4caqs|CrayEUIx@}P5S-gJVSRyx%*l{sNSE+iRNNkr&orBk@kJ&Lq;D(jX z^~;A{OxRiD)Q`i8@Ah#{y!m?70-`}rv!*Z+*OMpI`p?-%mQq_3DV z5YlNTI3B;Afq1b;Z$Za6nU{wHjZ=8+g|`ci2^OWJ>r;ES>Wr~S$6Y?aQT*p|{Skw< zZQnshy{x%+f(>=&JI->!8Fg4}fl<-$wYx3({)fme!Eo%OuvEMA) z+01rYws#cNwvUkUO`gdvyLrz~=KsguTL#s&bX}uZf&?c(aDux9cZZEjkl-5Jf;$9) z2X`m9yK52%?(XjH4&NdP=Q&Tk-~DmxR^4B36-80N-mCXo-LvPIbBxhdtwYh(a@2A1 zdtB^zwFWn6m3FgTTxw#aM-(Me%w^SIT?@8#!Im#h8sq-*(F+Z}vczvdELrrg**CGX1s0Pz)JTPhcqx^&=8iz1y z+uTDREBfw81y2S2bSX)MbNo9BwZwIUZsmtg$UnO>7`PP?;b~xryEXBB)I6UsTa{y? z24{7k?>8P2-vfGr1;NttLjR7zdMqLB)>$=D5QO8Xeton`pX@ZP!>0hg$5i{i;Ixgx z0vGvKnXSvlSr#Q(Nn?v2Kxv!rAPax}qsCwf3)*0d%6RZ#yuOON%KM-vMQ18EA+Ojt z?&=2x?+ZheWI|CQ`+#6SR#%lf-=EGEdg|(!-Shd`-3`(0){i^k#*44i7&ogT)o?WIMBlH$ECjP)oHueUDZd2TC>_@0Chzbgy}GW;Gs z!4mtUU^De+myN~aqYKhA?VR9J+B3qlG7Hbc@HQkWwY}!g{S(-q%SY5tHJwP-(BF#l zzlE74d!SI%Tq0>B`1cpTFH`c=B$t?B|7|1i{PIb_f#srst^@Yp)uXydp!!5@va0&; zmuo#WXLcK2lSBQdc0{-&0hF{#vcBs7`{hn}K=G+`S0Nes?=JduF|YsE1C`-a2Fy7` zM4>oL4yXRKrk>s>7a6DuC#J&TCjM+#l+O(b%{;}(QuuXbEfIo{@het_)2_<9WmZiF zU{_?9l&l_18e0x0cf;BpRx47lccncXAM3hYk8;M6@HEV^+=1wFt&4G(I{sA`i3TI^ro z9TJ(ETRPTmWbizXf$?b!IfZj28Ne7iv&9m))|&w*iQWq9s;Yc#m9T&#!XA7S5XdIO zuBs{FBp4^JzWS#r-^ur|T+fg2oBG!%=(vTsI;rC9PZbUrge-mZ{;ET9+H6v>9@F!B z5i5cwCLWH@5RmuzSrrM1iCkS_y?!Flie9aJ=y8tnX6i}MA3GoVWo=qs5M9JPvY(? zxUp&Z!TUj7Fs!wDaAzf%_2U~Jn^QZb%V9^vA=yFkT!WT$md4ZT6uZUhsPRsEwwMu~ z$Eo~crq(njefIn99nj7xvDIO&=P5#4RXNYC`_8@4*#+kH#?1+7-CBrL!^LO$*ROT( zh732C)fx`hdETpz7?U8;N-zg$O}pz4JN?HQ(-^dGb&zxX5* z_9{Tx@-~&3CR(fhc1=r9ZRff?h{s9`j>qE^-d@G1vDmHUI+9UYPp#)9^rA|CcuW`$ zVcWgb_67t}Q2L;$e<*(hCO?GXK>q4MTQh!MQc5zWJ5z6KL$Wi$4Cx}dkLw4-bE-=L zZZ!dwkS~8WxR^Ev{G-a3FHlEI>KM{JK`fVZ<9xW%kB;l@z!<1V+I^1*mzmK``kK7M z=+Bfbcwep+)4wt~t`a`Eyv#fr0&_WP$geWgM!2`V)}3jPeH_@`Ijy7&ou_HfI?!I2 z%A8{+GwM7^SrjIXCI1>kh9&>tU>o>$n5~st&_4)=lA$dukzH!>;EvNi!yoFlFnH|K zEQ13=0vCtYeqoH*_@w!+D~V>y>&3Kp8sl;Dr>&mRvV}Eqg|{d_SUf{UV1@;a^jDf_07$%3Pcoq>60!O3)8T)A78&<4XrS@bKT~r?c)u7o6l~Ksjy>SO2 zqrL+yc~(pZdhRD|z0nMLc0HqaV>d2euo3KX-GG1W{)=YUV)Hbwx;+u&)^A?n?5?WO zv3MaiS@(vh%iq&2S+>+8R?Oe|wcBI{wgdUJ02^PbB)x~8OVw(gZ3Q=P?BA9`+bE1v zAz7D1@V5_WEAJi0Y{7hX2^PM+L@<;YCod9ssy^|Y-SDOk8V2FkoE1r>CK+Pext=up zRJonYXLIdf&qPb^0*txpQhCaV=$MbiQQXCYc;i|?tb#bHWD(omytMdM-B=`+Wy}8S zbkV~VHO1zWY{(9cL(io7^^AUxfVOCD^`!Czx#?;nM>#XbqDzggEPC^)p+~9Gq6J;{ zzyTB!pxst|qZV051J#?RI2X!Tu%@&QC;dFOMgUK zO)S+qcw>k;^rA&i{Ywp(ga9IZ$2YO^gyE}=&mjv74{OTUaaclekAzVeQh=8o#1!6Y zX!fcJ{h(J2tQ#?n@X5N7QDjqy6cgRf^hPs_OUHY~MbTYH73xLv1YwHI5$zH_QB-^V z1Cppl|FP+&Nwurl11X}Qkgb-s-U2ny0mUtoShAw_t>dIUQP$$a4NUW?{ad47d+7vp z*vlo-B8`8F@fzZ7NzC3lm3Jv|ZaDYT;-PS4WT!uVd&LxXimA)0?p0P`mbSxGOK%?Z zmS!*VRDL~hvTU425Z0iTNr@;j{Z&ca(oCl3kbXfBJiPhtW0G6Ch-z>d=B=C1qsfpy zu~6Un`ml`W#-8oY;Z=!N=~r=WyGc`*?a`kSQjHA=?0>Mj*Dc!7OKHMrv{k9o7K8fM zWb_j|jg3#!fX~eRF1+jIdiOblpv91D;k4}a`uYnybgrFX&};bef`-&rn`vq5qnNv{ zcd1G*g89(LAu-3y9N){m>WoB0Kun+BJA4gvbaDro0-dMN<8UNtL(^NQ+K5XNK@?37 zebbv`i^rPP3l73F7j*^%pJViv*2Siix|5)@3kQC~(*;sTvNd0FAx#r7x`@3z9~ z0C)_%;aWQ6TBL*k3bZ$*IzNEoG4mQdT?uLwwkVXqe5aC}!nB^&EYERF5C?4V$4~NV zzicLY02B?Y*)siO8i_;DUkZlZ>N^Z+kzv}GWHpV0*xPrY1tLZw(jsX+DTc)aKLuy| z!TKr7!#&#yo&`C#3ncg)Lr*Q)Y^7hge&00N0VlVocw>Zo^j@0KPLc|!iIEv~$i^`WVdX?piJRriIoye@UvkP66&_A2O)0<;lh>f}sG}I4 z3xZ6>5-(bc-`0#BOyEk6Ts~P+3+gDihs`~jhKnDJ1zqTyS$M8_3yqvJ><=5}4J*m=R9x$F)sUTk%=4^epEj*f zRT7&ha4z+IB6Nat zGa90#+@G<~@x?LeBvz}E$#UJC&&n-xO+*Vr#2+0cv4BcfqzmrJie}}O6~V^v12FQW1&u4oRSpR2t|YPtO(#t>Pd!K$6#1l(ylM~`>B7zE z@r>AS*CZgp`rOuDd8nlB-X+LIv5#ElVQb&YPAX2epRNk-l9yrko64OP{u z5T<{_?PvFFdc)=1gmyO?%0nBr;hwJxY}V=LEL??s)3~G&!A&&M_`AlyG93wBMLfKR zHFGp3p83FgW-vK zo~(sjHe#krPOArb_fN``4yP>LKjB!cMW})L^h`d8!%cE`uW)&?< z+5Lwe>cWq`uv*Mq5w;^W=VOl2s;#bz-0N_t9c*HM0sA7!(te`Ot+(mT^*xU9u97?d3V6L<9l-u?@bfx%2YK{{TUyk{Kr2SzkJ(GbhifBOpl*@}Sg zd&FP@76jyD5PzANe=eyBpuYyy|B$AB&&mq`Qr3i_nf@CRdU??Sm{603;4=hCE#}c&2*03zGA_99MNo*K3+p*?fkVTXJks5crJn6&ket+EVgR2VyhBqQlzx4d1vdiA|mP%`oS ziWU(w7dP3#GEM|j$WSuA{AOm!n3v+{mVLyKSFrKTkVYc6SZ(G0r<6yqg zWcAlq<&N*)zeh(#3cmZ;m%g=STxjn?(9qCeyx8Ji<$U@PP%`1Xc=>W9Pd;<&Y*aS4 zsEDRn8eo(nk^=M^x#Xz?NEmiSH1_v$z4bwvmwpy6NJ19{GVUKo9l;3pAb=;%JZTra zeLzm$5Cc3R8KR?u#={XnDvxlP8WACIx#-D9`=KIBCFK=;lU(4k7IhsVH+M2!;~tX> zF!b>XtrY1b*5T|pEeU65XP3h5WZQuZqcr!}k2%bPP{j2*v)&JbKcLO{M98X3_mNsWya1>Aj^b$>tw1q8^g1JdBL(X@wX zK!1j1%VUvIUM^32b9*~lWio2q6HOVNoLtnCn3%X#znPk;D8un(W_Gq(y6;ey@1D6o zjc<`A$Iw9Sg3)G0I8xrS9QbXt$NjE$QtfvL81`U*C{)>{*9u9xWG=mAEkGOQv=&+g z7+_U3dV8lb@A$Ooz^ZDwT3^1Qkv8X3g&=T0Ls{S0h^+erSQJn)QXdfLJ*nJ31X=a! zr??)}SK03>&$PI6#Y9IBHQ4X=W%e+^(Ps9=lG$6;Ex$B1Gb5gE4e^>BAJ2E+o2iz> zQ|}QTo1FZ~G8l;$n<50H2jLhMdNMu!u|bMeOg&~;HUX>wu$yTNhl;BhTVHs^A|bx`B(xRW3$&Ttvf z@Z|yy2Za?XTFze%>Q)igD~pwa0t4j@T`%_J_0*|5xnS6%ye>RdZ(H~J^mP{r)5Z83 zFRIMsO9ym%lZo=GxfDz^0HVkD8kAX|HZK_C$z(Sh22LJAySzDQ@Ps+Xi4R8d8XCzi z-D`r!KC!TVGrLxvx9SA0Wm=?`ZxWT>zc&uPZ%MNo0lmh;%HP4`_|&f93CPdS0CjTy zph7PFqs4JbEGGl9^$T!g2o}5@_rqa=oDYQ}1l+dxjm&Xs)kb+!H8{#EbzZ zxw;qicuz9&?CDCQQA}+&0VYn`mVPEwn$Hf85BD2!S0b}!(1^GUD*Xcktn`<)geABc z85sqMWJT*fbw0)pyT!Gp!9azfmJnDV81qZEU#+vrtP|5?wMP9W4D;qkJUcdBUX$;k zLVWsa5@xUE(Z$~ISrXgF#|hoLu%sb~1YYywM>31)iZ2Fw>B7h1gL+JA%^&-*8}@5v z$2MCY0z6LvEuGkk3T=(`vf!!5&5VqCt;fB~h-j7Jx6F^R5bhg&32KZB0&Nxm2eD3C zE-*V%Wk0n(mLo<*bBEd(vVhCHWe zsnEgu^2cA;Ldor=H#k~Z6J*R56B7gkBacqVR5}twtR=467H9FzT)l0zNI^jX6a6e* zz+-hWty)!pfr73!NR1@2Q`X}IjRpK<>AO#ra9;!wHyWGy$udT0S9>C!R)|PPiO+2&iiRiWjaElqV;xNLTe&`bsN5pmlt4i zJnR$Ci;_5%Lk|(D2~^xq%c_(Ll@s_RLQIGo*JIVUx&hTXR(|ZT1>^L^ZfPs)jBrfv z*43<4t2BYz5%~UGy<(sV%91A#7`CrB(`siN0Fm}irEfP{-0L?mb=1J5blk@pw20#} zhR6+*Q+Ehs1?_E5subus3)9nMm1Dfx8z>5Z4~Bz&utN){5Bk_&{bd8>uiz(d@)dp| zMTFnCfJFWph^f)8qK1Z~DL~Mm%BeD-eyt9uumSb$8&&}#%YedwDV9l%%pJ)o9vdu< z)4q58-CE|341aal6oiEQ9ci(Hk$@_kb)tsqD?U%6a;a8vkKy}fdhbOu{nt;fbU?im zVoS?f+;JR=4t;DS?Bqq{UzAhW~e0xwXOHG^R|OLRKq=z^v%MpH{+#tYy^BB-1q-OTD@G!^+Z|i z)H-frt@j~2S{;(@^v6yiD|zBoCRXSs-Dl+bHS7;?wq%FZmp1_D-F@PLFm4X}l)M9O=oixPvUwg<4j^TI?!W`lD!F=_7Y?FDHi zc5hXLTuC@JvMo6I?4gh6rn*oW8XC%LY2i0NKHQQ-;gO1->zD%`GCi&8WV}I(mwpI1 zW0F>Bk#aBp5QvxFK+wS^ZN}&5(LZH?OD+&h%W`N>CIhwD=ja(!+g*pPj~>|XK8Bc% zsarLRP^%;oy#aa0;?FTD)fw()Ys@jV8&qUw6I9m}8|dKXfhsVuytOI}V7q-m9HC?< zqy~#XRCiZvajS=GW*c(PJnJDm!^U125sc2PMk{A)U<1HagpkKFpRkkW5kiuKYHJ2 zdi($AeSsXW&JRcm%-E4OD6FsF{PnIphpK}2Ra<#Ii#8#+1FARN;=IO1LnF3wPt=my zURu(@W;It$o1Jb{K>dCe^L2RP{x5mK>q+FH&#LSyq$oO$u7`;v4YS_znKmPL8NYydtEg&?2DyG=fjR!wYV zwrNK5fg9k6qYKNf}8sl{7LV51$C@PJKdpBWzhZ$ zA%pea5;IZ!@n!ylWx&9>o)7{!tkQoWgth?SL!w|s zKUv}a^X2s~Pu%}pOy@~(8UX)SgY@@Z+Mb+E9QXy%{~6}f4-A0Yn}zVpzXHL(Z=nMX zjEaje1MXi}0%XYm#9<}!dGd(+&sUibFe9ohyPa*2h4Dwr(^AdZK|2WBL3&=IP^N(SHpB;z}8KLJMyUI1idlh--TS42;8N@K%_e- zneON}X^ciowBIoZmq;LDUhF1U8SP>GUd8Erzz4lY`Qf61Y8^|~22)M#iqiS~A)c20 z5hoBzv?jCJ-~J~MfPt$3E<_Hb7P$Ye!L;oHq0Ch?ZpHWCu}lL5#HW}l8=8N=yc8(5 z?AvPwq5baz zwYgj3Js3QFgTq39{xjL?UOi>n+kxL}iH{zqxsa~dgLcFC)SEB$)N9rjTs!bW5ORcI zc=+=`;)1vmgs_jkP^f}}^spcpUt|~mDIFYr4eLYAUo|uznlI@d7n4Tkic7Xh3N@~I zJO>)N-f?l=&a2N`87($(oKnrT`W^q&+gho=r)1%XM*ZfK*HDrWYN#?i*$B72n{qui z@~NRyhKOb=j7Sh-?D*SHNY}Nx{QDnUGadPBleMx*tK%#+LxFRqoE`;1p{WH~JBhzo zuYVyJ*}sk%AH5JFwOevZu)!?)yYYC<0@K)wY%7#Ld-BzetJNE!xPkpiKTQa$?D9G- zW|oLptDsE2hg<$6H>+88BQ+*X_C{LBUE3lv zp~ri7g7FEK4=Q06e`my&Jun4@_wQ4CMLv^lU8#&0YVr@&$G?`_T{*e*x8uJwccT23d1Y5wf*^^U5WNMp(ZR{=2jcdYkc`{W&u@$Sz zJ2NR7+QyGr&N$T1%bE`052%&;E?;UWq{B9B;Ova^j2X$sv=~R-?|NdL_2hP*ks*k~ zW#bGINWD=0F{05Xse*qst2I;CD3_x7rZF{uy7Mb$)=09=F_p#MlK9Oq`p=Y$nZ?T= zS~D)`;xU((yFzSQ?7l6Y0*NzPOvHf?cQ?AG<`pm&G2V}V=XE+@x{EgT!=J3oaAf** zDaIHvv}k;N(_jg_XzxI&4Hb5_xtkP2cKK2W3_|+Ki3{haiqAXKEI(#$Dy&Y*qG2S0 zUS*`WwY--f7ssksdM~G7q**n;A38Sfzet}&cFJ)wy3su+0e5zpNtvlfNi&u9DcE%O z+@z$$BFks*@~-XF&~D$^@_gcH(R%dpo}i0&rAj8hlccW-s!5owlLmLU?JyJ1?dW04PADQ z#8-8(lD0Q5R}adL>{83*oh=c19;Dz&#r5wR;Ts#zEuZ!~pY=6vzgOCKDodkVOlTlO z2+KB#lU7#ZJ|B>8usr6MSn&t5sO70i2{lliQ@3kqUQg0C7)pjcX0|bo?rGVW6F3Wh z^;r!rc+g&(PqJ9qDvAb6^)E%tTZ;%x8ccd9MVqJeB7?WD<;M(ugELKks<93D@b*M+ z)dR}ePN~sMfC(ig>YA9N7N_qo#6aan&GrbPmRf^wO-9-m18Ff*dnozywvKFf{|guxQi?+18R z&p(qfj2L^)7rN#xs>O)BA}0;6llT2p*T8pg4YALyAX-YtC(sxgJ(YbrdWe{t4mN80 zixH9hvaeArKkHlSFQl(I>Ku_G+^;&pJQZ8g(oE`C#VMP6=}2$GVhWMnf{n-u!96~C z1sjo%+8$;pYBryCVQMN(CKWO{m+7zsTG=A_L+=IPaqDjP%Yb0s@|9#JXmS==tO2tX z|Mgg$-x*TwZY=!!knA}w?UWVopn<{h243^O0f65T?RNkeIE+_$wIf8{vsFGBHsn4T zmhPo|%w=f6ERDsHa8Y*Uez9*SF<8WK8k0J)ovAPtNEhJ zS^^c%WPUTMRJI%k1a62qmdA9{iZo#`3?J(B7V`e)Y+ER>Tp&7OSHr+TM02p&Gi2dI zOh(f1a`u&fFif03Qh8SyKh?TFtXbpg$oC1*#(vmD&AAerkH=se1v;06(Ck9u zR2to2g3uQYMvFbCWRei8_9HN~ms=n8uxV3G0tdM%x>q)irhjo)#!rY-Ph;MUp3gzf zVjF#M(JSt#qH|>~lqgj&$V*|c+t3*8NtmdPAy?)=W3(8@WvMGW$7<*7-M-)>h?nt! zR(d9LofNSeD{Li}q6hjooMyh%Pr{vexZ^w`sE?#G~J~J|Z5n#z8Lz21@>f zWDEKB6StX|x-{`+S&|QHVDDDYiOA0P&#dcIbwU~jhm;=Q#qVfGtdQqPAd>|&x8dai8n&21}^}FN_&pMvQ!y9=(jDXhec4c1^#HacFT*GmJ@YH~E zf1LPQ^FthUXQj$U&fKLMOAbsoq`o7L@Sk1IFFre5Sf|oj(*MKLg#zY)MJXz?fI5DOxpVPO zgttxD9EbPEYMFcs-?uHJas7u@GMtGP*!=O`9%D1HpWsaru7`|KU#wkf@RThV zV8)VD8Q5qlkL%E3|8~evysPRDlu>S|pdnRvlIV3m2<@XRcmi*xMZx5T0qgyfPSh$=e5oCyA-+DI? z<-VQnkAHaIAC(iW%$z6S^xfOT?s7cScs-UoXqA23@o0@65^Xlf#vTm%(cVxK5m8r$ z*VPm?o77*C-Bx@Z>#d=wy}tUFPBbfg*0|c*3LOce?3$Bc1HKa*pG@N!3dK4BO8TN+ zDq5sB7d!mef79CEd(dsx)AQSwDwu@Z`K%Cp>j#f*$83ExXoZ`x=O&4}jk)j`n|jwx z0;d=EWh;RH6pB`~ZUmD0;`kSCgR@DZTC2I1XX@vdWVBsw{Bd?Jb~Rr#N@p6*1O4i!rBGs*}tj8PzsPr?2UdQD;vyym#;;g zhxEznlxJ{1!wduI8zt_9bmKc15|nnX(cZ1>u+TynbWv;9u-K7e&p8RC1$IBtT+w(V zuxKX#chsPqmFQISaur@48TaYM)g2MY{z~eas$}Knxx>=_oW(gN(HJw+8sA=H^NK!h z)kTAZ>OAUQ1!$H#$7u3z5e!bEFDp{|6@86PehOoF8q{>s7W16@Y4#Uh?1W3@=SI(K z0*PJ@J&;HB6muYE`ovTJdDaDv}U8LbvU1Y`zt-iFtCC=%O&u@>M;Z4n$S=(n+)iR-2fpT^;Dvl{$jeAz`;)1R*f|@{p4y$QXJu$ zXsGwbtP*2{b5Xuw&CyWv#!2;`erG%Y&z6#g@SvJld&C^u1XKP&n@>OJJe{SG2vhTK zNjiTzBmgV8z+Q>`*KgYr0R+N=^1LJd$%Xi#0j%Q)h7t77^`4@O7jX82sTt7}Pyzc- z-NYLaC%833y$gv)@V;{Grlet!qJwgU6usuX{iUeAA+0ESf@sDtxg zWfxB19K#04GP&P=4gVmfBG@Z+a-BwfDEtSg8;(gL2dt`sWhQK;wyyo49FjpjAZc@ugoZkbAwEGrBed@ zaw05on7t!{_Bo+g-qq_2fWaZb%Gm|=>~0q;Vbx@*DOOyIhReEMtjUrOBV&}VD}A*a zZr(Ky;=9O%WhSFl2wWH8yDpG^=*L9L#)*ahmhM&KzI-biJvuLY@C|VB+_qU*G@eZ5 z3ST2uR-BaDyf-gai+dbM84f$Bcc{C@wf9Tj{Yg)dHNQ>D38E$c3lVl@n{A^@)VaeW zulz3w3->qpG2D7-qbFMFB~>MoA}I3ALeeJdS-PK4e2A$@H^Steb|- ztd8QX45#(Y=j)WFrWKB^WB=?!X&E^x9Wx2_dnd zVMQB!ia}-9#`V@Gq#cr2#Wu%FYUOZ}Lq{Ac{7w9GF z!u|Ymfjd`d^hhf&SH?ugS7CF)#t@A`o_W3VJ=T*o_3g9q3pco>)Wbt<=J*ng_-~f! z1nx!@7R#Lb^`3bt*R5eL$59Ox(IGGM>Ud}J~E=r&~<0I2`GpH3W3kpvL7UX2g7>odJ)7dn=RcU*^@a7CiYXoSCZO zVK}HFKDS>+!=uGHV+|j5SL!drhPh;MG!k;(q3byga%DMX*-M_* z*}cMM|IKNqz3QK5WAkLSQ62A4@!(8>bWz(98WHy5m8*V%(?{V7{g#@Bn}vP%{vI|2 zxz_}_iwnG|Yv)o%7FTW7)rD6g#dFEM2juQEZWH^Aunv@C^a~@BR@@5{LZrx}qJ*k{ z>iGdK|~uL&A|c!xhZxlkFEW!JQ&% z_*5Y;9C1a3k%*E07IgsEO@Iau2~Tvrk!^xIPt(8rMQZ6-?E*fr4If=Gaqv>^)ysKm znqAbK5;p0NI?*U?O4T{uo+}mQ)}J7noep2KP)#yeem8k1Bymp<)~wQc|Y) zbB66wGgOm2TGu#}-;BlK4tn&NR;Qk;h3%wU+F?fQtEi4+O!BY*<;krkED*pk_lVOh zB~0}$&m>#6Q?}~OB;~$cRx-*xN(U**p1v?59R){Jx$K_Ioheoz%Zl(00BlHKqAXlY zvHIV3QR4@K5T2);Hu+FWBLCD&wJ+@!VU8-s5FDbQFWIYm;4Oj$A>N!$9F^3FFt(vuQK;q08(u~wz6+trbCwp*9 z0KyQ&HNr%!PJFaGlVpRO8C^^M&0g*q)i0p0M_2h$+kL<+ zpmBP10y1zdeo{<{yzw;Oim)`tV<0?dVNH06)O8~sI;CrYx*;?B6%&5AkX3T^*qkZi zIkVsuPUm740DUpMSoso#2Kp#7#v0ctaer5U;xgK_XDV$SX{0gX@V50>X2%dyWgf%o z!;f{J(yVs3hgq@CtzoWT`MZf-16Q7a2B-5QT}EbZK>$l};<)w1o6#ac(c}HC;Ic#E z7a*(JslihG@6BT#G|{&sB9&3^<2hY#5%7=!(TFK$$`bv3QlZRnMhF}n?2crurXI>q zXTM2?4(@n`*(}}RGoM5FT*W(`A$q#_hwr0Vtq<2APDj&kK`ibacMo&a2eQ4b-Pvv> z#7tvpWJkQHg5>e;#ief6nI&+N&k^+l#C!&<0jCYDKhAggjx3@5LB3Qe?Xunu-{oPF z6=nZA7Qv^TuzAqT0V5oW8`*KlvwY#|wzHFxr&2=XGThqxl&oX)E)e$22p=$~Y0xPF zo|mOzwWSg7{dOz(*}GHkN0R>Q*IpElG-8 zR7&LEx!Lt!jI?X(5Pew?{{2#mOCi#tDAQws75z#FLW36`^Zp$^yi+eh&B%=Am$_i| z+)q7J(xoPe>M~J%qE|zFh(lJ7<%3Oe4&TGUy+jKOEVH=qXG@?;88uyM34ppN%V~NR z&Lvl>ra-ApX$6dt*{nlew8zbuWzu(_u!mdZls>j=iCy;)6fUisC5rjS75tvA!sP_y z?9zEXS~r>7u((k)Zl7<%*a(WHlWgaf8kYKvWr%-sVjhunY8LOR>+1E+?e#}PxnkXx zU`~t~ZS&sTB>ZW;hp(3A_w)OR(&3!~Z%RC!-nsW!74G-D&?IjDJm&x$*}bveF?(Zu z8I9qkshBCC$?Zrn3jJ`CM}-{6+3PHT)Qy1jiqI2Lo!kdTa{4hpV^~>3LhdYF$J5l< zSU2tCtQ*HTgGUE(1Si~dX+xe;Uhv{4ic788S=kc+`zyRg!VXWO4I{Sh@`5soMMjfi zF zQ@5g$I$}`uyHU*zSfY8~FRENy;1RZVaOdm@JCMqj=|$>(W4XKDcd|E|(zt)IMJG*o z-dP@OrY8l%aui=w(c|KOYR!+fRk-W~8;8_sF7A>r`)+%^xMnodd`|WRDWyypHG&(Z zDfA+$3HPG5C!>aE@E2$C(lFR%iHzepe7eUDk&=he*^;0RbzH? zpxKj*^y$A*6(sz?k@jsw@_rj>8Z>o z0fOIOj$O8X9y^34D7~dTfpw4ao09seNw2q_sp&^>9Sfq#o3o5_Pj!P79}70ZAzC^D zOKYu#Vc!AYGt|Lg18 z;z`FSn#u5)K~NYRk+T^Bj|FDTEQz38V}G{wLin(WJV{!bnWodkeJ)OmZws1c! zSy;-D4j*T(n6+CNjE?u9p?o!{!NMO2h5bQA+HRSFkv;6O?Ql%q^-ogkhW6qJ3Z z)49tw*kenTmzCgkv=Zykj>UDAo-Lj98w_a=4=22_T}&8+XE=@t(=H4(qJaMj9l&mz zpRCS~yq$jTL9o`+LICD-aXI&XBB%XM>l~2dVs7O#m7hmAIol52+LDpU5x%m0F0Xp= zPohxJ6lSvQC0?Ho2)eA~Mp61M;&W9(TjH+L;5g$yaW#DCVk>hRM!1^Y^y!-Krfu+> zwq%2I$cC>gZ-?u?%MTQYJbQ?Ed7(j|k0Vq$sJs>1>dNF1>lN<=2${KF14+|^-KkwC zWWX9&uw$9!h#Q<{5iTmo3FOsEE9RvPd`oqg>boSlV(s=^lmr9cgfiVF?bCeQsJUSi z--vqZM7F9mqKF`1L9#Nx3%rlJd%w}-(3qg)N3u~&^%IKRyoqFwg7nyj>u#I#1a2bH zFH7p|9Od(q?>FH7dBVK>{CYxGhR01oB311nHJBSE^hkz@+)RGNb|g`Eu|M4Wf%O)q zVRoF*vcB?mr!r0()Xo2^)Zw+9y=GKGTgjP1-efol4-EjP7+ z?N~}0X^wpcdV4AQZ_H_nZG%YV-_LgpjsH29eVk<$%+WqyKZi5V$J_1zoptpZ2u5iQ za~86!4C$peLWG|10LV32k99-k+ePD0qMBbsir}9?{rN{(?p2B!&ftidJe~&hS5?Ky zN5jFFTY?}qEuKCs9z{z$$vZ|(ppA5c+g+3ngPFq^CxEpgu_ED%qHPdl`=<Z zK-48nq}mOrCaAoiEcKtUo)kN8y{!3h~{= z|EbUgg9&E_!G!Z(NI!Vtz2tH8!!ESgb~aMj$Qfg~gvMZ6wD?Nlb1LqgN;1^7tjBf= z=DHoYP}UfLotS8WNUwX46B?vsrM4+6QPwR60WhV3wV8H2!%6AOq6~-P@kmX&nct87UlA}%?Rhy76@AR;1@z5Q%6v0 zB7b>=Q|1iXhKaDn}Ol{%ckQhL4_Ssc7V-b;;HDee7einq>GvDLgq?e!1l`iOx` z4_C+auiJdyJex%h%|l^GfzopqHy9k}x{1l;IWT177#u;-xc&@|WK>tJg-^Ev9Yjz{ zPBIln7eBAT^zO?#EwO1-c?*tlNZ>F=Agx&pVQ`i!K7&)bBl`N0&rh2^x^a^>L z>~MP~fp@r_K|l09l@3D4NuqmG#0#WA!<#_W;RnaP%TgCR)bDM>iw!LtF=?Fp{F2jS z_xh}Y@-^z(=9wMJ#sIJnI=ltkx#@fZ3(R3da8RXBY&v+g;-oo5s!bV)T~IaN`aRJ? z3777nB&czW_Ynh!BE)V(|1T}GMJPR|CUBx$2Lq+~-a2re!BM-sD;DdOF5wa)u-VTqQ>7!= zF=T24ntUbVsf=7Zy>k^anW%Gm+Hw+kco99Ou#sbbkH-)So4s$I%@v42_&|gYAlXZ) zK3})lA9ZH9s~?Rr0rxlj;{C*+PIri-US8b~pT;6+H6tos@(#hdP<;qzJw4j{>iTM& zoQTG2ASJeag)>1kSLB+VG5I&!(h1XBc5*W>5BFlg^v94fdWQa6f87psNmt+SiCJKz zuD5VYS3zC`{!3hDZcR7u$C*d4Jz{G06zTTau6mV}*+%@e(-hK0#?He0M*}zzn-tQlagM zVE>^5JH+pubZ@oyX|hhI_96cy`%4Q@B%em(W=~D-4+LEj1w^s0Iiw|v^-==0!##su5kRf4J=s#ThFg?Neza_NZ?*|s4Voh;Lp+0yg%gRs)nQh6CX*6HCoV z8_0y><(BHfm9il%u@tBuY4R(cJ<>b;&)xAJKruEpmq&@uB6k^W(K9u#L9iwFG%^Ya zR672)DI>Kt=Us*g;{*nb5vfkxSg#ZI>XhJ^0}T~$RwarYa@9i}wL`cC&V?e2gl<0a z1;gyy5ff7U!Q}zA2mX}x@yaZ%o=@Y(5YPKTxNZ%%>*8*NKK`Ohj^vNfjZf}yn7 zXbCqI_I|E$+iqseDC1)tI>EMWF1dmr^N+b|AEaq5Q6SFs(ox9d(t;;|E%n&GEEo(- zHdTaap>=+*p=CvPwVyA+nJf=3U_tizH(%2@jbGzEvLoV}%Ws98S74G=-3aF#0_$JTrC@sD z!&)P9@;2|QFo66*pAf)DA6#SxH1^030-cqGV>NeI+$c`I7*eswZuiD;vh2jo3%@6h zwGo6pLO)6KKw%B~P%LD}m;rfTN~^Z^`Gw3&45GdiE^X+=uQAk`^ZhYQNh=zZm**$~iN`l~6YH^ailNdb zCyS%#f=`G%^=pO@f%xkH_7(@qx6SaCqA}g2c)P(WEK@M-#MctqS%JyIE zP!Yt1&ZED4PIiK_|N;vVWEA|Ns7q(i3P0`!%-sI6026b0BL+wmpCu@r3i1Xll(l(bb9Bq z!Hb{S$fM1!AFS<=k4z!H7~0>}lBIpI1Mi+?vcS2-80JunIwOn4mwBRr(h<7k&2PDk zTT87SKJ4HWELn?AU|?bMAM$c033Bw|^l`y(AOF%#Y;T@AWrreIQFrZR>Ga-f`oOO=Cgq^~{UVXg50%-mk8% zvW`n|wpSrwgh{g}DhUu2_bR8AEfLQZM&}70eV1<6r>De5gwT{puW3nOwT|bq*`E58 z?we>I|Mq7D1WDg~9s4>OkC9;0Tj)aINF8AOC4^AbNt&h9n21@mDu&hD*|7^IAb)2h zZ**KrVRd^=H1`HZG54EJ|GXpDO&d3}4^OfAiq2bhB5frPcX0+R962?Li{6m-LUEPgi~6hg6NDMV-0$+AVkf2*Tbb>VkkibC3gS zF%EddJ%lCax)AsGTL)%-qolUbTO>3<*6rrow))5++oq?H zd%Zh@g-CE7KRY4s-2Okky<>P?-PS+cs7cy1Y?Cy$ZQD+hG`4NqR%08DZQHhO+xf5D z_j%6w^nQJF<;&jJUVG0qwdNQl@J<7hs_%+JO8i(+KNbce`5>4SmfXqBG4^oZ(7s-iuVMTN2+{`)VKpyz$m7kqv z-v?B_tA=hyd|54PB02jNDchjB?xhmuDBza@;ZXb>Y?c$)Y+81AeU7=S%(UEuo<|fo z`3Rr^&h#;)xNHrkuzo5)GcXXHOlL)1Hr=0r;37Oi0qiRfTx8NnOzcK!8`5P$v+X_{N`+N^|F2iyxuiOFomw9XHySqpfcN!<5cbR&snDJ}3OJgq!2b2@GcfTgL zz$>f6OC!fOCmReR!=sZQ0YnEBtmBL0%M85b&?b$_cH`CbmnHt!e%87(_2AiywifXb zH8W1SqT_Y+S?=?<*YdMgKdmJi%CeH$))aUE+`35AN6!Z}hqKy@PV(nZQ;9AhbLE8z z`jd5*jIE#fIrK2^xuA1@5jLkx1fb`B30ad1BsTHELYnC-kQ4@0>8Wlo7KxOF8QB=65KbYF&U|aJZD=HO4Gm`P0ui?`-!+cVp00N7V=JnO@1Qv!SLfTu#uI20k9REIhPZ^Bm-VdgMdo}Bx}ZB5jZ%|x%Z zq?21Mel_;JJ&Jws_Pw^}!?YSd2tODDjAX>K5|%5T4t(f=*sF62Yv<0q*43ikv}vj;M^9)ja^1C5Ncplul!!6 zhtZ`}o&OOp@XaNL-^&<191st}nsp@Y zMr1rAQ3SU$C`=b@P!yEG8;ND$$QqP04|+^QX4&=1FX-&@{0r=XpVx}W9OpdzoRn9s z!RlS0xg9}uSAHf`IB@opFTYI<<{*V|IW|MZ?X-m&cmRdAEieayC`Q_;uD`+GF(=3p%ZxRT zLIEIURA2m00^mzv;L~*WUk>u^6AuOp8Uy_r5I^up931VlUx@rh2+ei_Ug}Ew0B6T8 z0{!j?^8>D7qbS^kzR7>qWJdCeV#?_V352ik;PbC=@YpO`9KR_}!|*vzQCo5?8L`;h z_u%p;3J_ke{#JBfwjH=6xi6U8f(!DCpl5-BRT|USCBeeiAi2OXmI31%b zK`bKz-?g&HbJPWHxx{ciPE~0@ zmvt+v#T+WcdE~f0lT99_XVU1915jc3xNkj+87%Lp>NIk%eE;^ZmqS8Z2CR62cs zwl6A5NRCpH@y8!O+_t)9cY(#ys0>lz;(r!Yap*yVLWL4hY8KzSEAST0stHnOL(B$J zFm1aDu16mVg9lL3=Rw z#!|2N>IN>iDLQKjX9axVR3`2Yq~r>?-<|MuKpn?-t(sNZITZwp>-Q#!fTO!t5uRl{NEj1D@|Bzwj@mRoQwe4J|J<9)04C5IY@9fpT@DcfqCh{q04FI*7XaZsN~_$0wM=6 zD#YXix{vvci8zxbODZqtF|?9WAk5da^6NV|2s54*OgIue25-21oW%^=x^YO*zHyH3 z?0&jw%HPUGhh$q*v|fs_BXre5Pq!d@x|T4qCe7=!A|csCphW+soHn%gnwf zo7o)VY_zVWJ5b!-S16@*hADDPM8+sk9|VQ2*RuF+WKmSE%Vy+{#O@QvqX8RbB8K#S zbwfH688Q`q#O19~M2|mku<2Tn#6rj+Qd4GOjRvZNxYSUxDBS~+`U9-8!rEtOyIP`y z3c!{l7M;ZJS7F^rtPMysLrz6shafJfEhOk1b65>D-x6k-#Qw5Or!R6KEEMtOpgFDJ zMovJ!0b_^c=SCoHMaq4W$KfoY;yE(3;5=p6Rsd_uT&T%HnH(>2>1M9ACJY?DpUeK% zr^`B;fF|T)VOQVC_A*h~$E)|@mGt)f=rP)Y1+_LO@VQOL$+SdejdwVXy1nzOad>0_ z5YS&3dwbwwWJht9WddJV7MsOWN2+>Q+WIX0F^#&$xVEWhk@(xtmAGALQL0n6k<}J=7{A zDgxqYYV3YKj>=|w@apasMNb&pN`1r3`%_}+(Um1too?BONpbROYnfd)Nl2Ab+Mvph z7<(3~Slk^ua>#)#({)L@!sEKwKy@Qj;NXC2tkqfoeG^Y~fXHj^m#6VsQDIS1oJsU{ zpkZnajS!>H$HzffC#4JPZJrxwuL#ZJvK9N9N2~&ar=ook{2q|+H!WR;A;sOKg9@De zOAPc^Dhh(oQdEqfr6o`MqXo1u@nw{L_s3l9R7X)|;;)dKj{{hsUuGTTXJZ3kLK%El zIursu17u8UGNu}I6XIMp^v2ed&Uh7hkh1r9CRwGf6`Oe3&^mviS%8Wb`ZerzM$Z~Ws2{8vx4p!&cG;mB_4`xzjce?*(}yx;Zn}v zr*_vv-=p&CUKvG05#ApY$!0~`A|?5xeWv!LlNF^7w85bgXEMaAz}N>1Vdi(3JY4pQ z3?iw($bxUFU|l7O>JSU!(!nIanAFE?6x|sKqr%8H_iMZ^AwOFy7#brX?}M!OFy=sv zs@64wRSL>f`|;}BVMidLyDGY2^qcTU>|7F@tm?YJF!OGaw2c`}8Z&v)*uDrZkPP0V zTWgx4rt+iO)p)J((6)mOY>e^Fpn*Ry2JW6yvc)xWpFBBJylcY7$%Jm0Q zto{iIWTHogoW^DZ5FHVvEBT3sXFIygA;k~$fnJLp-kUo$qc+o!X2MF&BsNx!fRNPE z&YEAz4pd?8i_5zlR2VwOGFPs5)J>Wq*Uyp&ZH)`9an~F9sL6KX3Gy6OxtPK{b+n-3*gK- zemj##r;qZ3F#|@+o-L_6*BL*4-kf3Y9q84orH_;vAW$N(T^-14mo|p00!I!tzef7& zj*xvovvjb+=tp#b!EEU2oSNz2KsRPVu_z5*&jfu~APK}%XvY*?s&(N$Qw>zkOBlh{ zY3D;zBrEEq=Y^DIC(Da;Dg?)`y_EbCq58^!TF75$q={+RC_{FxV*rJgu?OQyT2#>)h zwGXX^UKQ%$Wn5<{O2x9U;fd`UGho+e5Eg9feE-yE;PPH<)?_h=)BG&bJa?vtFp5-m z!ui{vUVQM70m~fTPf~bs{j?C9%U~glJv5H zkgxv)2#`>`k<*nZ`zdg)a{zvNj|yN8W>VSr5r6($ki2);y1v$L@MoS)9B8 zoa{%HlELT8I3M>&qbA*IjMgnKG zoFtJh#dH@KP?YNSQ|Yq0mIM*Pp}&5-(qi9;YZC&0f;AaMS731p7|1P2?q;B}|$i}`t~_cg2WBj(Ta%dxZ;3*_b3p^Zh2 zishT5)8En9{rK?y*u{@tWng3GQn#rY#!x{|_b*0*(&_3Hk#W1X7#lkp68uZkNCkXE zj_8Ggz5qYO5$z>Q5_-TGqGO2Hz&=)6?n#rzwaRxpOE|-f6ZG=pTWGmn=b4V43})2- z=4N71Xa8z7vxf54yk=oL%D0TuGinUK?vRB0Pqn{P1fyq^Wo6MFASdVL6^JmAy-1RX z87wVaV8D6#r&U?5)KG$PZgz1|E``NRLsA`ScBWp&Tpj;Mg2H6f-)R=N^wNU#+meE( z2bVj!W2O6KZ@>c1^wJ!8p)^~yZgRSGQ0E_7(nmGH`dx2IpwHn5GkdF%1B5D#&SS&) zlm)6}zdQa0UuKswoPJ@Ax6^aN@yrd-LgT>c(pJDUFHd(^An7UXt=}t1NG=9SelEh6 zL(l=;@UMA^hGQxtloJF9!X(~J%|SI6DP?lFPh-y3bd!|j!W_)a)EaB>K^^kS)HG!Y zqa|h4d6P$a(N-Dy-g5C5HAA9R-3ioj43VM`|HS>4pnW z-BYM*9E(3^g3D?nimd{9uIjt>H|^Eic`!y`a2kO6&L;P5Tt=8c|NZbz!FF0*;U~jG z16}$e!)%G>f0uiiADFQE4Ev`cOa!hj$mHk7FPRxeKWkIygv z5U#;_!>K`lVVsAD_bw3BfJ$V^58n>7T1{G);GBb-G7;Z6CYE(Ii1u5u)ny_ z0lo7pYGnxTh^Co;{15&L_*zPwY(37y8~z`u`D2AlgnmH&2wboqc-=ENpU=x*>5O#C zet%oYiB{$?T5KmC9TK3-cw&9!zht!yR`89hP1gA@lmMgg01vd2BHPodS4M?~)O#z( zr!cG1pXr1=dw)%|AiL^`iY?^YBtJ4DPf!l&kh&Z@7XdJpzw(_v@U>^XnL!UsJztP2 z%h1F|qb2!s6>?lylWjPbmqr92hQM5ENe2jm|1RE7;9=mo%ukE@F^BA5e|=avtUW({ zKV|(bwJ#x>>l}j=F6e63T38anbV8Z!ODqvBIJVO&QM`FemAlHs(tO?$J8!gh`4(ydN&dU>a+-q<`i$fE2Z|uJ}GJr5& zkrOG9R+Z|K^^nQLR;Tm)bbEAatL zgkONG0cFyn^enA|$anQ2xNpr3Ya=ZtU%obdBZTlOGfnHLa6F(d<(Or(Amz6FY)1cnRgsrU&5blKh z|Hb(eyz)YGSF=g}xubMxE%>jpvY~*KxvKY=U#~Wk{t1~^$yNPg&{({n++r6 zjInF`w1URK$4yVn++nPROuv$#!&TwogD%(k=?tZvx*F7`=3A-X!*GiQDnp*F#Zibk zz9KGZyX5FMsn=kUS z0SWI3yk9+P0?zi*omrnE+vz3ZX5V+M#&7OD+T%R#hd|Q&2>+!jeFavUx|bgwFe+>O zIEm^sJu1nkUzccoC9`i8kTU=soQc+Yil)I|_W)R^oVzOp-Z#tMJvWtB#)J^(sO=4q zO|r+)*(AWuBGbil{+x75@RUlN4DCP^E0bhb(UMw5A4tc|UimT-laj4uw7H()B(n|8 zY-5dqQT84+LaLVhJ!D{HVkBpdyQJtbUC?~F-R+NyT6b>ntHUD814llLF0~)xl5UBU z`nebvJ4i+PA4<+VbjNPD{cn5oZQ#Y)9Is}W#vvd`2WydB9M6C?E90n;ego-M`T6Qy>n!J?awd5H)0&) z?M!+C`)dG!xd(8hm{Df%gJ@6^wC8Vr+)INYXLDN(nt_T#17wlLuM%a%0XkHruo7S7 zbX=yr5gmk;r5#_Lg_mDd7^@%jP00a80XQsNVuvqs@6(0mTh()ndzw6<>0y+I;F1Cm# zK$}I3ZmWK^%OoGE0Q3~_&kpQ!=8#|heC(nLJm%_1t8WFTC;V!_f!lB8HWYGF4S9OK z;$p?70?;v7MUAmt5QqIJrdg#9j@))%V0KZ)Fe>1w&`q1Wl45za^Anue!02M z!M3vdmL##KBo)^fcFR?;h}qN7UMAKeVAJ4^$lk2!MziWV3Ke2}>ph1>uzO-s1(XfF z7lE8|9LLIh$>mmx5yUPV$Nd>aI?0hA9`ajX!--m*QTDtzp=tF$kEsTsOt|;Sx|dnU zit)s}$fDGS8D&^8oS)zv89bMRqeld=We;)t8DR8pN*3;B5;?I7BAw;JzejT9Z_ zyu=4+LKzmMzq!P^sPterDU68!97KtMgfjnSi4ppUn9e(?RF5GZVOgSiKAl8(mNzDI zo$B87#C4NOf8QGacJ#bG0|wwFV5@I|rCbo1IiCF+SDl)X9?)4BzsbT~BX@*@jjp|Q zo=jZR#WhoD`LhoJ4&&%^Tl?MjybO-(#WB48zQ2V$t@IQx08wEXeawe;fJ}XWItojqY#okGH$a}gEvxI1^i$jy%UG?{$ z{NP7}a{2}WtzPh&a+(%f%|UujqM2>FK#x%AVq$wZGy#-|LA$R+`8BR`5+XCFvq%zg zYi*yt7N0kxs$}B&F0NW~%zPGT4}T#5nuYsjH}?PzJfD5~E*|_B1^{0X?-pTcg((+U zLDESJtug4_s(>hFlPAf<>#4T1ue_u4o`WNLO?nZ=4z!PKYJhFds;rtRGpN_)G2%#D zROC9NceaY~g?M@k5tkgV`}sHBgQ>>&JCRoC7g1g7RwENU%JuKUo-g(0sSCmQItTUj z5ek|fi^3^A<#9=y50lKp7L*aV*HhRUdlbpNlW!pJ;L;%a@^3oHMew32_@?o-Exvt^T~<#%}Ujvd5@i} zGbi9oGe=YsFTwpn6MB|HjaB5>`#*(kN7vuMk3)zlem=Pp!*I&H4ZqQVC`F0km7fTZ zruqVUkmbN5D>T6UY|%7LJYTHT<4~K%sqmC7c}JbDv=t{!X@LUf#4{Pb4`+cNm6!Wq zy=MO?bJxfa{0L~s4zt?N6?_X+inH}R#NNBpkc^$g62+d@{_t}6sxbXnbbc+q@BF{U za0K&^L}E7VCvWaWB_bBQ&QqW6Gmq)-O(!xDMR*LfCv74B^<*ARQUdXo0@NXOpo)F? zJNk%zIO&p-YP?)8Lk#@M3bbhK49UcSG{Ms=*=&qkYfTau%_;)^kTR0)^t+d_ZFdrG z>DxJAtSt(mXsz6TEUnDXRWaF9@F5m#Z=;O;eZeHNnqbpPGBYk~y5@WfcOJOkh85rZ`A zkfJ2q(o-MXS(lT7(C5z<9|=hX^|<`fhusrwKh_}E=E+@BGKSD#i!?yUCd-I3G^~?7 zyGHA=-XUCbhiVRszfj%j{`n)9*y2x9jeQN~R3$Rf&yIbQO=Z>Y2XCT;NXLza zU6A~o{jHMlvs6f4b9;NPjfr3N6%*f^-QGS0`aFgBBPT>TvX+(lWmnY^d(tHZT*&w8 zFmtpdwcFJ(FMPe1QfQm}wYQQ{mgj;zw?qUJ`pXyUwyrfVY^2?-^ONlyphMQi&$l=D z2B-6MJ|wYwg=-wzh=S##GX0+s?}&j88fZRK8&27NFJUpp&%b>fI zRILOm;V$9t7u|B~Eb98bqE+_gi1k(0^d5ix`$;+%_g&Ga+tD0SHj0Ur+`c{JCnW5B zz$Ipnp%w3K&+}o^Nz5eeL3E1n(+cEqm4Y3v`dC9M14n$iKC@h9!5XXBJSEnG!TT~G zonw$TOhk*^7Ckm^2T7l~vM@O=>&}Z+&^nTgN3ESgGB>{>XfP7X7USv#^vEpfrJU>| zZz@ZGB;Fw^D;I9JK=`K-2~mH^KKe1#vxKSZ!CobUYj!V$KmmG!s5S5R4a26eD~2}x z_FXu?%2bVn=+RjYh|0tVx#1W_7;v|^j&hcwQ6$F{kMAWvMc}4>!Uk8ARjJnHh0{en z`mn}B9!Fpu)UJ=@s#5nhghbfzJKy6)eMi^vP*ojlx6QC*3YJ$?aYhiHMN|}V)ls?Q z&LEa~+WcY8KBjl_r>AIMX9?BZaAkw!PyLL}R>0Lhwj@KSF+%ZZDewC3>D35rWl`$O ze3HX}$BQA)B9L--D}gresnH9PdbpL$F}@NRt|V}mSNY!Rv_8Y6qcqj~V~?G~%GSuV zATyV>N?-9?{bGBF`y9I~RYb)0+2KJ}T@xST@NLXDR=fEh`Pd2Kd$5^c{S@U?xeb1U zF+r$0*caem>7ac%RVzsq1!1CF@~ZzF>`J%o_H&63RyPJJEr&?v)3{rf4rTktAkLT) z2h%ebrR=@Nu{#Co?_nFHfw&+#`)6e2JrvnNUljSQ9Qt_N#dTsq)xzsN)7W zAgWNgS76tV^nV_N=MnMbTmn5h?%zP$APMDTTiRATT9w9IV=Q1D_Z{}fJwph{WJF{% zRoZBqk;t@Pn!s(`gp&pSg4S`*~y{mNi|cQn2KX~MwW>0=?&$6Y7R`0z#?_O@&Rk$3<-~{ zx379&wiEm#dK7lrDm-cuLStu1-n&{)#_$z4GF-}n)p?NaxuAuOd!9RzAlrzj%g|u$ zI>~nVG5%ySgII61L;cDV6|D$hGB=dRk!^Me!d&ddzFgL4q1v)Q&c(og zE!@4H(x)lvwNkB;?hbl7{`)X}-J&DXykG@5NI5};Q~qJU6~HO7_n4X{FQ*~w*%8Gm zuW-0071Q_Zw|y{=Z4t6(Nbf@5C;_<4F=d#d*F=O`{#M(EglU8D9dUSRR$ksg`p>F0MsS27IAe-!I&w%leOo>~bi zfVB?u%^3+PhDdVY7kh|Pc=QQr>Mj=0pVDB7&%sq{-c=boq(oke!~VLM>#ml6CM2q7 zx=fnOR#uZfb9P8rRCIeSb8C8c)jh~wth1cIee25`0e>DVg3 z{WX+{adSolR2kHWN*(w0Ey!!ug-U5}*@v&OiEG36+vCn!txjr z!uAa7&2)u|`S>X9{X}PJi0EuIfA+#6_kVtQeaNc+Gj~RF>o%T|noATPWrKeAeM;5? z$Km(<1_%O!xgCu89`@QI5~5R7B=$$r;JK}qBaHakw`K+%;ix}GPH8F+)5X)+w}v^z zwVg}VQ!H;B4W+=qgkraI9xvNI7TX%4dH)E(4z|BBFcUe1Mw$SAw6%Mw1aj}#PFVaW zYNEOp;?SIagn$DA#hPq24&xlIFKF%S#uY9_ zN6O4Pq^o5t`!uY2Jwc$xyvC$Asl zDqw8lu_%(*+{PYQn!*dtTMzmA?IqC=Nsul1Dn(+(Sz=J&^z;b&mW z#(t-Js1XSvaEo!WRQ?gZmqP!MbH_6FCOX$Pdsp;_nBRIfYHc@Y;#2Y%muO1Ey{q+c znBSHwplNn~hLcBiQxA_I>3HJuUB-s0>cRV8CEc?NRv9op8?1m55W9G+i7>Fi*6e?1#hUXBEhWV8)J`w0l`sse<_jb=)_)_hAir}*ArT5WXRwRiSzM!BV zjuq>#*Plwa74yIr6>QH{9&| z{VT2A-3$R?VYy0dkw@(N)26jbC;pwM!?$~ide}d6&qKdn=sY{0>uYK*;2e-%Px0lP zox$#}kA-Z7c|B)s+lW_Zx+y7u9EBd$)UbXD^fAuHPjH(MlaX(=>9~`rn_7aO54hXS ziWcV=cq^F(HO_=4fYp`dY<$d-T(CD*l^>Cg>tqy?C zF!@<*|BZX$?a%qNZ>jbk+jIm|xJ|`m$96#pW&CY8lkRz&6#KNkW7=?1U2*eWV5S4l z@6Y&dcal_xYuGYZir)<)!kHuA;*?^N9_zARN*p?gpqwzh ztvnij!~`0ccfMqj%}pJ3Wli7y(wP^NzVWw}i(MALzrXOSZ&K4oN%j~xZ*>5_-G@|7 zVi5iIX-|Xnu+zn0@w-b5v-?*y*3?ec<{p7ink`Ch!jTcvOWjCYL}%ys3o zESDba$9djnpQqsZDN_99E31l^6pTBF@EmZD#Gp{Rw00P`IU-$}7bQvY^VU`@Ds@Iv#CN3>J3mo^Qr!Xy-3Yt%)?L7l%0Fixx<4!mv4sA8W@ zSiUm4Eb-u|U>3Xu6;Jv)Cic5BmD|`oMtuOTWH^0IG>7#maHPi#3oa<0d2Gw)@*r*d zU`W$~;85$>jJ;%ecc`v~b^7<%S+Tk~r!$rM>fP83B=4zTGL$xD;qKl95w}6{!)Ke> zIUBf}@kSKUm&*OhB781w z@92>eBIPJDA+J)f)W?ai8mTLlEVo4CJ$lM*_B<||K7B$G7Zu=@FW2M$++xLkl-EJ!naJS@KrbCF66-hB+tc=pQ!*P)G&YY94xFG<&awV};xxwi;uPmMc zd^E~e<)YU6k~l1QCD@YB+{{$b9fzR1vjK~tMd3ZChs6Dyhn-`Jrq`=YK)#(Tt(`za zS*Win@m4pme@jhwaF`+aTeoUQ(&-Bv{D>a&7`<`eAynDBrn~{dWK2UTwrXSLXKRsm z)bxWgdWU=ocH5D)wf+ssa<|-y>v`3Jy=f=_V z_1o%AGbMp#LfBnrvP9EX=QobOeEG?^_E$luw|Alj%&%j<>rp*<8BAo!0`T>U36&bh zw}^NCu^N<@=ikxUGEW5%=63Z})p~jyuPf)_rWM-PM8@0hOC@PX`FcQLK7eM9mbce! zq`iFVtx7RRP5P?QSBj)9{ufMuK=ktWk<7!DWF4K3+BXrZlaAlA)UPvzdGd}~d4)I+ zQf$hS26j-@ARpfb8A@-7h z#QR;H^_~@=@0it>&Im0&JsPt)$g&7L>*uh|hT))FB2Jx?Rjs5=7&E<1nR_l<(#X{K zdTgH5XAAPIIk>;@*F>ciKjUg4401&9k zLGM^w*7&u~L_6$oaBX1anURR!&Q3ce#-%RZ zv)OR>J@a$OVRCOB+{9cnP_9ihhynrD(K;8zRD3V+>tXBMq-4o;B``yHv}WTm(kZQ@ z7TveS(r2AMN9r$h>Ox$F9xv{aM!BaVNlsEd_~i<#eBMv^ZPi2NArlw;`>f4{0EjEb z%Vc@&`t$f_mPw9n6Cf8AJs8ur)fKDR6_Epr$oG{lJnW7MeMbeaoiO|t=#X#eCN5*b zSwCpi!rx4A4sW^Y?Ww*5kKn=$A+9&&oYG*IAd&xMRS+W{AYiarlYY_rV?_*kY$oiH-($jf=GvyK-iu1j zS2+njH8VZp!AVxWPR6`&w_6K5{ywVODt2aub9z`U-5zE3df6E2j}G5dYIdy9^6XB~U`cMlwjZ%K>a;2MJ!jq4XV@A!RIu{bMY`Y!Zl%?$!(F2{Z zx;!|zII+Qh0KM4L!(~NVy>yKvH=(M$CP%rceSvF3l(-KrG=P?|Aly>*ZWP$lPWl9ZP($cJ?Cd=lW* zE&B06+E5GcIzI>M$P#Lp`!gkXP!YCk(9U_TK~BOT7}5+B+|xKp;RB5v~d`OzbB zivx0MHg7=6Q`p&c&EgZ`AxX|Te{Th&_!uF4S-dus{P{XD&}U1f>0s^lJNh7KYRmU9^TN?Pa5bnj-RiT+Z8_QQwD8qOwe= zljp`G=ZlL{zR-D&%X}^--EeW@gSE=JW*?^xGk29>@38qsyEWbsVQSoqJCf=GTHm!P z>>~s)X2dvcGmhM~zGWJzeP>e8C&)j_u#E5@&C6Hlry6SmJR{flpp|k<7RXuTu8@ps%uzswV4rH`i5+K;e3bckPk% zB_Pb?`TmSI4Az37nG$ry{M%qMg`D2*SKxA%6MSDbG#P#4IsG2 z6+E~Zp05;URR>!vIL+yfF=#QP)dlMjUoh{FUm=^A9tE&x; zSV{bJV_QX<<_vHS95K3E8f-`|XYH1XYk{2BbzA2cm{_@Lbv?cOM0&P*h=}w_#Og>W zls^dy`@bKE&fL_kY2H}3`^kiC)i>FHlcdN#9(g{Xb0O8<`J=;65(UYRa*a;?+FWuS zJ{(cU@3BnC7ikB-m0I_pFtn1*wR)6=3CfPqyIi#Z^8Cn!vy>}|;LE?R3KPx% zk1ow{K8uq&*&N!rUdPrV@a}Z13v$6ymFqt!@jt*LU{C;fsbJK@p2zjlmh$^7T84oA zEw2kXo7^0#0E2oU@&1V|IhTs>0>khnC; zYd|1B470oe$dz}Me#7qn&L!|G-Cyk@BTy3Y zsgwmLay+cqce~X_{8L1t1Lea-hM<|Gi8RR7yY%U^dwYWXa}Z znZ9p`eA$32Ifh1ssF^7ftl|1|Bf&3WiuM6XK70WvT$+tjEYk27c%XO-JNR8H5`Yg;-|O$kMDZS*5Zy%`;t%!LFIRl3t0mPIGaESjNax)BOcU{|J3~Ito4- zGqc+_=;P&xFu|EswNiJUYXcEYzf#9Ny@fn=6p%UAqF^-K6l7kjr)g%6*PxJ`aBpE+ zNwIJ8eWdDCgh4z#G02ei6#pASsnrHI(B;@4mSNkPp8#tQr>`Ig4s%;$Dtg0>LzzOf zlo+?a2+_dnmn>e#(;t}jOmQtFrjONkU39*8Hd(ZOmo+nQQdBOeXO&Jn(EICuePiuA zg13}h91CSsrSFs}yoS&e;+e=* zayVTMu`mmlY`^PrV(lw4v>EDU9rMG$FX_$MmIf;@668Pc-L~~Jv7wPB@OgEpfrB44 zhQ%He@M!(=Rx=+x&5xPya$Mx{by7|!58UK9u3wGEb#gNE+tU77XL-1PfpG^7kHeEG z$&+beI~DTD8{(@T>gcHtsa@J95KwS3P(^b4A}HV!ULP-^;Ele+7ouk|;Q!xi92q3| zLQ}G%|9ynv3)D=wOftfMFDZnEnqmB54_y48x6mNKkAz4@|N9zh255A02;0Z^|ND_} zP*8jPScCt*1~&oTkQBuHrwJb)@fHH{ZbA^F|KBByz#IA55&yOl_y|vq7tbnG-p~JC zlI+E!E+;GepBn-0Sr)iwzp1eQT>^AM+26wd-P;5Sjtn!OvC#i6A;OWFm!J9Hz5V~y z9g^NpX9@Ll1?(QTEtfUP2#EH>TGEl1DyE3DO_{&GHhkYFY-)34%s_zh_>vUaDkBvWDf8COtU~#$8vwwMd zJQ^D0oiFp8vMFQ&Z$b*%&(U~!Tt2!D<(`{I)_!_xEpKj?LJf7TbhDhWr@rXFOOXa0_CZsKB-~yl{fs>?t@gV&z@Xrj8oVSbF3>Y$&NK~( z5-DT~)FrY>c5UY#HA>WkFO@_>7Nl_Dk%)e0<;0E)^|#F)$jAWeq5>NvNsIeT{B6cv z-)9iao;4_i=vSGBuq#Nj{IyFA&*QQ|4f^MULZobdUR+@MYl718YHnLYDNf4~Ef{A~ zK^`AWZqJUlb7&~e{x07Rhgm$&aKp?f-yy$^e`F&TdkGcnFV9fuwjI#(ikQdRhl212 z7KS@8hVGHlk&5%KL=81OoEWL`gWvo01|sHt97r$>27~GD4ulquZ*3>i1F1w?h!qTu;^KwK$12p0v{&mcon^y9FAk#YwN&IS%m#gZ|`={g{q)dNGns! zrNUTT!S_fm6Z>3LU+~F}LxzAG#nN=M^Y9L!Sft^RFhWkVloOhAe-x z)wyyw9VC=Bzph?-fS*%{dqy;;!fVsP49VV?{n#^#(ML_LZo3!#GjA;ZvF_c!41hOd zqaY#eNQ%p2Hp2eLL$;adB!}@(9>; zqgITx<*r`_-{Byt*Vl?@ntolj#9AJ3sQYJI+o%H9^Qq6%_oAXsW zS+C6S=2%xH$|~&Bp8w>6N+x%(qI-Ra}-YCFtydUa5Tl{-Bl`4-sm;@)kSjEuye`#>cMz z&%Q>4)WEiwlp6HkZLk9r*qO zUOb#>dG!C?87X9VGBq|bkLmtz|Lw2?1--S49|IQjzi(CWfOxxj`<4y=_gkl-U*L9r W(jN7gQjvcG{zL_(1j_ideEuI4Of=d6 literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/seq-diagram-high-level-2pc-api.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/seq-diagram-high-level-2pc-api.png new file mode 100644 index 0000000000000000000000000000000000000000..724e52b5ecf04a122f59e481f0133f332717dbff GIT binary patch literal 219961 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

nCk?AQ-pMmEcem-KWGj05MeAMv~<_ zPRb-w`w!ckBItS1;L4(ffCI*Zc}-M2XZ%}&wjhcU{Ug}kpKs}wFuOB9z14maERn|Zn}^PhW$faw?U zeDR7ZW0J=pS+_66btR%3irJ_0Z#vtmCv}S8ZS1*Hq*EZ}h?vZx z--FGmWC-Ne&1Zlsm}lR|&|pPmN_!=9bv*eRLz$ z8MZiKV6^a)Kaod(iwl8Q#|Bm1%*nq+_P`x_+b>)>HNy*#sMQG8UPcZeO% z&#-X+rxySkIf5$#Ei8ScA@;||4tOU4$mE`%?r|G$4;pq5;0{64i84EIp9|#>OMt(v zXuS)ZfB8{?D;b#k`cWEBpU>=cfCE#A&J1rYb3b0!n^Vty3k0IiS1349u;s_^aQR;1 z1K*v^daTxVkqJb;OpBhU+f#(^ABgLIr+kb0xLnqOG0M(uP#Em%>Pj#|!E@A#pbr8h zRH3>z3qlV5(7RRg9Yr|)=Qf2B`WMg$0cDuBQx4{VnKod~Lwu6oS@fEp%7P4+Kqw`U z9StiXFGz#{rs$K$ftZ$9R8LfvO;<^G;=GFh+^>DwhN3L1_E;Q7~ zl7w}C%&i-k@r(d0yKq1JBx&-m)WgEq0yRPPr&C`gFaxq=I-J81qI=mb3gUkYdUQv! z2PP1pfeb7mp&eos~Ns0n6}{FEiyB)QUXV^z;sUxEpin-%!B8{H|T; zM_vqCu1yl%3#h{`;`eIJH2_0 zHsTq^*kE39sT$-7VA5xHh+3-|L5olLJYlXR3haq8uZ?>doLj1Z9=K`fAl56c|EV|IuNS+uU{@g1>Pi)K1`fkR19*94j4hzPv_}02UgNl|5Vse>Pe^2qH9tv~Er? z@lcqHocv>6mmmzm#L)v?f3&a)2weEze=Ct!6tI>E7i9XaW}-Q^5;uNQJB)0D}BN5+zv+a`7O=M=6l z)b^iA>`^Cp!kJ?5F@}=F*|mI(vRm`TXGe2Wg$0Ao>>-um-K*T1LQyRVmDE ze3Z`lQn13oGCh^wymG!w26)h#n_l!mKnuD9E$DyF34DcL0B4i$Pq^qnE%%5^j|@}% z1?Up-Z2(Fm2M%kuPctuhn?UoDu3o(U4lH-;xFN(G&#QsIJD;h<@{g$Yg#M?{m+j|w zdD{fqRsUIUS8@Vy+ELP)cwLH=wb?4T9l9fJ*~Dvpa*e3k4_1)t%)Z{AA41pGq9X4K1`$me!p< zC`-J8>EEEuqzANQVOb+FV=&kW^&z4^-hZ&k@Z?6hjhIaXvXZjlbk*tE^~mrtaLxr6 z^SKo0SPqTWx4@x;?jz z&&L(Fp_l3d+uWb?cgj@;Y!FwOw#mTr%Z-A#r6>``WOg0-&o8pU1xQH=wKmVQBDRd3TTs{HY~G zwfMhb2NMLdqD`Own?78EXcv3|=GF7}J_34|2z49^soAnC)Mdo&0O?h!{1}MdN;?Qi+U-0<})qfW}xLIhp>F=^~e4CpepTqa|1dOe_=2k1lx>%J*RUn(~)Fd8thy zj8Brp$ztr;U;+iZo9!&2lyWDxweD5*_IkD42GbX+ft4Uvu+5mE37w2{zfTAB-Z(?= zjq|-3rhmmo1G;mK>D5QSjkHkE48yG9bZah2i+7##nIG6$`9?wP-oCAz5pDqcu{#9!*q<_Np8x%0^Z-lh0IXs zh=jV_X~30`#>njHecBy1Y<3;cdVgp;o95C@(s0nq-#?!Lw(WU=0u=Q%Q)a|~DsO3B zg(PPNAc6+G-4v&gTPA?rcpL0qXEJ}@ z#^36^h*`hOvj1%F%f~HWheyzxG*Ppe@vlD9gO7`3UdF@cRc8#^(2mYK2IrO6mI3zV z@7eQm=Gkm2Dx|_=cJa8g@Yn{8&!2YsHSAB>!)_G%L7g6!-a3hm%FJ6Gnwp3>LiE1W4 zAKhr05#i@y|D~gRrPNc|IjvJ-AuYUa;_W&6rHm3ud|lv**=(h?*I()kai8)LFBWgJ z0Z4S%gDQ|mF?O*A$!2HVmi*A9`s^S@_TCfFM(adNZ*^cxGEY}*{?x=0lK7+mj#u;v z=s&avI(T53kKSec-7WRg^4ec3KI~{l>8G2|%29Y0Y-y(pFpT#v ztI+6kQkl?kotAl0U3|yMPgf82b~uvR0F19n`LEj0f{hlDSBmYwMe~OFg?yh#*+#E7 z0+F3KDFwtCuG{3e=POXT07KUZe`NEQFAMCmug>e(ASM2&L%#iHl=!4xgK9n3`C0Zj z60f2S;7uM0(DOcio5dIfDbz`9>Kq9lA zqLt`)Yfm-$wLE-4OKD$61?MiJ(F%cO7u#}iBDN6vGk9jTwj#DtGbo8^!afAlz&r@?xKx0o$*ZgQSJb2Ol#zwFJH)UMs~ zIP=J7BG~`wo@w5_{Zr`_q8EMjo@<;x-b)a2q!MC=aAa4ozuv7o$uW9kws}w7HB8dc z9k^&b#sD_Ojx~y1R*I2V-#x&PcQ0=G>^Hw(pNC*nZu@|aTs>!c`tj@Mf8HgEOokE8 zu##^nCZJh+AliP{(%qe-PE}9S2Xq|I^q(QzTWRX^+M7(=e%>Q))Dhdr=C_V^b$>3# zx6aTMV6;D&sK)t#gQDf+E&+Z#`Hc6&Gbpyf*Fc5)5vQD<3Rm*FZ~CGhbNiMLO+$vf2Kglg(azuhgW$ zH{7nH_4K4&?(9y2xS`mWNl^FWuindRd9ZjG0B6qM4GXWTz&ZpM+YNq~M8ThHw>w(* zum!Ygnr;D-v0de~?gD{yZZ9&D#P#LK_N(U||KF#8m-=zU-wRX^v3nnD-<1M9Wh%E` zx4kn@CAFOV`p9HB2rZAtFLv_4V-t)Z-UdOVC{gW|j%7^!?y$yyrblF1lj8NktSQfI znU=;NO4NPP~p^`8?eSh8W`=Z>dQmDNQJXGbIkR+Q2k@_~n9n^AGHv{augQurwZF?g?@x6#|Y zK2gBto(3=R?r!t=T3jseVSX4tn1Vj|x$c{|0)X2emXzQk7i6|=Y#(Kq!RE(%{ge$? zRQ<{EegQ-!sJg3(naRqqeQtQZ|K}i#FMES|`5Y`2o`aWp< z3rXvOT0}=-#om~bRMWjHwbXKJhLaMO_|G;HMadP;9=9~Ig`(mfIto1=yizPY`6s4; ztW(SKZ)e(_>t#LTHIHjqW{nPqKfSTquP4%^8y)HO?r5gXuK6vP9X_Pu&3A;~tYMUd z;JtukoC`RRCk!y%hg&DT3`E}?eyT4=%vh8#5$? zQ(WhKG%Mtrv3Rn5Qf`xF)|3akx!mobUH188#0@&arF1g}&d=-;=&zM14ln;>umvHU zCb*#T`~m+AUL!F}8>2&6K()QppqB09?r0XzIVvriP`N`vVavv_AdiQ&??%gkAnz^A z5&N4mJCfwJ9qAU{0Ft|?TyiA6JNl&hBEnjgWcsdgJ}C2-dPsTFoCBkIxhXougLj9b zSD3k42#%!{UQodY)5&$kxGBm!9l>w1otG@S@og}NMQRlrzn2>~nx}_!uojC%hgE4+ z%!aH4?BtYIHxDDIy-hFKUAs*w%Xy{UXAV?_uytDZ=!r)z4`U{CWK8XuttYM#VY?m3 z!_%#+LeW{i!ldn9w4q)X;n?p-j`RE4(wi-xczuoi{eSZ6&t$RIs<{h7&43`zxc(d& zJIaH_5%ZtZ{|9K;pq2aewTKquuZ!P=fpMaJT2=^HzW;dS5|v}|1MvyeBlnb@GZb2rmg^V`a!{rz#mM_Z?-3QW!C!w9Cry0 zTk}-hdfXBq5#2o;p=Eh=ks7WPLZ&|a$fc{I0l+@Ph<1Ww2cJhD6Vd*#97;64FAxTN zn6YP|1vS-xeg`ZTckr2*yXp}g=607D+C@hnD~*`H$zap_rU}dg3V&a-Q@np|-R>vU zcK;0Z5yq0Sb*GepX$Q8T7Qz8G2Q zu)g6j-?yL;M9g&%)O3lO(=UUcC8I%Vz0QTe7wZCUgF9(37iB#s0N?$cXku+}@aJMb zF}Y;t&CNAjEuMk116c?0j4g!T9#cF9T*j@9<`x$&H)BmX0iRGpkxt3%^iNi{(=4#M-N|2Dr1 z^iksEGuE{}jF7mootvfITY5XY`w$uv&OQeu$&Oc)=x}e0Wq(CRJ9y(v4Z_^6CFfif zqTT>)M`A1kSs>Y!1}CJmZGA%;H!bg4C??;0TmMg&9l(;mzo-V;d=2w z%Le;|W*1N8Z{EEmz@^9>#z&ojeS`K`%nrp~m%W6r{?HsOr{b7$STcfoc*i)#Nsb_| ze()@ANCTpaax+qbcF6)HmcN2w*$*>1pk6PtR?r==P6%6}m|-<;-iDp2WC6l|kLc{8 z0EewFweR6~lMi@OH|$rhS9S`01&HIrtlD_C-`}$WG1jK%89zq-GfBjF{OMa{S_15l zciVvq@z%?cWB6RH-OalRav6fKju#^fFpEamo8PlxxXHj*V;IQ=>#=VgM_^#yBllOj zQ99#IF8M~eeaDlVZ_soK0WsXQ4@a`htkBjzTN~O+C_6Ehq$I3RETU7Pkm$det=>pz zUMqICJ5IHrtpfA2BM zv^kT~C>V(`O_X41K53OAo|PUc$g9s*3eD?VxuuLVZ3+~bmg7N(zm-{;dPs_-<}UI8 z{pa@zabXP3bi)jv2EElux?*X0vf_nJ&*mn}d1NeLcFRzUJ9|~$2x~DPT(Mg*5HGzc z{qYU@*Q8Y_?{9F%Ys-|BHC-6x{#G*jTRjV-R7Yv1T_8;tc!4%kYEh{Hrs3i^m+w7+!>omoFabegWp5&3G8AS#N6X~ zbcXFYN>}w0xhNc{i8)16;^r1&_G^IBOlNsEnFh{5fpdoXF?aB_sQlnNe{LR|%EnxI z4u(ySrLFgIDR^HTcJ#ddyb~oSs2d6d${x{NhediRH;1imsdely?x|{!s<_2({@SZN zJhf^P1msZ=(;y==DevPq3sJNEFl>@R=9Tg2wU_;yL6Gel^L z&Cus4mdu6ZYl^+{=_@7Q*Ot@@14P^+Y~-#vJ7_TYb6@1Uv;l! zW6H4r#luIK7kLWE*4n{w@PkB&TrmQ(iBA{|b=Y~d-k_VW zCLyF&9+;{t1LF|hlJdj%2l}sUUQ%q~5P=@)qJBtejjcc#i?f4vxxBA?XN?BnX^|I^ zV2S>iD(;~vd!+iW#PqyJk4RpozWmlu&U^;1Qf2Nv-@r)Za*iW{ZfgP%BX)6AaOsF` zth~Uga`FgmZ+0m22MkhT)L$2jzEtR}x5WplsNr2AhC|1XQ#~shYL~cD`PEJ)1QfA{ zs?#!VFkhhMAZ(xp2Vd4@ByNg{F}@--$I#57iaCfHPOmJ;<&T#|Wo*8zj=~Ef`Fbc{ z52VqzVinLj(ta!X--(Z%ol4vAtG8E`7^p9ivf7XR1vl~HJ?=uB5ER!k{ zyUpvHhBCWFsE0=49PnAj5!a|Dkumjus)*CSlqx*JxkmkNQ{%!Ad>mL1{ zjmnGbmtvOJZ_Jni+WAM7D2-S9>B}DdzmAXg9HIv#VlrP;TTBh#`Svt}wsWcla8IRQ z4-AFy&m#E0Bt29nS{wXY8zOVOdK%<0nYu;5NDYaY>Nuk;f(U*))%;F~lWy7kK{JE% z)}MPtt6Lz$F)OW#+K}!h&Eun@7Dy7!F_D&HJJX_OFZJea1tR2ImC2kyG&AgdWa~u% zV9HKf&E6|Xz@g%8sZ74Fv>q|^>||m}1y5(r;h~UJdacx8DjG+{FNcBwW9LyhlGSOy z-sclQ4tN%t7g*oEb39`PEZ-%sPU^DC?v=ZS%*J}ocn3e-r`~z4!r}=KELwPGRsz)i zxEh&8@U0(Bq=}b7fFC!GHJ${2Y!+2hw56#W>Bp_kuSM6#98fKLV;K*@ z>#_gM3DxzUUBUED4B#mg+h#4)mi3?3$t>-&#&J3$dtYLrYq_|mozfsb6?YkOPwbEb|IscfzRr$ zY>>TwGVH4;t%~pqTUlYD0N+PRJwNV}anXZ%BYR(f4q~vOm+B%GIlPm?j4Ge3PyT5nZ^$pw9 z7apXW)SB7$UlPb(P3U0Lto-c*@$&32pvu1VQ^Xel3mU78gw)zBHv_tgk?6%2VDBrB+XSfn%9(o8^gub5{D!VkU?>HI8kGzv; zR~h)ePPEV>n&~*27!j#!2&4cs4G+{>O^W>EVA44)&Rz0>$ib9DuMjI$Wx$kSOdn8< zgrCf>#Qek|F^;2LYb^>^E6<-Uy}o+yZua3~U+y@JX!*7q-^*~ql@S}lxvIlheaEVy zi*Ef3L?{uLm{P#OdVb}?aN~I7#yl{#lo;IhfbT=@xtQf|8L2gB)S2!D>+TLQ8a*il zaYU2J*%s|8DIL{q>gq35zim^=BGK~C%dc$6I)mBohlV_dpAKXK@V0a|ij5)VpKnBT zyV9r(SZE^AzkUkym$CVKSFj8601|GDxnDSmkXrtzSvUM>ofH_ci`hJ}a z)GhX8__07Z{@jFP`%7Zou0c# zyQG=*U3;Sr7wx`g7gqi_AboC63TNj8)u5z%MoWqtkNC2Z6(%8tthw$ssYMD(6_wSh ze@XK@m5VlvL#_8NZXKUa_ej{0!ti5+2y-JT_3KE&;%dNL>-cC-010jZ342;q{3QKM z7Qkx;aD&$>_>QnKwo)Pv3ds-e!X&OD7@Z@1>;-J}{q7H2S2BYEp0vwJUQH&es$kEH zAZL-sy+xjYDbctvdy_FY^Saauu4BCU! z?9rF=Jj?iu5+kGS#98b!{#YPQx-kl9fqu7MIu(rq4o1U`tNuZ5h$?6b!t}=C+iQ23 z$<0dq?V?`?fRQMS-vT~?C59#gDTfgOCY@KF0+R|j!ivjUHX>Q=F)XFBbqA~43jiXA z9Y3pt=&j1Gr2QY~U1>L)z-4|L_DgT}=_sRuapd9?$TRqyELaH)&YNvl~Y<5QMdKcKG2kbFn%*q0<@(#l}1l(3e zSo1J}vG@wXrV6sYyn*c8RzQzU$>>yvK~C4tUv9jeWR;-5^9VMsfa;qcX0vwaw?W%~ z2juU=xEQYj69lnQq2-U~>R#S#frYHrUV(^`ou91Q)c6<(jRqw(l7MFSUfTVqH>|y| zrA48e9=C+7ZXBe)^cUF3xI)kh^nAh+ipXi#to1EP1~N*)_m^5oDx=?=_XNfgDWp-_{{`G- zdEE71Lcnr-@2{SdjAg6kAS9lA9-pW-P#h{_IH}n50R5i6^w^qkJa36 z2i<)nOd#p{12F2A9U3S#AE4013=fYF3{VQ#~O)Mi?kfG`3>rTnSj zkQunGSQ(h?lC9;a%sh@#cX#W(#a2JE%I55(20Wi?f+iio0z=>L>BxwN6<~4o{FW(a z!O?4Bfs@W5uQb?vRddNRt9keG3gf)^GVG)J6Eh(296VU zbzy%4+(k0Rb1tKlomrGMcn}4Jhc%&|)dS28a!a{n%QqA{Ub3c0DcnTVm+a}>>|i}p z3bd_!JPgEWf9MWQk#utCfMlX$t(W|-aO*Mag2VE|%pfwfQVThd;8vh^RI~Ms7rv$y zn1ny{EDFT`$F?%?1KEAx{hrfI4$#YNWON;it*dMbSJJo7{A+1|PJxhM$nBR~bmB%o zlL}t#nUK%f0^NbkuYLb1!Ut>kZlg1{G<Mmx@Ik4@^yh zUhJ;_SPn+sTFe@ZK;@TBX-`2{nludd&Ab+GKzgGJKDCCTp1n+Y(4+5Dx>1DNS8=r} zhMkx0$Vm-%MaDRomT_xDTYt=y6|xSrL-o>(T^z+l8;&!v?6+!4mrJ4f%Sh=v=_*&9 zOY$(zbFb8{x!Lmmh726n(ruPvg1RVY0Sgco$+w4*&kWCX3Q>AQeBIGoQSz-iQy&_q zM&Ltj=4_zjZ7x;AduSN8E&jd69(6yX;NT;!K1>y#L7<3Vnvo>0z9l6%liHB5?~y{~ z%cn`ql^)-c=DGI)#-8o3BFkh?60Y1;7n6D=Lq7LTcI~-lRE0+76!B`CY_a*aao*)t zNyi2$@Axb>Gw!|(mVpF$2@#IPX5eTkp4a$8Xn$?&4w$~y<&|rPC6QHwCgCz`5e@tq{<(MOkHkh!Z1U15+0X12&PQ^DVcX5Ewpn2NsR z1?sX`JdWVTd?y=&-*t!O&8S?NEav1FVP?R?7ayF z;nylxhGQC2@zhhdBwn{>UBdteuZ)Q)WG9!8B*-m z$=O?m1S{_uz+Pp8FJ~N!Tz&E+rVXC~u@X!Z;NSr!c1kA`7xC>)f1m?uYEXBd@T6d zvg1+NTA6J4S5_mQV8oTLjZf@0sdF%O!YMTVr`-CXz4w2))4;JFdhvf)PC3JxcUkA& zesQW;+bTxF*{u3^<(}|%&n`sESF!>}P?yj>nU9&aso6s*KI`+ItZ!YBa{5PSKQ17; zWcDYHzVN_&^vqsdHZZ#>8=|VrI(g@=`&biWQ5bLp}@D+g0qr9X=b61pkP4##&}C`%n&Q*xMy z_*_5sj;2!7t}bcdrVpc@sN)d2>_k!i?QZy2sfb|?w~q1`j;Fsmv`>K0kIOtmAc~ei z&T!ot%102JovS53Cq2?#^{+rsnNYTzlHMf-9}$WPioIYEjhPXa*G#c}n$d<&g7&CRAMBiNgtHWl z-5v>i?<45`8lg`mo?ShtZXXjv=qCF;)O<{Qr78k>ZxwtCdHvtB<3#Mh1=-gI_^jJsZz|eN3PY=IoU|ASlN%`1=JNxZBvFAkfU$EaQZ~@Owu|vqt~^ z*E?Zir>C!YhSA6-#qXPj$!LtZnViP8LT5JaUhKN3J{{%iHmy{;cogAqP90A2RJ%SlR6vQMf4Yg$gO5MP)uAanr@t{I7h|{>5PcDjxK`P%QAy}J!x|B0Ld)j=hjf!9 zwnKa8ewIZbQ}9^QP6u^KRU%qm-kRkaqJWKb2Jfq9zdBDr&|UkfXheV@OJMx3oZHH% zjwkNVRKKljtt9izlxF3>{IFTaJJUI$8P_Yf)Xo`dEByLROn4BOhH{9Kn9nL+QO^L{ z`=HpVEf-~vnDC38xh;*s?>a5+;6{bC@5~-qikGK6ZM1xy>=YpXGRW40bAnWtVwx4i z#jr+g&LD2l6NtBQl)#wgAC~_|$6sQz!-y}r>^SKX*(F@e{TC=|X7@!I13f?_MocIq z{f}*g8`e)q1MbtC``uY0P@1v0I6)@6&&&aPNVt7bdC1uPXm>*0rEG9ty_;BR81hOv zX&NPY2MqT0Cl%|}me<;WT|RDO?2Bq6gSPmM%wi3^Bn`lNe$=yO?Dn&|otT%C+zLlP zkSC1q-6#9&=gYGywQYg`uE3GK*HkwBM>nqKX-f{Qez2-hV@2b_cT3-#FX4|c!khJV zNPD?tWbGni^YZbMse7IsbE{QvnP4V^AjaQ>XluH%_)1b4NO9`;&cMbUe5*rzDNy>- zwz^fyEtOsB9w#Pt95%OT9r4eC0&EU4M{h2U)tQg66l-j64=f}P z{8&As!bvLpW8z2J71DIX$ns4HPvE~|Se4C??d?m=!TSV)GVj08 zEb{nOEQ{=VvbO{rS!T&@V{mkkxwe9PgFi5nib~||7aG7vr9=8>V$2DurR9!3{jh?d z9PNht%#^FuhKF)I+b>xP2EQiD%8(MB95xzbk7=UaM$VMPrEPVr$pC%_cPQ)FgQa$= zzk&z5FA42weV!5@0CYa%>O3J_2@`-^()pcor0lzq{*y3aSp#Ea4zAWO#m0{477xgN5RZJ zpNz7>>Y(qjJ+5aMNcS(ckY$*M`UwdN(&fk0j04dgq04LX@)*KCGTjF20~+%+UFu9} z>CA`vR&N{x>)RHnWTTWh_@#l`aw%0q#PQh#mSy9^q36N zH@00qO?p_(JNs!$AxFB_BM3h1jKZ6z` zUqVz^b!O$$Vn5Kwb&sXFMg@hWyRGX{D*79J*?L;!Cu2JzJ9tACCrWXR(18K2VqM$G zNjv}XCBf7SeQL)U2SdN_No3!SpS0{yHn^X}=*dU;qdVO$6K$Wq8bU*crSD@3;|nSF zC4G_w4`JFWLwTD?wjBJvG+S8A%zBX?^*7DS*#Uq!%v7jTqGI8|z7SJ1#{D4pa}w@+ zjXweiL$!h+P`Y=YWHe<5#5(?9#I_5JTFg@mN+b_O3QY;kHOk4OI#*B(_v*%5&7fgg zb=))ZRpIf&Zqc47Y3gL#-7(=8-bwGUU$RNufY#=%Rvpk9NfM8Bla~Lv-ML5=JaO}f z!P3VDaMGy`GzNZJ+0Tn5f2`ZTWnnO=ncOeu?P`_jCuZFF)ATH^LN~!8_$A7hQ&L|~Aeh%Jw;fqIj)xWRJX;yghDD4ziD zw>J*R0u%21#l?JZ3|@I^+)V{!GN9B_Xq5ip0Y~EjNkm=c;}-lgaisJ{Xia$?s}$LT z4MEq%+gfdxXb!0^c2Km{u`lUmxSka2;dUr7i0fOO&&)0+xSpBMn66g+7#5;6_Q-zl z;HgOE%?ja4PT6&HV3r*`0%ow5y1BVd;U3Lne|lk3?m9b4jQ={UnN@7l^4Sb&Tif!K zYsgEM)XPxebDy__*Id}tcY^d{uk%|bIP4jgB@}(PTJg7?Un|@u_tc0r+9_Z~%}7wF zDsv3dY8BqkkJi8SWwoe8ZzP&Tt;4c^j5GoQH#DBbiKWPvZke{V>^4hbo8>SG*9_?q*ltB`|~_X;xpaM1Ld)i&rVt@*;px<>RDzbPwE6AA&%fY+ecbJ zz%|W4O0?cN#IM_Lm`Llc3`>GRrM+^!tXkG7Vngssp8QVf>AU)1kQV~xK8K(58~}Od z{d}c7)OUyDwFjt&MfuEBu#M@S%+(`hgn9Mhb{bIxNd%TmN@Uhw$$2S|EX=1}Af^tk zXDEn~XKb0ho#u^^r!%)gdfg}G7HAao5-YQ(W{Vu6B{kRd7+?kp2I{1{EMGXy{jMMy z9onz_alFiKb-eN;T0R%zT5~&^=8qDz#@Rqv-ocnq@%PE)HDX3`Ga#Wj#B`f@z> zeA0q{vB@pP1W@;wxQy+IB=E9enXvTNZ5`cj^C>CxRzwt?pkg`AwxZo5Z*$+5x(0UdL>RO#&pQE?uh#5Ju#?wK zo-oo5I4O7*#dR!l;BQL6ICIz=;~rjN|Hi|Op~7$n_}_IXfNSP{J{HUa?IoL{^=t!v zeH9_2x)k2vue@@rP=a(!EVQZoHW3hhyhVO4s$Kg`V(p*b?k0Ix&5&T8YEj$|fosuq zW8W){7ai79QYUO9Q&2ckqLg{9YuA(t@X;mfA6$8i`IL@u=bs?wY%rKe`C6^Fy2}jf zi!q&)OVACu%;>pjDUoGAHZi#(N6!;w2=3rd%$lC!T<;spAL!ITtf!Xs8XM0`vCW@AVr8IuLi^TA zKt@GII<@a;*0=DID+S(31kcQNcSwD`qKaO;H(%V`;*jYZIiEPy*Zj8?x0uHGN?hX3+YTGvWcC^zs!6l!>f)HIr1B z-Ev-XbPcAdXrgXgZ_R!E%qVul;d_LpN(!MUPG_Sm+ewb9z3n8XRN z*thWws02xx>42~JE!y;NG6tYl#Z{hjzjBlWhI_;+-KU?>AR>zUXVIW zpa}4<$#F1c;-(ba*dAl;4uiWL7@FG1{+>x+Pe^btf@A#cBnD(7M0+Yu1-CV9E%XEe zPMO>%%C*wV}v|u-Urv3Y}7#KIG zn00{S9E>K(z<>P4x{3H_+#mp-9!o_fg~%WH>xTmWChynEE|!mBI7S5u0%8|s`u7hd zZ60!T^K|7sdsmkba+vwh*purJq#|W3PmF9mkP^Caa(%N#Ph)$L7B`SF5 zUodPK*kq(Ys#@n=(?FHI`t>V_QahZ8_uSY!U{n39h-N=`=y&^?n&~y)mZplYkDl9# zz~){Eca&USO}K8UFzCft95Kmqz8VY{@Tsm730}_fiA(oWF!pBn;5SKs{u5L{G#jhp z2rB_E-^%jyc7dI{=L$Pl8vMyh&nX&s4HV+E=J3q;iz)&^f@--Q^)0gH!~hxf{-r2? z8IC}qbMo~Zy`-xxGG5Fs4gHPW{L78{d1Y*QAfi9$pp*oth_0)Dul;4HiGVq3Ag1Nz zwA$VzPR#_HB4!-KJJ$ADQ=ZbKGryQam=o)izUZXL8G5&%co8m0ORGH27DjBCl1bg? zL8?dtqe=-4AcTh;)B|ICD3~oK%zY#kT&A_O@j=Q-L#C7;wp254wkgu~N)Sv!)R#}H zhzd4q4$*(`qTR@Clq-yI9{epcFyHU!;;B6evL#yjM8}eCAP0q~I0OA3Q6C!NchJm& zjkF~tW)llcGP_`YSG^|@2$)%w74%&DRDzO@NOL^1et;IQE+PD{4^U5<^}khD@a7;A zw7;ZWD<7X+2n7o)6w~ZmOjtimgP7@*R|+E3%_rO78&kBf+UZC*v#%na)1UmjZ^cb&!_~nCg`w$k{X-e*S5Y2=X11cCJ2wy~nb@8*CU+ zaIDT@Ulm#zzL#;xB>p5V!=fU@=n#W!x;Y?l=i#MT!JHu)cx9DeGr4$6-yexpQ*#n( z7nty~pgcumK)}PXEISgzfl3k4pForUh9?@UH{P^n^X)Pbis0T_q;U7m$`S3qIZy3N zYVs27O4}NN+a;-*D%12RMivSPxZYT8Ah#t#;cTgCq^SG)@N-tzJ#7h<0a|^_SD#47 zo@6)$L54XW{@V+X*vtx)#srZG612U7 z%&)Uv1#C`R$U42GPNHpL)doH5w<4 zq)4uu25@lD_hp`%`rRsD%W%R@JRx^eP6I-&XQMA{FWO1&hra+)h#SekM-mVGd2Knj zqT$RQSqb#A-X087eaC{uSrIyr0uu-H!et=%mN3lZ-|4Ijj)z|5_}@lgUx3=i1bw6^ zlP)~Jc_U~kj9?DrA3!9G{R0nD5-1lYj-mCE&Szd!KmpNBe8KVD-_8UM_){WcKSqr< zMvl}r>HzvnkZ8NSEt;Zw1Ps0ALj^iaD+|<4bHQ9WM$pX6E@kxKy-8)4SZdoUc0fDf zL5wX~Qm*Mz1V}77Zpki)-4%{kL&dTPy=W*BgZW~}7}JQ`vr}+ia$E3y#N~O z$9=AA3ZzUmEX74EjHJ+6Z!dexYnB1d<$Uns{GJ~`V$^HO8QBWRPrzFh2U4#Re4K|0 zpL<*O$@=L(+w$6N9LK=Mppdy$h40({mQfUuBp|_ivYIknH@wG+J4Q+EY2j+Y5TCmp z<)YbC;^m?pc}RZ~pA?F#I_X>n=EBE)UdplBMu;NF0V6_QDKV(TplG{^9~((0$WApy z#Goe4Kw6$h@S;7EK7P%OcKrC-+cQYUobWXzQZQa(kVkAW9_VmI=><&vhZ{#a^_?|Q z-hi||aMn6*EAd3&DS~KI>DoVbL2_<89MbQLC+nZvPk?l^i{;BY!y^Co7t(}$jQdkB zpy=ny@}n1;a7dG4eH_eZD(xYK)nQ+#_ZnoWJA=s?ZNt=SzPtj$LxGOF{f< zkw#%!s7SU=$FAAF&+0SH=Gf1Dvuj}iO;s(r)YP4Tnj)Z?|6InJ4?&U#Y+GdHf&TSr z5wqAQfBL{Qp^$~B?!-oJMY5kw_IjE9Qebd&)`HboAo$0Q3SYPXA($#?PgWfa=eS{l zQ^Rtnc4T7QWx|3W3t;#ui|J#;wBR3=b*Cgob|3KaXnz5&7VPu7eI~EP>_2PIwl>;N zF(71#Yox&S;U+m5oHTX9<~gkwJB;#-R6eH1a#${R+Cw zlmx*{Vvxpb<-uYTIZV+GnCU-sS{~Z6q(iVhCN7HJwO^EfFAmdUZkD`_sA6I%+~tTl z@56^Om5Zv(W<{fjQ*%Mu-Bm}5yLkOkjm`l*HT7i8fI?v5iKWP3be))Y*ljlv5F zy`ca!*Ea%&c>h&FBWTCn_#|D)(aR01Xi-SL;K{9)r49b;ZJsQt{zz&#lS0>bsMXPd zjHVgV$6ca(s;m@`!;`4tRmua)-~Qi@Wsph(Bvg@}PloRRxQ-JB%8~ywB$A=z9>CHL z$mgjFD4^`$gJiR2fZd{~!{+v*Le*G&L>@i;%Jn(dcqKRlG|o`Sfq*oyP%AiOKb9!3 zN+~?!+k5y7eg+JjR8YWJ8K}k~Rl^3nVcQ>}{H-_1*D9)sDVd87yV0{`j>}!*Q)Cf0 zKHDPUc8_VYZYuegL(yT9H+Y*zKufbP08Xv;<_r0x5sn5?Qh*n0zJE{a-9pPN?rQ61 zVB@}2Qn&Sub+v8uk6ZA)`PS2f zFdF%-rNYvL`y7ETUC%*U6%TkL3o>SJb}wb6{dXc4)yVsOj_#S@*S+?m>6u~mcV%MI zISdU!{)I)w$<}v!$><4l8%H%1Mp<7<`4K3yB(vFaiUgeI7P>KyX78^76$J0qhjXaW zjZde0h@V2#21Bf^gU~KU+6FjE&eg# zLPaNNu3XV_QG*l8l(L6V1~{Rf^RFJh2gu&BiJvvAvsoREo_x=+5>O$!&3B@=@dF#8KUH>tW; z4Z_A`?IJlSaul+aiG%S8j)4pGRy<(qzR$%fQS|xt`t?!Vi~u&Hjvmq~bnd{Hh}=(> z02K9pW@V?73&8k*DAI6Sbz6pYok#6-c~M8<9K9p}wk^UuM6X|?=-vJJ1sv81gWn9! zb1e{Z3=(BeDx;xtWhWld_S$+QK2Jg3d;iMjm!=E62QK*$)?NRrSsm=U@oBdi)}YH$ z#~#UG#6=kSAAkgdY5^>MP|HYpL=No#WnpHvJ7TOmLVW%nA7iNCb&O@Ca*W8q`0D;! zyzkT}LjR?BiA-t(IkGgLQVsjeFJQC$xbkNcyc`2hAx~T!G68Q?!Dy4hKx5W6g|e`y z;ueEZ6q-)JR6e+^?2yrFYy4BqnW*a7Rb8DXl!rkGj>{sE0 zn`*f}-oR`!Q?e|~=A_A$e3Dau)U${Z9rQNob15$%9xzP@K^u+SEwxY{TC_YZ$FJ^J zzn4GW36fHKGMK#S3oOI(x$LZg@B9bE0!MHZ8hlmvbKQoHAK1X0og-b$%1>DUXnsF2 z%%hWmx&ds|tYe`8E|6X@u?#5TLO}{BoJ#D?8|paL4(+ozA$C_vKsniu0O?lX0rM4J zr4}fg%Q8qlHvQPFH%lRt-hLkeDl~r^`|@ie1;DZ6Jq^DyvO9 zVo*9H!~Lby);Rr*9-X|tr%jTx`?h-uV8nse;;II(J~0F|A(3HA(mPbOU|S;wBV1 z71Ka;0Ur$vlh584)Tus@F`r`bgTV&Sdf;qvS#G;T^~`*!_kT?}X)_wJr z?HY*VFv3m%%eqZ5^}tIkOX{s__L}USX?;+z(bpjnieS@@LheHlHdwl9rFF5UP2t8P zW_=~-GUzmYe?SJGr@#%6Xf;!Flfe&o47~IuxqELm@5z~g@BuF^=@c!XD0@-Dl4ND^ z^Vf0k$@~u@@@pk89t~BQH4@PdE>r7BmlqX7xpM=(ZA}Fy8`I4LZr_D8S`23_erE+y z+|o6A_CQpWhtocA7|+MniB9zK>%Dc*=JWHWFj3R@&YM3Hqu4+yqV>VHjt9&DH^3z( zkk{b#&;!1}syAMZGawp4U0@Rn!F>?cSyr-+wZP~31xGo{_m`T;wYmdnrmbn;xz*CX z_iOyYsXR3iiz4JCGFO=bsgj{B88R3@i3T8czD$X_PkJ>Y>ne`r(*)rCQrspm?N$-* zet;C*ig_rzxF4;p$1gyS23^!US)plXp z=^*;+nn)lX6fIhKmP}7UJo-#1PB$z#hd%2^ zdBNK{F%=Gl?N^z%qtLi)7h@dTH4tSI8yemIj0+symvSS@lBc*7R~Y`Joi%T@Bhjeo#msH?X524os(8`2e<&RDtOKfv>#qqT~(`C^4`PfL?{|1m@| z(COh0AyJ2Q=(uzjkxI`kSO#(XeMBs_1oHGJonL5gF41&GLeumyfyOKZQ& z+Py8Ca6+M8X1mda2L>ZLl2C`t6xc=jFPZ@2x_fc={$IE*=N?crs^Fk&Bt2x+ z0;1z9WM`$}$S|V8m6p8?Y63*u`($f|)2N7o^302K4j_JE(8KpHq!Cq5N%FgEwhF~i z)K003%;4cm5cmeq+lm4D-ONBtr{fHGfOuBs-jicQ%)?9PV@Xc?^*8Zq)vT|q%OB)%$ z=taQDkID8Ph+DT?#fueF6*8-|D5qSUYvHL}_s;VpqjSl8#k(t|^YJxaH@?7N<7216 zsIXb8#$`C+8z1)@m@`SvS4P}qXCaxV8^Ij*l=Ym79&EPos3wSUckZq^kf-Fgztj%$yb#ynfJ7)i2DeO5Umx5qu3)$9=gW- zuz~x=Ii%m^if@AXZ~F4Ufdh#|Q%pKYsmb4HX{y|=q$^k7Vh7CK39Gqv+5%kgdV zaWD2+YGAkwe4)Icd?;f?Jz z1V(*INsJtQ52>%`69TQkJL1MGw_fs_lJWOg((=wF zmQ`2seQm_7-?tD)D<>b#;I|d+uZ*Nz!qYFJwTx?#8ub+VH5U={`ND5Jy(_RjZ3E?u z9Tb1gETtEWT2{o&@P+z7Q-*13sTSjr>rb*8p+bH=DuPCf!y>F_ab1-T$*~cKea`c9 zlC?RLVthklbD;D==?}f_slW*8Ov z>}&>N_kIhhwZh~XL^t|UGM#`$tix_mAA&m@3KWUn)*<0?zFa1Bqe+)WxmC?Wv8^-Q zk9ifQaJ-p+j5Nnt8?D;-24kEjPJMvlAmL&O9%h)usMs`N4@~xLeB)=}c)<5Xiis3U z+;Q6{7m5^uJIbl>-vkFjyU&B#=Yc*mm10MD5gfl9wq_cSxn!=pC!>XmF^%;kL8Y0Vp119h{2 z%8V#mFEYaB_i-$Re1_CmD`&2g7rq$)7eJ8jzHugJhmBc@UX3L;1V_AnxYC~`DKt;G z(C`@!Ck?r8^xs7{8YvP^RPN}(c(oxPSS@fedRw^ zbGqFshPJv641aZ+*=v_GzK~864#IxUYdbBkm&hkLs5b>>tRe%ns<=A5+^c7_nBxdb z!_?j^a-rs61`C)r-}#3&+atOVU;D2`j^CRxpf8s=8cIu z=^}k41RaEL$ioh82oS(5Ls-npGe5oU_AUNsqx&|dagCCjb@L%WY1pU|#U0;<3UCFL zz7$~=ek#-GwIVGB=6%26)%xvpv7{M=?XGXK z80wo3cz39E^fj&*k z&*q+gb%jhXTdY>P9o6<^FGTO+Ua%D7-?}b}92x8M|5=w54Z5>g>@81?ZlrXc&7#A4 z#zvy#9H8yxLn0*aR8v|Sg@`E8T)jbO0J`3>YZr)#i__u@#REf&w0nyL{Gq^pD6i*s z=9A#S(V^~_#8{7_H-^#N)xF=`=+mCX(wNE6PxmK>ekkdJnnu|EpH~CoeZ0lF2;#CI zjX%1Z!`+CvJ-n)+bR4gphnT!3Up7ZV?ohddpu1>`6|>ljd~TKJ7yQ7r1wb;>xAXWt4EK>IhKoKe&AcJ{EYG` zVWPE}tZJe)pJ$|1+eio)ID72VGut>lvKXq#T{kW2H6e(0$UJ$&SD>XX|~?1J!LE|y&iNPVUDR(2-#t;l0O;WL>}CJITA z=>FqwCi4%yk&frgQy8)F9v=kyN8tvZ`N`CepRocVuU6nl%iH?Oe{t!sqmBB4uw8c# zHM?jXEk(|6Y+{L~m{QIDgA_w0Bv!tI-43-%>~*H}cER~Ul?EgIGQbfK(=1ZXvLy1G z_HtK{Pg6qpt8s|2Vg=}*M*dY1h*OT_^m*EIUS{4&XI9Idasw{*JpAcNDt)K}O)@-H{SOK?C|T5=L@Qkzh={1NVACP; zw=lW@AMQr8g)EN_oeyE7)GlQ8C)i48xjS`Sle*UNWpzz-_c(TLS7i6g?(SjI;F62S zZi?Ni_W0a!tgGmpTa8h3*o^^xla6&B`>?)bJ$)rgKdEPa*h;qzE%-30h~gS0MA$#4 zJ1W;P61f=}-1OCPIEHHY_~9FInG(;@28G0r>yvc&>Q?;4Yu-x6`uU8k)kZCAuP&hvoVo24SmYF$`TFQQ-~DxwsyGm3RZ|RJ!*`w!x*qpQc^)B$Z!1Xo)wTNIkjEGx=Gb zo|bq)m(bGQ+E4G&o?;i~)=(=pySQQBNXCS}`j3qB zuM75l)aI`_$>RwlU42uKra!n#bfA@EjUmzS8T*+YFywVM`uTOM zqzL#LhPlNimv&b4`gUmEudfm8SmosM_Wcp_i7g55#L^zWi_yHTPBBbP&V)%We*yDz z(N(jG|!PDPJyn29`)C5=?s7FacdM16ym?Y}-Y62Z^#_sk=wa5&O)bnR>O z&JsNTjVdsm^lju!c0SIxRysv>*O~NsDdTFh@Ve&D(w1%sGgCznv2rO}&opVYw%N~xkhnr?S);E5LL_Qbs38B720Os2CnQ2Dv` zD`oGXRZFtu3^Ki#t6UEQgK<``eY^KM-6ZOY*vNZ|?oA+*f2o`qs7%&+@4g-zWEewI z^%hon8^nxx6L84(qtIt$Mxx9k9#!f@zQ}M|9 zSHHZE{?r!+h39RVAQVZu?;U%hamEn0eWpJ(hxfjHB|4 z29C11zNf`$L?PXvvG4za5C=>drwqRGR6YtO_>%4+ES;P4V!3;6b3P-V>ER!ZpgeY(8|N?W(SLPHBwS4y zR4}i2p(Z*~1#~ol${oRZi1F)o_LXCBk?xZVn%q*D`z@V} zqf@o`;rrqMzPl@_tb6s;K@bH8Ew&rOl5vS%xWLqw(*0jAM^b34>kd2IO)9#HqpP5n zkWOy!Off38^T|ts)+XZZd9xR4k%OY$8_8a~eBOEGG*maGfqai@cN3UgwcXyl;G&iv z%+p&Dmh5~v*dhuhhnh{Vs1N<+U6(LNmMmw3U97U4Y};R<9!skv-+tiTXbTC>>b&LC z-3;wq27?=JWmR0ykP0C2_Lx_uIaL1M>a_no^_aE1y)C~aZ|yu~$QN1b=AoaW4w$BJzWW!hn%$OX31dTg_;oX`dADGhUk37`hXhz8W=`T}c&Aam2aNwhMA;fq_b~*O= zGvdUxp50L{GPtvkXK*=pT;PZWdmOtGNnhy;#8EjrWH+f|+CZIo?mko0Z&(a}Nxx`s*g*0|5?2~t?%hs$WL&u=6lt$_p z!M$Q;uF3NwpH(_>AA94hYEl1p(2Jze03CQnYBpJy+v()1DXGZHz-F?9-)7!Z&ek??a# z*oo%t3I$m%?1|h}>z6qcy>6ZFKi6DPePWJ8%Vc8MKI3DKa?3BnNYyFl?B6s(-A7OI zQwWo&jzdmng#$#XQEs2xcD6<1_wRhKEuHCRvlDAieCD{$hTS`TrgmttE{FObZP@R# zBCMJ*N4&b#}=YCq(Uu)Va?s9|lweA7Z7tPl>EPtUJ8Oh5klB@#gC9wTX$gI%!7@&tYm)0*)tG z%|Eu*@yV!|uGOAMM8^wE2Xx~W>pQ)i(R~8OheBj+U z;{XG4s{60cC&tL9gy zDvre(;f}>ihsBROgJTgRHlOCxF^${N*NB_I70eQq=Pc4NpHW?#6vS_J*5ZwFQsBYo z0#mwV=Satuk$sa;@BJ~pHlOn-J?6{YIwjZbq`Gjz+SNNQD_yLuq*9WiG!IUXv;7|X zUZZ-u-y_cFTTHeiY3sy>cFAR5m`Sqyp33MD=0#mw47*6Kp^T&!9CKc-` z?Yr7Kf%hKVp_&>GIM3{6QpTSOp<_BBO2&LOipTX)jQ}D#Ors&xf$uDegfdDtVi!Wm7!=UB*ius2__qamqmiyqBh{mkL-g!XEu_ z;menht17!`bI1CzW0~^D4yR0S@0o^A1^lM|F}roDplnLFu2`&cYCT+!Z>tI)3-bY9 zH{7CwX5LT!JL#cyo`Q05c(%g5-tKq3x?kGb(pQQ)FCS!!vUz_yws~^_<rE4(JKd?=@{kfBIC2SnIiu@xNO}d%m?E?2^ovh|>DHjP6lz zy{z+xN>Dne>SqPcpSoKO5vdsTU#Gj(9%oaMya~g1z#jPiu};Ue>ul$nFt@Y zR7R+Hc0HyN;TS}9KQEr~^Lb$SO9m6G+^&v2FI@?ZTe!h1gTpKFQsI_^_)?vw2)m27 ziGF$l!Ql$;S&F2Op>6j=ZIsb?%Et>~JUne(?)0g}1gN^TK(|?wK8eB~a=f{--ibJ2 z6jU2Zm?pdxei%{w<>V7TnVu|MovVCd`SZeHxxyrROSkI^(W1{jjh^;ec7w4>GNn#c zmxhX9J?25!rd&8fD7(y=xC?f>_(K=bQ%qfr=h?s7+|fc?Q)N*&kk-&KjidF6TSz6C z+k7J`uI}Z8Ip>o6cy=~qC)}Kc-atf8Uy+I=xXQFgTrXyA;wJB0#)q*^H;Prp0HO@YS344+le-}ZBn@58F1@`UWR)zEmv z@s?)``&IS~hkLw)Nob$rXo-RR4dAJwTSfvuRe?UzW>*cd_Utz;xW`!fs%YpK#o@9!wo02{HSV;lY1lA(ufVUl%)_qgiAIrc-Uxu%K1J}fH z3tByVt<>t}qEGvl_iXmtQZph zH%1zYAYvy?k!DTS>GuiI-O!Nrr!V$r?Ik@x2hUD^%3FMAt$LsJLj}Fk!|Y_+wLq4z zEK9QU3%4|>jM9m_v<%I-%xt-asFeH-e{KWz1W$Hr?*$Hwcyjr;;OF_vHvPxXi5)F% zMJIe+LSK>xBdq@)Np04wKAJgEY{eBj*5RY3TAg2uI_B1t(Yw4wd~_ra0S~tjWSQd6l(t8Hg6;YJWDcm%jDI-c~ViVQw=tmC&$` zs+RbaAyAL$s9K9@nZ$3j&2RXuPC4R{_kn4_kqvwMD{4ge`rdoJSi@ZlFi8F3eg-vO zr^>jibg8}$GBFk%qb1Ll>K2^Plde=G$^H70VN7$Y%-c3()s14!royYH%UnkCJeUNi zg$s1y^%B9TfIBSU=CQ$FvgxS>f^p>2B=O4>NJM@c_A_Z>HQge6{nE2u;tP&T6^rKt zfy8&_t10;lte*Hc%d=52t@f3psQ87JzSJdftG-EM(U4GHxOBL_DrP4L7U>%GZ}iLq3N0`OJ^GYmuezZFgVmaO;U55T>u`19UGPrcE;@9*#Rst$;AQv0-&vZeKt)qf$M}hl1om@e{*zY<3Yy zRq9$nmrOooEk4G_7p;!=HjcSAb4$lZENUAnsoOC1b!m25Bdy5KVa4;m!>Ksg^YHtw zh35BvfvYsV2H_{o9iSU#T=sT?+SYxeV7+_F;(-(-Oa)&&j5ZmBpVtzwhxRxs1&Tpl zNzkEB7A>AScKdmB1%#HL1EH5c60vZ(lPK`He3I!rmLVVJ#Soo$)dqFmw69sY>7#AC zLoNsp91t3sPu6;k1FPt&VY8oIu!wOBnPR{R(VmF)8`0JHyS~`P*jTS9L?;`tgt>bh z=RVRIxdP+<7xqze=Be5rDmE2rwgkTve8`{RY|D#z+9#dwl|AL~hYHKlgm*b9^K>_! z-7$8BIh1F*hhzUp0Z1^8yGJs_)@5DGzII^}CcUKrZ?fob0i5`m}Q_pgWtx-G_SA>B>(YL$8cYpe@<| znsbRt%}z8usx&=n(?f)0-96nyMVg~crn9gGW}mBEa%?kenEl%Y+}@fOCrRdG__G%F zy?X0oZ}?rWKIpS}m9@u&fan+luy1@~fgX`(w?8p07O`*;a|oTkTJEX>;1~h1I~=cM za7on|xeF1;I!~S^*^Sx(i+g3{bCFy5bA5XnudKKC)dGH|V|iwk@c@%vsk756O%7_& zO?Ta0$mXZ?70wdY4#Dg->|Zpi{AF2jh709UOj^+wmcpcv-jOmKQ8PdzzWM!|z>O_d zvj%;Q;*DP$9cLJ5bgjLzcyPt4d%TRY!m?#>1Cy4|5#9)8S)|vqe_ZpfGx28kh;P*7 zxi5ruihkt6_atOARBaSK<$wNSs_~nQs^sG{v?JzjW-y*(_(GdUJilpJ)?4FYC?4g0 zxn!j`&Yy+tU|7jFIA0H7UaMV(b2*c<=_~h~#sUe>q`#Dr#$^`Eb=_SZ;2GPhi^#t+ ztuE2Adh5rti(CmfJTo?J$Q~Q^#7UHzVv_f1KGp7Vp#AGZ;(U;OR4C8HNpJk=j|D%n z{WLCODm_Om&GZkjJk1$7FU`tt_t6LAV?P@y4tkcDh@<(wt;AaWzU$~Tx9>*S1>xWX zgP^Jbwn^F>-ygX^Il11`{+t-aoc<51>9K&ulC~f8Mo6?}R6c&Fa@mI@s*)cIP7E9Jbm#fy8BuX?*;Ts*UC=l`2L%{pTI z(^&%4B?fu{P#R1zIGpquwpv4+NKB41QCt;WI~|?C#aW?54TqjMR=>1(XIL zBR{kztI<1N&3IEmUkytFyuP85XJQ?hT_#9=NC7roD#ILrV3-r=jZio1UzTcF=W$CcLy(khqeS%VW}B4Oz<;P9g24P3@LwFbz*8o=~ZJCzqKuMq;& zV&%ZBtbtt>=x*3+k~+LJnfEL~a;?@>jVMzLOSt}pOC|2^+-Cd&?%1sQE7G_r}y%>%Ri#{8WS6U3k+ zQ2}p4J`H&(TnxT=L{zWchOSV6ac)QIeBrK6H8PwI2p( zQ{jOOH8uiNYbb_!jyaa|j!)6lh|q()rJaJxBb-=n9d_$5Vt$#pDGodKKxds%TDHD*ji5kCzx;Ga6f@9@KS72r;;0Kd?Sm@wEvcppwWW>L5~iN zz&*Y8Up{0a+G)f3-@P%z69JyG+Rb)EGTeIJQVX4wdeVOjc!79Z_>(eT1smNjVF?Xizp0z zm{Dp6W)L{%K`H~&>(QsFn^?H>Z?kd0%z z=6QI<=M3?yI|9S3(Fx12H~*b!%wog}xZoJ4lp>-XCVKGXyqJgEAC0@r?~rrE_`Pzn z@pz@nwPz#O&kI;+ao!kK|A#~kBNKXP)WUE&p_DKZHH~v}$Us|>Bk(WbR274XrtFTX zmk6Y?Ou;3jZh@|A#p^ z?1487A_PZ$5Pb8>nk_N@??d>nDS`-bDUko39+rsr9-w(Ac~8BPi->f1)}I;?Ss3sF zTn1#ra7=i0Ae&{M*%*aPM;a@9bGtsq!sOpxC#WKD*M_X)JNLt#ZFLFU7%&;G$CbH2 zk6dEJx+0=S^ZvKQD_O|l733{ip?wl3v`~BU5Am7?2n-M6qF6wY9Qpw+l{xyHl$CLM9i0BKG|DzUCXdFLj< zcm6$I!iv19 z?MH12WOrnE!DZJ&B$epk0#C#1$ln?f6AIh^8{EelVFS`|P1Msu^lwM5>e+@C<{Y) zN|Hylya~t!j}Y0!Y&acr3mW#_c}8)8RFFnQXtM$hjX6$b^9lTBu()4PR==iBZeWr_ zqF=qlk4kK?@TzKt2`_~GO_@3WkrMV#R6+Y z7c{YR+@R5PQHD)o=?V2Zda_~kmyo6}kZ9s}u^mt$_wzZJY6H^(hwC-WRNDoeoe+4d za+vR|)eX}%_@Wol-9k-XxyXhMt*!SX1YW;^$j9xmtw5YP4d>;RTu-j9J5x;ElQqy< zwl`PjX8Q)b#%*XtvNfG|$Vz~6=#FNCMbi*~k;mMsUcLacy$w20waTbFB?^`)03QB3 z1Xl+tsZ>QU@yVPrU?p-NrSz zI0w1dEFk3qT%2W%{ED0B@Gba42{FNf3?H!|(wWwUtQ3E=gFcy`Pq}FuIWlL65VkSs z@4zXT_8ghB@lU4R$ec;RoIP*y=4M7Dg%$3U_qOF;f&nX9S0WQ^hFm=I#H|>fB zCs9+ebSXC#3`Q^NHY$4d7f{-33p$`3GS7N1?-J-sPNng(%${yRCYVJDS`jeunY`Ly z*QVJvy}AX%Yq<(v3`5hgB%B;Cj9F}m&2sO9LyXi^yh5S_wB>sF?itpqgq27aLJOce z-UPICJ77(@p_ju$?%S8#@c+Z@^@j1|JYA1FJvb1lXgjaC11rZ=flQ3k@{lcg7Bv=B z&t#1Of151?SQLs(I&q|Xs3D`QcboLx6yB{Rk5y^ zup!45h>K_GsVS+!4wuIW<}Fi!JeR;Kw+uLc`pl{tgp=a@6F*+my<8XKwBFsU{s)MR zrR?oMsK=2=*XApgEmSDT4qP)IxPml1G=_1+08PzX*_1Tvb(sBDK&I=mkX{u1^ILr% zn%f&gMP6vkcRJ>Wi%g9L6=SbN!hdvV-O!DGP&xbU6*zB(B(053VXI*(m(}e3B-94pqQ}4m5z=;%kornQxY+Sfi2<+@m_)j$k}jG<#C>u+gy0F! zNa*_L#Ia_Az%$yII}e{Pux*H_lsm3);0Wo7L7$K@atf zn}RQ*wr;xEc8>yKM>2Qc7XZ*cUZ1RUCVVitC6HRWU)lNPy4yKQ{)xL?y8^T62{)}Q zx9&iHmFTI4fRkORz>}r$T4*hpF?N0tkS)3{LfXpv!u`6t*P^jDsc`rWT}YId4@#Ot|Y-& zl>7JAgBCX-%!RpcdTfy{WM2T9rB$7+{=R8;7*>+I8xYaw6HPnf_+m`~P4vkn4+^f@ zi=h8{<1E7D&K*vG`sAYFRv0{0Ja#T4N;$aG z4w|uPr67bT0^vdxpF}PQJBD=ne6n59^kTin*fchy7Rh#v^y2*oPubdcfpey5_R{b1 zCcglB+rSupv%ah$+r9Ctf2wjxxsTE1-JGyWR}+^cA0ATpYhp? zV+Z=agkJkV^4slBvH5WvuSX-Yy5c*nH)NrEpFoYbvbp;3Rm3`y$Hh#R-&moq|E-y{ zpQmv>HWX3Ca11AiM`x#}^O(pYpP0Oan8g`U4&IS|r-q9Oa@=gF{=2?=g!q5c>HlB% zM!voMlfQET{NESk_+NLt|9g!8k3_lt{~`d_A5^=28H8|~(v9*5w2D({4`dVmAg1OcQd#(3ISoVn%ZF=7ATT)K<^R6%|7>!+8@3UHSL}F$bRS$UghU}SM)N_o>!=nqNG7xhrQMqM8UlReSKd;j9+$^4tUC(Q#imQD79Z6;=4wQ_J$4x z%S?&SO0eWHpAiF<;233=MOffu#@LY+=RU7 zl{dQ)E4JMZN#5H``G6-f3=nM_bgNh@gxzPl|>f=wWb1bBB&A3#JS4cO%;!<@Si3l0eyzVp~DbAkx z9&|D!!gWTQVJy)`;wyf;kE_U4U1(w-i&~2*OQTSXeGl6*B{sLXiUBP##>fCia z?iM&^KiPIktZ7wzG5!#WoR*9Bz}G7=m9L!GtL&UxDdTx8YGrqoIQ8sI*Sm#u?ZdIB z-_redXA`ZOeprU&b0DVaYD@J-6J1K4XD~NXPr1YB%tR*bHz}niIwceYBZ^4oIaUaUVkoVUyR))MZ%d#zFRarVfSjD3J97j@`O$pVs*@ zq#{F0lsA|VDLI-!dMD~qt2m*wQV>opfo{+&Rxb7^d5aV%SsdG(5Azuksl&&kZ^qp% zz~;MnHI2IkrN(kKO{L|nFvib9X9FLRayu~dD@Yx7r7Xac#n|BB!ePA2bnz?hk07IG z-sh-jO2%vzVcPkx&gU_lPXFYe;NxFa%FaAYF9nJZgDIbYC z3BZAx^Q>`LAB=f3B)IaolUAM|0t`re#Q5dDex2F z`d$5I!7@Vj^AQyHyC9TeJHPP&`5j30rP0bIyTe;$ok1R87(FZpUlb$Z@SU@d4&~E? z@Uu=XyMQvYIJ=9KuqTr(W)H&Ij&GqynHX)2u{Ld{B39U1v)^fD46M|Y4n&usI^=V) zS$~eK=;u_3CMji~UAx%lQIPfBxI!~IJ#eJWNkK4wkx1L5Ga-iJ{=6}OvVpRaqFvKc z%-g|m)8^p!0`%t)7e3uu9Ad^Z4Yi^ia!s8|fS2mSA&$@6mD2QqxI9SSUTo)dhgjGAch zCyoLdEcubo=5wY27d}D6<%bxLeE~p(TJPNa!HR%JTAu?`jP|f#B(5?P)CyCuMdXfo z;Cv_twu5P?)Pctd8V@kPnzSf>RAAqG1G z>~pPAJ_@X=ddP?dor_9gMEz1sd%{7YBsr#I!|JeN|7>E(r&S}t@K*%~AE}j`yW{v8 z*t;PK#iga7pUV7n3ZuTZC6dLi+}FcM4$~2<@^`Od>_DlNKEjBR0cVOM10@O4dYU%u zjam~_C*hE~te<##K9h#X50$|fJwIcoAN2{hc zaTx=5!L~^6c(_u~KvLL#wW93e-fgUVNKCtb0t*K=mg*ZE@0uu>gL$SR9hie`Bzd+i z)p+JK8~%e_3rxwbrE8Q@2FpXAQhIll(Nn&U3STG7aV+MF_GMpQYQM^p=Lw4J`=Xk< zkd5{g4-mT)WoMmnr24HJi3=XCXe2)JaO?95#`QR#b@QAuVDv7_an$>KlVN;4N_sz1 zG~|J>2GfSUli!7KhFc?Sa@Amiw8mP29TceK6nReWH>pv1-5I*FC$9bYDlg?mpy5+e zR1*a((NDarh=rQ)^@k>Zx#(F$SalN$M{fBce2;m+GA@)e00>sm#0WwOu|wNU4N-3m zZZBZ;&NMrGXxR)gf~RpM5C^mT6Hx?OV1G?kz z@g&owDGUdhZR`y^(9D&eNz?1Vz%gwuuc+6lbl!NuFMY(LiLQMI%^bsG@VzDh|FWY< zC`zV|UjMZ2iSxHqU&m>zIG&m8C|P=niNB%A9|_T)1C2u^khV;MuYrkqBW87~XbEsK zS>EFV?lezxeb03~>UNH_eu0n6HY^0_%CO zyJ{DB59Yo3@8NtGM$Vy^R}cE*xpJO~sh(9L`26&{?4)qr_B+$=lxudgO3=_IorqCX zr0`akM&v4**G@As{+I?|T_y{ADpHOi5-1iT+;;<7wwRli^I8Pr=sW!DBvY~`JSOGH>80?xPu29rLc+)Tttmb zc3gN9`s8vw6x}^uxyOidWZ2G!s~6{LCv1RNj&biR?)_eyX0LER6q36KXgxj+Kdg6z zxCtK43l5uR2^0TNVu&SY@nXTV4YAu+BgCo5oPnvS3Wz-WbqWk5sD78MRz3fVZ7G04KgsrsYkLo&{dp_ihLS+;6*^CvXivoC82t_1 zU5HTgdQGmeuA;Lhy-WsSLGIr16ehWQOT^+dTiqv!1lYrhR|%9JptW3PVjk}-4+~z{ zTX>&pp-B1@I8P+`ReW0)q1Z?jPBa4-NYjAQm$}b89qpAX0rVs#_(bxmsCG?i_E8@| zC)bs^HA4@Tm&?Fq?Lo~!-&ev24o8%7vJgJ|wAlVMg*Mpoe+v8G`vjdYSCs5iC}vzE zNwV%Ke5^PO2?V|3DoI{(m+}hnS_(|84j)ocP6$vI+a1AfIgE56>8XZX+FWZLD|wbE za)erS3>(32Ut~JnG-*OjNmbww%QM2L7U(ES0ud2hM4aGrkoKWJuhD`2#UCv=E&H`7Ot|VLli|G-3#BVm{hJ_DxzCTp5U&Be42- zb?l2k>n&g!i__hvOD?wdjM<4(B|Q^|{lKbfyCc2@auXI^UP!MLgIIcX88RwR{};{f zDSCi$KU!xEb+hpZqXr@G(~mL=J9&}XfozQEzdO)N~@cjBXzEOf8W$vfr+u!G;O@%Uq#=fF{i zdL$(0r~&85I|MgE%QJhLocc(HcdVRl9TB5uB#dO&LSZ#-)2ZzQAZxP;LndpO1FkkQ zrOk2JE+(4n>^fDlfSZOyn`AZkIXzueL97FxO@2y}s+MC3}8 zb+0ASIE;ap=zSN~lW>9|X`F^u?vO!JcG@g|sbTZC%{z!1CIE?wx%O%qg`}k@k(9Pg z5-scfcX%kzo1iX{X5xb9L^oSlW&r>Ep{|(O&j*B8%Mu!g)hS1<{-_vyLU$2Cx$$cI zu0y7#9XJ7&&z%t9qgwa@xa`GvW-rjQw)eC7ed$ByJ#nR}+U9!fzXLM(PBEv({^ILS zkRa|LqNBSF2ect#p$vHz3bU&E;S`9wfroF~!Pnf9SF!rQ59jvMH9wzTXSRfjSH9Su zK6a1yLc~24-b#@OHirGE@h2zY{Wg@RC#+rV=0Yq{`?<49^2ix%@jEzWz*wzouU20N zs_m&sQh}5a@I6KV|0{oUx5T zU_N$|Pb0uDlc`$2CFF6m$Hl7p;PoZ?=%&lx#$wp%j{u5*#fT9{sSj#r1|}Nb_)TS=uN6W$jK})+tM8*mw5$mm9LQ^($1&Nkj2gSklOnR6R(IKQF>z;^F zW|CK_6*bc@w=l?{j^2xrSq$U4gT^rUSQtQxgC=1Rvd=;SGNMiZG^D*Q@BLx_57Ai^ zVANx%G_~sP8l1svGt3qxDH(c1$bZ3pG5h^UUSOcv5vS7adavsp)P}u`Q73p%vCsm% zPls*47rx(d^K4D;6c{D?M()Ps-|d%j%k_a<^$Tm93yzw}JYwJF(|Qq2@%yaF2@D}8 z=C7qUt0Ek-0!`un7mmzx`}7q13zAonF~X&W#_;6tLQ8c)4>BVgh%fC6d`+@eCCC8e zfo7P{B4-6s?cqyw)8+(}MoVU*<%5C)dJ2wE(d@sVQ$Ec$JHI7`*gS-pv#KVaiOK{EHW zZg@i&r#6sNa*9gD5X|op_cq|vKg<}jDB1p+Ez20oI@a-SB2({K?zUY2bHy z4M}zd0NbXiniYc5{~O-$-vR6O;3>uNo`U3{4RBO^K0X`AbAUFfjeSI*3RuYaJSB{2 zkW+%`pTT6lATjdi&>v2rhG!5F@j@}_Zv)iun<4FKIvsIA*(sV%(^6~*><|BKizs|D zPKJ5<7|t{b=p76!(p$eHI^y~N9vNee7J-rbPJ%h83x@7Uv^YS;!PEx&tM0qkMQ4zbS?(eA^;eONAmJ-{|j8yUX(x7)V4g z82?{_t3IVBdFZ}<53wC);AGCH;6%262;EI(0SJVj7jd>uj*g#^M9y;v0H{xU6JCt~ z@+RSSJ;PB2CNcB@It3Am$-iZb1$p=j*xkb-=>N3`qMg5Q0_{J(zzh7;w$Y9Gh;bWBJSOvO8!e2V*tk%IREFMY2U?SgF3ALVi<+eq{wpS0dT(B<$@YoeaM~hma1FAq0E` zk=_^x$=yCV{xbswEzuK4vo~X%fY`#@Jkse~x(pIy9|n4BTwyXGKzFLCoN0gE4#|ZX z_>CwC2i+Mde#!#z$KrzxS`zT85{?chPD;4t5Nr&Py67>yII?;Aqx>_zBuGnEvH75~ z?iYC}(c%pxH*srchy_R=UH~1GCi}=K;s;y=R)kwCg!aa5NU!Msq8%jpeRk)&<(C=i zrG{5*iW$(G*cSZDcF55D(ns0dd2w<$@fi4ksY?MUrT}oBX7TglO41S>~pj0-pcdk%284~_z!?~fZ2T6&-Er++L%qc=V0fLc@?>IECcQU#Y- zEdO#1WPVZ(3fGaYDT;P3y5-7a73oKV%?z#`>Qi+*ig#}8C&Aghke$sYmM?6*;tccg zMS$2+V7}-3?I1LSb?#t|nF{+C|24nA!UXC# z8s}!`Tr*`uLJ?0~8tX%DNrF4|FTupW;s|M*_;`RxB(c3)Uk43=P4tgJbn*g%Uf?KI z>j8j^I=poS;i&y-Q!}6Q;^qChmhr;J?aSTd+o^eRrPq}TjM6VeZQ()qCM5vh&#%5NtEsy`sCP^bS59tcaEWXvFp71C(sKJ@<_u(?f94T1 z8hZ)f0t1PeV{Fl*z(3neO5M zS&E|)jvwCiKB)XZKgi6uE;+|fR2Ps%Mg?(zjNib+nP`9*1vV+msWLCZ8MD$n8vi-x zY7!7h46gA%V{#!t#tL{E0GSR%_=aOw>35veLOAm=$s1TC`)`ccE|ImQlBuHZ(tgMMg5=wiUY1?U|3Y_i!E@y2onF681kQjxHjBFmU#5&k5RQY`X%a8h-TK1&nlI z{Aq|s-w-2!gkcaklc>iX$%n3U09KRzHL+ zV0vb>tu*SUA*oyg^nR4$tq{EJ|J`)kj;TEAB2<;GKH!i}BaNGs>-is4oe4D5ec1l( zV;x)8#$NVN!dSwHP*O^kB7+d25uxnHUZ_--Y-y7ul3f_PvQ=cy$i9p0+yDOcyzhI? z|D5M^o=%-GGr#ZmzOVbbK6e^Nl_Z{he;YMI759Q&ICaXHTHV{>tvu?RH5WI}PGs>3 zKu@Z=>6hCJ%F6f(#KRAVc*vtBYAya5r1}3-bb|O=It#$$I z$|(iX0j|L!X^h1(%$qM?P&dW=xp&(k{H$mh^L6SiHsx<)TY4Au;ttptW@4$1Uoyo= zO#F*kdpzRaNtmfUQ?KeZ80fFGZP^nnL_C@WlDL0!)|C>M< zuZs!XS)J?q(YlQcVY_Dtl!Kak~($vmOp6K0;YOzItDf>>{YQjgV-kEKucq;DC3 zcIPSg42-b&rV!))dofh-N%rU|7eGncgZY>Hc8;t1fkF3Rex5yfI~eXKf~4BrZe?jQ zuT3{MbAF!=lo%~Y(#|q5BYqB zUT$}XL_MS=b~fcW!>P@LeG|?#=scH*omByTGD1ee=XJv`41^qm+|I*mRz+;V*uDaL zeVe6s_X01%lC>Dwf0^I!NdLFh7I84u zOwPNVF)(E|c&mo_+=We3I#41VLhK9R`K;?$M3Ynb+GD=$!C0Zkn@;%1@ag>v;na^K z)0p8gE{hgmJ5fuiE=um=EB=Pyg>JAekKI6h9}T0%nn%b-Ay(fc5qW9`Q+`T%6kv?s z&q2|&w$}$Y9WsP+xD9bm%MIV7|K3fcvaUVp37?0Ul&$-%QN!b~2qOj{$q;%GT_O8f zwiTUvEyCeIR#6G$fq}_{61PAZ6U;V@H({a1kTc1=m#6V2B@YsAL2Sr_&h0XRV)g}` zJJGiKgpE655{2n_%10~C5t9rhyppLMX~VE*I<(=u2W9oe{6b#!`vo-&^9-oDtH^qp z+HZF{3ZfW0SeOqz@P-E9yQYq-(7&SeDCHJ5s${gQQ_64y7&89n1Vo>?$)`1UOn)@C z@{^Xf=!YhA=M!XKEK?b2(lzTh{~(U{hS?)C(|J@{f~fKruraJjVApG??_oj}&`2y& z)P&ljd!jwh3DL{W0}}slr#MfSNWmL*5m}Zh8p1;8%8^WUwAJJN%Q^AXR@toVX7QS` zzQ9XJwc$pao?rS)S^M2q;t20@5%p%5>PKsyHIGckhq6~2lJFiH;()NB2om0?Bm^Om zk3L>gPv@cqi2zI&zkob64#FX(oN&I^*1d4V?JkQ|TlNFjGb)+2g_!X75@zL^{?CjYQEjO6LU9Fn5T)!W37hD9nsduxCO--e8+#i>G zJ9Y35SPX1q?UpcMe=qE9JgcTVb?W6~iU7<@FMO{oasX#bz{nu8dg?p>qh62Ts{Pdu zK}s3a*v8X|AiG?7Dr+eUnrXc3ja_lTEP<|3ulU9>iq5aOZsY*lHk25 zcZJ8dI0q#Yl7B1vT!!W{Xtw?Cp-^UBKsxY$_J@QdUw9PXCRJI=sKvZmKmf-tbo%&Yi z%~SK2qxHbslh<+TAi`Ulsy~o&Z=y7_weRNfz8Q>aq?dWfYmoVfzEl8Z5)jJp0;I;? zpbvWE(J`ZO{}ieMh z`n)-I_wV&G2m;KjD0pk4sMEFb@A17hEl}j4oJYiWV&7cviKbHP?`k7by}0*GTrOj` z*{gTwZ|d=!>~nY0@C>6~ILXB{25@dp>raOO`1Q$2NQ0+z2^yGzMQ;U7kh!hBe)YVF zQ~Odn*;cR1VL%DPE(4NqJ_8~pJUA5MFLQjxFc)8-$6;XC6msJWq<5yuy8qnW?_=as zx-vHX^y;}Fe1+@YyOfDP&`ynhcuD$VOEY$3dV_nj2*5a{)9K{NAeM zURo{+jnyFh9S;_>-zaK}si)V^1qDw&e*gNc#+(;Dswc6$--GOS zZ_9N2*NhJW&738pWTcSJ=WmT|fMM5E%$N*=DRanD9JNn%q)h?GALtbS?7=6IYfjw< zb3nJA`QJ}rhzz%Udts;sVfcE-Jy0z_!?>mYrqLXMWuf=BI(lha%ce8h?;I^khWd5{ zalnHB=#B7%7&RaGGb45$)14*AT}|(srK@^6#^&~(jU7HvuHAAFOUM)$7JqnpuKe|PW z8zmmRBm|%KkjL8@2k`nrzj5`KTXo(;Hbw;#9<)nOR~_pH^oIji%Dtd6UBigSE@>CK z_I+&D@I8CVd5P+vPq`}dqr7_WpzX_vXSkVyX2OwLwL==dXTBDb& zXrvw&8-S!22h+by)W0<60l`|kFzUxynlw8M>tw1_JGdvFYtru=!(Tqm`-lyFUMQU@ z)$pRM0zGOKhj;4|i2F6xk}z-KqaRr~p2{PGA!h+K^K!C<X1tLq=b&7vwe5N1+z+4ETR68R0S0msXOa7t5h*HJ+LhK1r zK8UO}@>~`M;Zy>1NewFJ;RRfqIqi_f2@l=--ZtT2p~I&E6=@Qu0GnuYC#`f zY->)tb@1;j-8V5g;4~pvQcWUQ6}R;+V3$mmGO3`9%&x&XBmz;b7B?Tc021svA}ti& zzp#BFXY}+Iw$tV@Df3;Qp83bqFl&AVLIdfgZv3i#Wwx`>@WMVAYM1**jXrrG@+yoA zgM$}bA3<>L!`vhA9*%9F3>L8Oy{cC;S!PV}*jf{b_``qKeX0J!=a4xyo?7YBA+?8s zejzamdp@t!#-C79(^*`d9MwL{)dJyqyAS%cX+FQCW_){>$;q@G#&TF8luM2Q7$#_V ztpC1S@yL7~qnn1E{A{ep_|3XKD=wZ^^M@6|q2?U_&SBxHJiUJ*7pMbnO}|Pk&sF`< z-V~A|Ej^W?efB`~g4ct!`GIGPH0BRhJSc?NmRf2+P|$^@LE8CvUt%t2aQua$UJ;k9 zD|goy(pDD^_3t6-l$T0Y&6^)kl5xIQ_k8lr)Fe;mWqX-RZdFU$!`41nzdi8*|Ls{! z)3yJ>g^DhOyf5zmGD%bD`0pu%uYrR(GGn}bfjU~Qd`fgXFN|d`Q@+s78&l&iZq{#q zSS#Ixtd2MwTbxq|;9Ij+kT9K+_YXL#i9RplEvL5cH1oIbCiTpXpSj6J@>7dOX}Bwx z{;F#&99lt3nMndDg~V(op`G%&s^(DmN~;3Xuaa)F6hCP?)X4@zs!WmWLSv37ai})G zS;a&{!sg_>N(dvW;o658jX@8#M|UB%b;3kFEtG5jKRwxJ>y6f~Vg6Sei7$+c0jQ%oMAoi7ShBvjI4S4+TID6L@Gc{I~eG)&w{+_8r_WhL-_ho4I zW8^A7daidsxjz|x_0JraY~4Kfc~ooYlYL+_k4Sqr!!k0r3OYjErKi%O1~33SBC}Px zzqfslQ7UvOR$9)YGDY^Iz_^QJ1bOcm&^oOzCc_R~orw&;GW=h6qyT zHJYB4+`2OqN3E4rLqhCV$cFO}D5i*C;#|*ZhgB^aVmk<}@7-W8Pw^R+P3sy@;pIwLL;DYpE9f7D zf5Yp2iQ&rE2 zsI8Gti&TFR_v9^DPCU_C^fumbpdmtebaNS`mB$k4zB*m{aRE0oW92GgE}Vsqahp6? zbx?WO-xD!fjDw)_7!k-EWHw?J4}D@E4k|?tGvMEgmSk$q5q{9#Qu@LG9t|Iryo=SE zYXU_>-UEDzaC7`DMYFF=b|iu*Y|`bQ0S4=@jqJm-8-lt4CbAyqvV(+h)dhY9!1DVD z8gjFVzQAFaK001I@#?LYWz_%c0Z<*=uW+J# zkvJb0PrW-)#6^Ydm#&0d*WInrE`D7h)ObA8nSUR`;~Yr+@#42PrgX8{|AU(IRr~JG z10D|+)#fgAw$R@M6vi*8o`m`&OGbrlR7s!mJssfxk|Y**)mbiKnw?P?VX=MK>idW@ zJ|V$at>wFy=<8GbqHs-?Zn4D=F-!CM`V4yLU*mIc!c`p$b(Y5HKCLt0Fc3pZgwgD- zbI(k#6?dFTd$2y3=dQ#)I~`WuFzPu6YoN1D?mSa=liigM+Ps&+dWRKDrqEink3TU{ z#&=< z5C3xc+H;K^+ewV~k1~pZ^{8RnNP$W?Ap7F1uUZeze(YP%Wc>LQz3=C~s3gFf*%lotQqK{nudyn43+;@yfVA^%t^tJvenJ-ZTXEP1nUzV)PL znnuU;o0R=kP1u!_`qjO3gib4-F)BTVd#@~p`4{p*Pu;;v-A=u6peD+cEz@(%l=-BW z7<7c5wz43$IItm5K_L?tmA*jj2*dMOdd?A5r13DN1F<5!=^Fz|q2b5#laZ-fMp1Ch z|5EnId&e%u)r#N1a$ec4sm*gvK4S9=v`eDO(O&^&h*nrVDO^igRDjt zwxSRPhnhLHMX>AD9`{Z(^Xf3!mP&HtO%>nHUy!+qPOYQ@qn5Xc42C@=iSJ4IwKPoP z$zBa^u{W&4IME8WAQV19=H0JiulonV-|hGe;1$2}nO_|{z$5#S(PcJ#6lh|D*VY+j za>>)i6r7gbsMvrEVQcepzYTx=G6b9N=^Yix%R=Hw7&Fk<2Hxmh1lCG@sGJVE2+RLt5ly+FIKCV|P^HBbkM=fq=AFgD)x{i&;+ z@i1cX%Fy^k8Es#A`L7=WK~E!`%y<@g1U<=6p7ee8TTh*|Dymz=W!CVL)#Z5MYtGj2 zzrJfCk-GO=UFZ)RhgZ+*pyY-73OLGPlXAbBA45@3U#lOPt3cPX;ztvwUyCK<C*n=ikM3wRnr#(?gf3oXVu@q zB5{JXJ5f(&E&3M0ld@!;DgN8)(|(RPX}%mgupHGisp8#O25_sc)OawehzMejib^u7 z<0uohO-S?UHS5oqjIr7Wh55s%tC$8|{OEf}D5_7mPz`Nmz7DQ!c{pi|4c5+dq`Wa^ zaxv8G7f8HM6DGo_=ja(0slw!iCgUX~w~!UGX58NHy0r9%rYcfo|0Wbr(|8~|fp)My z6a_S*41wy}{)FesqjP!VH_AbXGwAUh`xH@&L!;A?k3Me*)Rwt;`kR;9B7q{Lsb=(V z*gS`@1AOOZu3)v91{qHo9eDeGs`-@CV?ywyr@haETUd;^!PI>9VGsma3N(_g-Fl~Q ztq<7CX5yu1?pdeY)crt-eP7WP^a=qS;%Je7E`-Sc<1joY92zd;8sg2}TCoA?Il~my z2P807kX{K)RS)*O6VUS!V7&2B`o4N5e?#~XSq!kiy*(%ad zhBfAe@Tv2J)>2N4)#3tJdzB!JlY^o&p;VXcT&#f=$8G`Z{PBrA^|6#6E;8efa$xs zaPCIuyv@WM(>#&WV2Nqj5^}NTkr!jnMOG@NSv2e1RWD=k5N9@Ps-TEJYcY zK3lQH8kn++NXTPUYx`cMNOLG1e3)R?8toa!jOqaI`;DWC7J^C{!Y-!_ygnLs<%WV= zTza`5#$x@Ln=@n4suNw^?*lchm81}LMD=girNlu0CGE33(f!|*Cliq1uj(}OYxT)y z7do9TcW;I0Cd75`6_>gxB3n+qvD1BNbfU`_eB=*%rWt+9piZHkh9ftAJfzUl-#lAY z$TJ;Nd0t|?jp5jDvRAKa5$nXaAtq#`mhRDD_YTa9O&b%PeB=U4RB(i8!z zUj}<)U9OSVsbNTPPahM-Yg)wH_}LcOi2su#NwL$k?t#_`~Xowvzyqyj>f`c25JWJ`+9+&mA! zEd2bE;tbBMN!5Zb{-SP;l<)L+#a@0Wsi=P;)T}2)!lk1WGCTRwhcnv9b{3$Q9(|nj z&-C_D|6l2B$)S$!WZcl`Y_i-|hZ+Bkq+jr7nS z#!pEibNP?d(U`+kW}EF6w+B*c7;sUhNHelTO1n-NT!Zn+^T%TdO6fmx%prXW zEsLd5>h_`;X=vqS9?AZDk-j5Y!;wD*r?J{+BG3XZ3G7J+LKGYEgnywbasW8l^>%4_ z3RNeYUu|H6TWF1z@f_5g>)})wi3$eRq%;EQY?AKgzqtpeo_j4Fz^3(ZBbmK>k!}}J zv%ilryhLb6$74_J7B?`UJc^f0)QxIK3cY5!-UiyI5;E00;7kl=a371D57-dZPWKOL zPX=o}o?lAN3P=iOYfrZLHz1J>1Ela{7ORRKF4wbBsWD)au+qwaU=ygN6B);qz~J=H|ZniWQ!6nbko zvAnRh&PT4E>l4qg9-_T+i@#J z4|NZIynq7!nt|#;H$bm3y*d;G&Y?RKxxm5`9zX{CemlK)kuxR=LFB}>e)wa^h$84t zr^@9xXQgsIF~-*D>J$V4!(&4pfvq`DrY^D$mK)vT<7eGUZvguvQ9xQ z#n97rMdl%?Ta7MilUWz!bViAcKAd@#AF{xcnnUG4GS>SzEgE0M1C zAY8&~asOcD#!W5y$%Zmcv>b?L+1D09b^NFXQ`+>4?rxxWA8X{rmlzy4V?n8{=Iu;F zy~Q~`Kw-~1%v3r7)li}Jg#i!rPxIj>0Q*Q7jR@C&al4d7V56#oTnCIDDWJ6D<2|JO z4;|=&kaldZ!wYo14V1F$oU}=@=LfzAQXka8PW}2^QKT0jy)iH8MK;T_8$TSz76#1O zF$CeCdlkFw58wbc2X(=kmyfj=Q4w+b$B-#M9o^fwlqvW&>n~MoDV+{4Li@Mdh6*^k zS~W{xggf|e)f*X137Vlh+GXfTqvbz%vBmwvk4mDQ|a6f@6S z++ke-?eYiUi9AJx79kr6Rv+R+b(cJct!J;A2$mk$?puKCdO5!TIRU<%%jyMRMR-qh zq4U+-Ro|Ee5lLA)qp;WXiZywWs!G0KbR?J>O)ydYpx{LN6G5yA**x=DlQ$+)jNbR7 z9c=+BdpMCz2p(n15hz6V*b8k%?)8EjPF6_Ba51}bBk zy3bmd<;OE01#Y^(;TQio*i|at}QH;*imU}3?kH4z%GXv{aAhnhm)W7U{&=_ zF}a3;JKJ19YVu`68g_)D2cf^H_I0vWE(*Wa0F#8OGt7i~mB`*q>33(|syd8}0or9P zx#;HbuX8@?)52;sFHID*gH0lPy#*S7hWFnuta$oiTC|h?%0;gy;lDDNoy9V}t6zZ+ zz%2_Ko%A&6=q&o&9k`lUq)E%&= zRE_Xoq*XHKxEZj-&UIL?r0^?9_X!(Q(=!U+B7NSOmpr+r`RVYlh~uUku&P=AFR3r3 zwqyPHefj~!91u&hq<*lvyNUR}{p@G|y7tab>2Bu{;{&qA`RL#l? zor1| zkc3OEao1R>14?~WK)9i`$09E=jVmQ_gvdt$QcYc&z^YF)k9l7oy z;Vez`PFWp30%97M0LM#dGTDrX2baGiDMMReV?Du;t->U6q$Kr@~hDZOKV+kR5xmK~WOy4}V7o@k=H%w-kqdv#? z@DWZhz!x-Ih&&0~738Xo9sLB<;K|0VP!cuG&<~z` zldz?F$2Q$qqN`0ewy+_-dnd0QWVuYiopiPNPd|3JcH&rmi6Jzad&?!G{j;FhHBs)7 zulGJdaT<*_#rs%#UOhA95q!_K*sy{6;7N1T)sYXi^Vfs->FP-)ADI+9k9*JcrWT8^ z_NxG-u6OV0vGzQ3|omY9&i38hO+pgwnVL4 zxL+w5O0u*IMc0%P4+#bQeYkt-f{B>FVY})~%}hYi5Bb>-)m2DVUUhmrHS>f;!9Mia z4E-T#DCywGrY~W5&~i92O6^WD*B+8~nZIiRp^Mz1!(0}+j$E2FRs~lmDh%@no+sr) zXoA%KJDiD!vGGQmQjhG!v4PK5uBYCUj!Nc0!gC&D4dwKnT8{z6(*1NRTSXSrr7s|xK;wdF;chL52?F6n8sS1lXntdm134=qAx$L2 zl+A!hIG+eS>#oCRpZ<$GbR*T)>V1`P;#gzKKV09%X&QdgsPEf>>!&|Nn0H0MN#B2d zR0+QEZX@`+O7Vf40p{wjieuLxyrD4Z0-$h}NEgB~t%QTi*GnM#4W-7UgT*9S?RL%_ zsH790SlSzba(+TF+6z|K^>bhKp-lZi!u7!qF1@vV215CVk=V294bMA+GO2Gr0|CfP zqWDr>!3ylX6+_TkM~ZuOkZHNecAlJHyG*g*FxUYncHF=y{__n;m5h7HSVuk4lZR^n z_2~}mp`XY_qZhj(-v0%kgg1d)q)CP8B|RSiD_z^>!PGetpMYR~&0$_LuRDY%inFe| z4PCxMngdJ0(^%#H=Ddp)We=~Azo}rSK>$n1cDphSx4vp8;uv*HCCkcP&!Ha}MNCK) zLWJR(zujW-8lvC`i*ZYiG|UB!v)+9>V)Hpdeb`!sF0Q{f^CoWwV8z6Gj~vwM3LyYx zY!gjCbmA7Q_v%IS-&bwq7^pGfUO0k9d$m7yYD+oXW91o}{rR#bAgqUe5cW_awqS4Q zc&ivIas1NbMibj-&{*amiJBQc53m-;D#06QQIP^hkYn3!@xvtFJiF$T6miJ1m`*S_ zcv5At##NtE?qp9BQ(^Np1DnbNOQe!%!CsEEyBp%YN> z_JC!5H-5a19r)QKx4sFqtqqbM4*{T?fmT5us6jHL*AXLA62J+P~KgH9lZ(n^tIjw|IQOgJ<}jQ87$|2Z0VHW z1G-)MryKQwpmut);ki2m!SyLjnR`VsuFmV@J!Gz5HknHIP)Rcr&LQjb8F!hT z(r!P!A(TGN>vB?C!nbVlblM@)XPmD$WOYV_OV%YZW6NYgpKMlFj~>xmIlZEuTBLe^$JC z$FMs(^S71dn*EZQQ|xwAfi1B%st&J0mve-i%FEm&T-YvGQkULOS_kjeT>EWA7i5zI z!=1`Gb17fmp0I2X zT0`K2=Rx0T+(9$LzsU#7B2_ZdVtHD((pX1s3D0z-OB+IreHHsD{Oy3x9RD*Cqc!65fP3liB zRE_BE3?!^veV4Lut!@N{HC~%XH`E~kss&+XdKv>xbkN>PhP5X1*p-?Z<(W{vWj6L& zO5&uMIj7!(*XIwq;spvTL$jivd=L+`Dnm&0*D7DhtZ@=|C7EvP^^F8qhzB$fq1)T2@1CA;Oze?l8c7Y zSsZajUn?m@c(8nk&x(|G4*8`n2O`FY9>H0s>wU&W+M$+`F7rib|J~cvc}aiVNpwR; zpPg`-SOdpVk8u2W(K%)gdj(53w|rnT zg!e-PUcFS~#i>}v^e@8^$%hpqU+&TDjK&U~uciqc5a!SghY-@hD-#>Kz)#T9MzeD* zfI&JDw?eg*Juu zBt@TrI@@OH)1ER7OP9K=>v`-FyT?DLnL(y5DA1>A8pn_a{lP7&wtQVno3+26Lq(k7 zp;vW2QM(1t?V&V^G%<PWTcBH z&b!+<(3n4Ejz&Zqk`y zg{8Z|q>nP5X!eN9t&Nq@*Q5Q`eemI?mqSdA$5D)6oz&4(m01@Q@GRfkb0r(H=I|bJ zsclwmYApL!U8>A(ieV6TJrDy z_1bgHh0}5K-w~PwFCdR&{egeKF{cs6C>%%kSbSgRa`! znr)uxmkkPF`+Ih|*L9cNx{h~TkqOoa-}CNwme6|FCLRRc#*Y06i{d0Q;n_4v+KsDp z>=W(w%w`wKrCKg_2n!{6jHZN<21$rA^gV2LOtcm~$8u5k zIx&VNaOY?fW;8Ahn$f+2r3gk5xwBm{)Ej|OOvO4#Fkg{< znBHT91Ab;xM0R6sdZ!PXV|2fLnK+s|l?q@ z$9ee^E#B~XdZ6urm{hUGXCKAX;u7$ahG5LSfYf&}>hhGARA6CQR|ljOhqPr=r!ME? z){#c+dFnZ4JNqSW;>g7}#%Vib54OKiq#7cp z<>8l*){u3WC5kqx&gLB4KEdcUQk-hbDGGIyW-{*tk>KMYNZIll__UvXY?s0>yI^kB-xWTb^S72 zcS?0*?Mkpm=j(T}Vh#%n2iF~nN!$S8S1IgK?ss$M7sF^X*OY->!>!@?Mp&Wi%V-XC z{%?^fAK|1;KzQET>>7Nm&TLCRUcXtVExKV^qb>FwcK`?3bp>CqxSgBmCp)a)7P}Bw2$Fpf%35C8%;AKz}LAN>V}GJcr)vFZWC$?yDutEhw?Z&n12Dmhxe^ zedW$UfvtgMM@Q=200kC^ut~E#OV_2D7;sBv0<1@U__OEWdq2-q@?alWXOzCf^`gm9BI2>JBWtSil@Z z>7_Q(qly`+sVMr{(a6Z-hI$e-P*}mk+2k^ocbaVb0B$R{L&#VXf62Tv{9I%MzCTEz zc~;@lWh}CiZBP}jCUq9(U*mqj!W&PfJM)sj_L4Mz7on#opNNh|1#J%u^J^sFgSk7n zaGpsmuDI!XEP25XC-V+0E8flf^|?Zds$s{DVsC;{M^Vji=19?F znS;Mi5?*VW@n?@Z@t^{qT)v|K<)is)wYO`vuU{Z>E1pR2Y%zx$5ySeglB9JUlQ?uN z*=$39qv>+GpBDw?kqbqVgjx60yyvD!`{A?-!TGihbjjI@jz0c?S6=O6C~@$}02OE4rIO7TJa zu7{-++=z#3tu9M!!Mv2ao3b);J4P*HU0B0bDK^=l@R-LhasU%GU2hQF%txZP!z_Ft zE>po5nG_wrI0QMY1zK~QWdu@hKCzuB75+Z5UH1*)6t8}4H$^5QsOz;p(JFcu)EcCbDwZFfON;e`I94FqW~_-K zJz15wDL&Se(XHZ-UP#csj7(e|&-E$deZ_q~Goq4?#xwAjcF<9W6NO_p=3gH`FIAyQ zRGc4Ej`h|{R(dLoA;LmEs@Ubvu_s}c77%GptAk~kkl#bpW=ie*?PqGjh`=2v$K7Gp zNQ2r~5F<3&M^QLqTd2khPoLNky0oR>`^OZ{M{u!Nn8mtb>V)XBLMf?@uyN&NPT~r$ zYaPX}?`P!a<6`*~#giJqlioDw@iOwq)h+>QXMjVz;ABA{V#6q^9YG7p*DOm<@Zw(N zK_1P63c*gR)X&VX-f4)D-R6`JWuU%9mS#*!i7Ki}+i7!Nejt%$Gi+6!n{P+rnW5 zs+ubv3qNSo=zWnD5H?lgI8Cf_lTZB&f3Dbfz2qx3vL`t&d_z~PztHdxvh5e+o%;pj zus6PlS<@y+hI&)@*6%6@k}h98?SB4pR0z#?6^3T zWzbcWvnZMq{)|0)&hh0!ku@Xg(#fx(aHY>6@q4xTUVf#obnyzM;gleX9WbJ!Mb+e< zZeWHF!P8N@nijf9H(>_iS;VBxH5rsb2l10k4 z6dc4CzG#-n(@ZF&EqkWqPE2<`YQu(^Lo@l>I$91Q71-cv*d-J1dD~2S#o4p1j9ZsU zE|Q*^0T8$H?QJTG4)zxx#7%_-p_yxCE%IxKKin&R0noxzNNG8Xx#D$!DCM@YFLAb4 z_goZ3@fPE-XRc(859=QTC(3#4JKpkDkX;`764s%$KgjUHTW*k3xY@RwyFD@l`1~Bl zog!|vMKUhPl-gW=R!~l=nk73lJ#1Pyl8st;gV+VG*aj=tm_`ish!|LCBca9iZlTaa z7UXz%|B>S2n4f|%JoIi~-*GMUY<#XMR6RLLf4m5Gu-0#|G}Q}4j3HPUvL+x@$nCb> zP?Nx_gIb(u#bKo<#~?QImR&(I%(8@+qLB3A) z*XQaMKiFA+CZ2X|w|alO+8{yZsrXLx4T_#5maK@;cV+R(9puYzNv$sD%AXS+?7IXv zN6h{KfSU6Iwk!$V>U_>IaJsU!oae4D%(l#NH0O7&?U9Qck(Z>%)Ugl=8y!)zaA>Qn z2SSr;WF>iBR?=IPawhx|nm%BdjeD5bXIoG8= z@q{Xvx#L_}o|P2-jXgTR-O5x*#>Z%e49h0Hy>UOyFDbI_gvytAO8NoV47+;lwPt-8D|n6Y3!O`OZksWp^la@!k=tPjDu^W$ z!V7jFPT|C2vMsnP$>dkfVZ<1&)=+63VQi-5L#o+KHfA$2ErwbWaAM94R{%<;b%EJy zG(BXS*Ri}Q`Vr{@^!_hHrg&8zgyMKpnSyXD8qH2k#9GSMkUkedW;5MzaFv!;Dkxnm z+$9bd=6|4h91_Bv$|^nxN`!M%-4}kQ4vm%j>U1QLI98)t5g{`c%X}`>k;|X*PpW1B z7o_AX5m$$Y!~9=y^}uU{;`crTswS!uHstKNo+c~Q<%lqw4V-A)s!!i1H!(OXJQJXv zUOE?gtaE~VqHVb?{loyvlo-n%UbKBVGc`Y6dQ2UR!q%7TMPkPrYP4p;TiDr{=hCB( zTTEY@Uh1pxxoOkYAf1m-b$b?tnH;59*XDG6h;mc@L%Ge{*+}ycpYLZYV(JV|u4AC9ZPNuMMaN za!y&u_-s#Z~=c>dZS8BX_#pun`Q5ayPhi_DUIOC5a+@ zNX7m_Nc08{ar(3V%a0?A(h9Egn$S@CF~CcvckS(E4&=DM@-TG%@Bw)Z=6!K|py=FT zjyV1i1r^r|IR%v<|4Br4%aBOC%%^H-*o{`goJOx0ZiZ2xA@0>>o^bq7YsyB44y6_# zcw?A`OK(Fc-!BQ#t;oiXvjlc15V087V0z;22>#B|DMwp~9W7vZlNd6F z*N(p6SqHDh(Ey?%wjpkG|k7blZqk2stFlhUY@*+I*tb^o?QJIH4oBgVv+n zwnjGovhIwOFfZQ6(-hPMsuz^M=4d&B7IE`R=u7fWNG=o_J znLER1!@yjT=Ru$3SUvm&?zk0?VEYDo6tb43f;;!VP6pgvl{Z|M{J4vBYUrY}99J)2 z&CjQJvk>0y_NUp&@tbSDD=hpi$hxIzdx2&XJ}LMS<1`L~kA$U3t^K|L9@|rgueUdq z+X3A`PLMcG@=H9iZ%Z*iH+Y0~;l#w;4$Oe^>jdcn|9p;2+s(|xGq~0W62Fst57IP# z36tbBuqcbXH9|ZrjVE*eVY4NY=(g(|dvgVGL8sVEjdVlGUJ`0PckB$(gj-hd{N8Cu zaU-r=dD-N;PpFwu+ISq&C(4}8!zsL#sX>TgT&rL^45Fmj8Q5RBDS{5dJwKExS2_%D z%S1E*on#opsPHCyBfqc0#Yz$QT!>2QmsgW>Aon8!D(Y;uN}!7Eg>D^@5i(5vyf+{4 zh@0^}Lgr<+wj2Az8x!e+8h+Jq3}VdwEw{`;uIO&|o>c~gD@^jihJ?zPM5eC8*PSZz zM&9Il_)eeNC&!NrBWu9@o;FC#@!LDDBS!LLK-FjvtHZY^9b)jGZr%MoZTpvZWh1p2WF%@`>ql1S@y(k zn&wkxL6}F;gpxAzya3xx>Ud=fvz*b}c>qCF53EuPw?)w(>6Nw}%j{^}}&umFX*idvf`E>bb!e1?3dtzp|+O z<;dy2-wh?kbrT_R13G&i^HL0lgGoLEnly>2;CX6S+-8=F3#)>S&2|G%ek5tAFX;!b zjrvGQ_b%#ycNVuq2)?8DIJ(;I>=EUOln}{qocGQtecIVXFfEShnvbSP>0z-D8O1y! zuV!4t4TT7?FF|rS>#EhR@vaCo;8a|W^0#Cf`f){4SwQ;;22!Jd^UaaA`8b)EBSYcc-$a{;~U6^&TTZ5MV9z>=-K>Li<~~? zs6+U0t=vz+QYVe>N3Xo#G?&0c;)8G1PWa276B!Y%Tt;sahD)|+gDP@cvpX8C6iK(p ziWF2zd9eUX?|EN-9m@50`sZ_T>G0wIS5nr4 z!d?j9g$AnRHuBhW(3`B?wbkJobtRR>#kNz6*Om5UXP3T$;GV(*p2Co$ znW5)_pi7KaC<@bJra2W3JA5iEYY}g$kQ>nfygT{SEXGT3A@Q`TBmA}&w-osB=3IT4 zNm6Gao>-%h#=(WZ(7bTRf<4&p@jTB8U+S(qv4)h~H{$tQ)9rO==(s&?(k4MtA6s)m zXgs1#fOeMM|IIO{&))K~-L3}%2W&-~=^BY{Gq5a}XM7B6kw`9PI0UE}x261QYXj^O zC!Mlz{*^RvRKaN3icONDMpcsnhQ6D@tG4H9cKZJczom?DAW(U zjc*_2vZe~ap`JyOAFjJ5CY+jCw84fg*qzIS7xPQ}wyHqZkxGoxP%lVqZ zyp$e~bq@ifW+^bhY$Z+wKT&@@QLk&0@ANWkW@qyjN-oGj(sCxO>CI66iuu# zzgm{uBQh6z7Zf)ZvtPt-~R!X1RxUEOUMW>5O)jjLgj5v>6f(APx z)%HhNg9zKu!xc`+o+){+C^F>t9Bt8ZlJ&&cn-Z2)4{|?oB>-47-WFYl60=(vOgIG) z^(hEYNj>`FPCb1_=CvS>TaC*2p$S#F_C-%IjVpid<*z9X!_=4aI#SJ~wUu*tB z6yatU-;(M&jZDqL^U~@Zi3FuUo=P=?Mpmq$w#DfV;F_9sGGBDL$Wt!Cz}E+cNwDE@dz-fM=MXJ z{TjqTI0ZVn2L0IQ)_;T2%FPwJ`-#L-q$)p~TNtMvw%2&`wEbeZSze4>==R~6kUvM1 z?8mZ9&l9SZX6$PpH3rV$Kiv@PN7IeqtC^;*{5`7ke3)Y=eMB=h6TakwvEr3onbj1W z<;)ozsLS(t2bBb-iYt5;<)jZZgDq__(58EsIMB2h84icX%suUzE9RIeMmKM1lSy*c zp3>mWcUyLZrauF3+Dr9zX`h)vJ$QSALR=)@e|V1FvjMlqL%+cv%xPSyUi0)X#2Y3Y6YLI0y{8Ix zo5R;I-tg@Hd2)E8PPXe9C5~kQq@yxwdk6?eb;Kh!y@MyYLY}h%zPc8kq z2~D>!FZ*S$w0gxdCgEZ#)qImUSq@G*s?ko?x-cdQ+6spp=QNm!p;jm=Csi9*DI`d% z5f&v1xKIQyK`x|Ss~ROeF>th_74Q5Vn!Lf#I1oc5ZypgW?C}Vy-@OJ|FK_JR56A05 zAhxMCc?9WHWm+CORHGS(atgI~;E!t<`thIxLuW5unSArc+-J7U7yiolRyWA&_}tzE z7jnc8Ze|PTkaGJ!?{JkftX{OFbu*OOaqHSEV{0znrU+iA2=mjiALPyBE#KD$xr z;+Gieq;8$hE6F`E=wc`>lg7$>ib59>MFFpy`By$t z-9s=qcZnTY*!0*FcI{M=e0qH1D*ZP;G+{KAF9X2kd2*XOM`#YxJo}qn(O%0cxK=Xn zBeF4YajN7c1}xM!PMJ4s_gr1NyCjo$&^rxx4IS}c1-mgs=c&P|&Bls~(jiRUAMVN& zcI-LdX`_Rc$GE+4weIGO`yCjHNXO@$!rti!p=?D5fuSTEvO^QPhV6c=w^x7v-=;*4 zY~GMt{+M2hh!m-q+ZXglGB@&SDQM}IZ0)talzEgMVou3UM$5bMU=-<(ZiM?hy5RKX zMYS+ZjklL+P3z^Zb7wD=hU{b?@79d4%)hSUC}EG6a%sHwYKB7Md&6J7SM5!=41{AS zF!OY%))(Ios6D+lLg7}2$L@inH$C+=Sa|@Yld=|5jU_g65`FgBxcil69<#g z1FkYPT`yC4ihr>Fp>%j20Q|2k8&-Svk_#d(t6cpdABB5qB&ajb(~F3o9|mK<-koJP zGXJSNE^*4oEZ>I{?LP2X35lDX%x8^6Cj3QAZgoZ6%-yAqr`gfMc5f}k%(dvXN1SM_ zJbyMJ;4qt2s7`fd#;AFoeIh$eoXSF8b5ox&GYCk@u`Yl=;eoaY)JTl%b{hYZf|0>2 zkI0AfA6LVuZK&-*J>I7ZYFZ(I|5mBnQYlZxPPP~;5u1(gFdL)a<%t;z?uf`F6 z-=nlF>R#yRihL`?T#JIKD7f&wvZ(1aY_nLZ&q*>VPP`C56!QE%z83@$jUviL9EHB> z(?wVa#E|~ws|r0cdykQn?P1>5*Cc1zRK7Zr2Hi4nu4lhQOqb$=Ta<37m?b9%vq@lT z81jn_64z%A))a&qiajP$dL+GPihvo}^@O&U`ele=>WwBQwM=dG##lQoswF&~GFOnz z*7fOK-zWUvyDnoT$5T{C?<-pQiMW!ElM!EyZ9}-Kp4q;RoS^tZ{;_r)rMzUY#&=Ou zJz@}2_!{|yJ6pYYzWidfp_#+Fr2#g7R?7YVvG<-qQMO%|C^;v|Dp8_jP>`sApyVJ~ zKtWJ~pyZ%L0ZB>{BnzS-NRXg_pc0fUL4tyS&}2}uNQSeo_IYQ%Z%(~)<~w!j{Fs`m zr=BY8ySuNx?fZ>7W`!~6Waiz&o7i9&v9?~ML~eSC0^=o?ZSN4eteRH z#VNZgk%5>W-}7Vk+tj8C_kw56)E~SxGM#TxSd)pcI0~~Qx^-I3oF!m2FSy3y;(YA( zsSQB7Hn+7a{t$KIY{%DpNx7M4h{2iN1=L{l4X%FMLQFTb9}F7UeQOYS>s%W%sl}jV zd;Z{>N&0DNTy&!@s63H^%exAs(<2va3*J}!FQtI-R6TVIR_%Y23LeEYScHEW@TyaO6k zt@I!6^tb7)0bi1A2RR!bVI2{D$@1om=mNnNW3%fFC%rOswcFpi7tC|$KRTT=abAB` zKr)_;Ag9nmrSn2$lw>&|L&=vzHDB=-jL1DHVT*@4NvZzz#Pos;KyHw_3!#7R0fmZ* zaH2VDa$VUstpdJpM%+1PlL*E{e{+?*x%PppVcic1EjfagBa%VO$4cDqPa%i+kq<}6 zh)I{Q&;Um~LgmWMO;5r`OF;ur(aMPeuN2kfvFPtNM56J+LdsYE>UOK0#c)Ji)E;dG z$oK?45d}@AEBgbDB$qgYRe3p#(zv|((IjX(*TmjJGRNKb= zh*z7|QrqB)^~2A_2WK)A^99eUXkU~pPjs?<=0dYD3!Wcx(^`ud$*p(_p5h&mu#lHr zGo(-@Sa^VHK0o!Opq+|ClHguraGEBK=R1C=0opa)=mk5<&fNMa028?r70VixN_R}3 zg3~y0ge*N{5sPMDREU+_nzK8NG<&9Pv;S%n(=EwXsBLmAe9M_hnv(4EnOflgUM%kn zikk8VTayn(^FL>#3`%(YGSy!<&NN z$gvt-|2wRy<^p$XtY$1yT}E!bc?{Dqu#pAtkCE{}QlQ_6?b*85{#hMJ*FjJkEpl1S ze{@uzPZ&~@S9(s)-X~f5AD`()09*jdY{$Z#ur|UfN1)>*#oF|z(!G4yRpx&PlSHPk zpb8LWcywmAf2b4~#T6%}C9iXqO0Bl>WwnCx@Em*bNx7U)?jP;$$ZT=&MmSwn%rlTNz?IvblA8Z9KDbelcX8hwrvE40dkz9tAK4F3x19^}@`f+wcr zUl~`76_)#bBk$i;?L_*;32d~z!+;i(Lpk6QZRwh+mU z4B@$}fo8~E?QSXw6I2CF-_~2!xo}U_vYqghFgTjS=9NxnUa5br?8;SeHot&WmeKPz zfZyXF)9$Db#?OW7Kf}pKVTi^76D1aA)YL}gRW35(vt+l>KPu|OH_?YhMxxK<@Psip z0A0vI=Y*$1D;cDzrzL~k{8_RO5MN*q^fElBC$kH7!)CF&2{*Q|^#f{0|GBUgmW2Jy z<$y-;ALm4RE3MMO&1A&LXB-~&RU}60@U0~C6s0WCXix&z99jOC-gSum;jz$M_-}qV zkYFyf;=yPobh7C&**CwHpnehAF~Y^+s?E0j?!!ImF#If{GuZod03%RyVK;#P&6a|H z6CN~+V>seR8#S;;{SbUv;=?%P@@bo)$ce$B(j=y4`?bgDvHU|JfiWyZO-LTWCK7lR zcHNJGPNRV&YQfJ!%WUzcIaFske}GK&V`wWd_8Pj*Gz0?T%4Kgxfy-h3L;g72+#U4& zf$Zgk*n<#J^ywMcunpG}q@PHMk&Z3EhiCB~sf59Pqa4Z%^4)Pncr@xQF|2~9ENlT9 zjt=>5j|So!l}HpGV>&bCOqyfaMMH=v$(p`;B}0>d@46Fw`aI$h?EAMeVjn6!6c_Xj zeXw#kQGC#nE~ekR$B0~}=9J-aKa3)UnlddaUaw~M{Q@?_pT`z%Z4>VOz8c^r@}t2C zNXCkm@O1UQjdq||#}?_BQh1+D*MXUR1doPFOy-ErLpkt{&X+jJa+>V;DeMh(Bt5+g zCS7jsh-Ggs|{j62M%(UKlxM4I2px3QAikH zO-~D}`fr5(h;lJIjotHLdW8^pMHxjl2FH(M)v*6@|44~K@9ag&8{h9d*g&Gi7vYXA zl$i|iqM$1REvYBkk6QGk?bk%C2;t&O=;C(S2LmV@3r3TZpO*d+cIq?0ANeON7_sI8 zAlHWB2+q6)ovBvbTi9-)CS<9?!k35L8DArd*Ge`Ue?;wwhXLOCWmFl7hBE;l6Jggk zB@S`)J91O>HHqlraw;27xL7S4Rhps*nryLaKo$OYNs_FJ#S@W`7BJUMllWPfNdvIU z%oT0!Es+KA!D<}N@W=Dw7E|PjcL&`fw!2Br*x~rV$D9~MTBZT}8z!(bTdFuMQh^l& z>&+)Hs_e6nCgsNl*a~7l2W=ZEB%9dL{DIHxeuFwbjM!@ zKzWw~sc}zFolAVV=<~Th(}P!tb`4-{AZvY@zp}EHp31Q!-3~T$wR12N=a_xxq$s50{FKh zdOm;6l^|pZk)2bK0+nu#4KzhQkPqRYvGJq!`UIB&De?cdbNt7M@89n)YS{%a73~+; zTHOQ4h<(S!unX-3x-mhG=dm}27~OUyzH(S7{}|I*wi1Dz7pc}0c{5O!6W^v@YAH356t zjt;>Bs`KtFU9F6Pds7QTwyjzoa)aeF1y3q2m80bgNgG`cD2E#BYt!k{M zo_dnds1!_&w%Kya!y-`;& z00V9V8ZL*~e#3W|2ZT1Rz3DzJeG2K7JGor~zvR+otM>4!+nu(95M z`r~;N_B~AhKfm#U*EjGTQwt1Iu1>1$ww02DfP4f-%~X-Qy=z-MvB4xSwi z{)Olem`DWwMuY$H!KPE4Ly$lOl;V+9gZ$QbNI3|)+U5=!-Q)`kxsVg)vx2;PO07R0 zGgHPm{ntKNlK?qnngL0+qJQe;o1{jiq@FIYkNjTgY;HUc!Es~DXP81q(E${a*~JSh z!xmZ0XnCAE4(CuDGWDVTp;W|1Y8!;}W1IcX9OqG>2@6$xmN;tf+9w5ZX42L&pnYq| z;|i$Ky!*SGxBJb&Ip=SX_n#ucZ)h2NZkFFs7QT#wBU!DkqGad_Uw;zusCihM91|2- z>FmLScU?vfX!rBORkvBIPIGFbAW{B)J8e&};Ien!ZsrTiU!x%8TNZ}Yh($U913Q{J z1J`)1^3Q^gRD@PY2n4AgG^;>UqB#%Qd|0G`WpztlDztS5p7ocB)(WqDdUgwhvG3R( zW3d1`0n0Q{=#i7^god-_UgY~$<`5&lrj|Sd%|g-I?f|vdo(6XaRi`vie6G(mg8<&9 z4@t-6Dh(sSu~rXc9g;Nz!lvl!k;{VSnOh^(gQtADXJPpB*t3ywKQw!nGL!eT9;#rj%w8A&}3c|+M`hJ1tm`JBO zUnYI}42Yn5JAf_5=HO}MzNgs-?XZKV=L8Ek!Bg}^-_vg4P7u>&O(h~W`r;jJ#8{Qg!RQ{J-`;}3r1WqkantJN^|>-;RBlZ8(bh97m$^-S-I zCRtd>{pb8-m*`(J$dFh3xZO_5_11^`%TFlRTqUUa*7r7FwvJBN zvgyn;xGR^@ZTxxy{f?V=KSkcj$hYer&ImQ%SFcVHTN!cho(>>=Ya$7n?a#-S^2m@k zh>%6K-dCvUnt>zqF+(o$^e zT8Fis9w&JMsd4PaM(}}R9ojB)3JFhiDAnZzy0T@63iyFZ<{B_Kt9NpK=;MAnT5=}z z+72U2!zlr9#t>WsiVf0SRb|h3mZ0`@SxN%48?ihsP*`*Vlnf$-{!TjCxD%$z4}*Rl z^>162svG`O+q5hd2y-v<$C$Hx$KZ0w=-Bq?%qf|G)W)A%dAUj-J_}0MG;PBbc6in=4Pj zCJ^O{92(NC%C$omu$!?ro_?d!`>NDMY>NFHnJqluAo+P7g-`=LJz92QcQr-c+In_3 z_8v#c__I=RIyigpqqEm#wqhPG^F(K;rMKwui?CVJ!e)7?SHFlCovwxviWR`4Y%_N( z$Q3YTi7w!V<2&hjTR9vv<%q1$cqi2v*$16~e>eN(S(yq)&Og06rdSj=Uj$wmnEo&B z)99;F_DzOgZ0icagZiWE5Iooh!#@fAmKa9(1WE(S2Y)(&%b;Q}DrsDfEj5==IrqB|Qw8j;6oXe7h%UEH zz=}`c?SM3)6%YNcx$Bjv$2A%SLuKEFz&$V+?z2nWYc^|txDjgEHSmgI@@=zRaMC7c zM=q_lCBSgQe zr^AU0E@ngz>DsG`PPkYd_2vH4Q3<9R@JhbOSh>av7d^(aH_-3mfT14!_=Tnv*JChpx#WJ#lT4DOox&m&*4@?9?xqt0{tv61Y*fN(`3^a!k8RJ6fRQ&HkV zH~RSk!k>|=R;V{kA*>mYiAHHoqoSZ03)qDA+QM(bGeZ}XzyB-+7u%wASLl!IFuH5V z1SjDuR}nRKfhEH$3v0rK9)R*-Y|zxAK#!n7$L{E6KgS+#XoRt3!^q8q4&Rgk!P(+-Zoq{ z1!fUmt_ZgV@81&=qhO1-5VH(o`Q^>WZmQ%RRk-uo58Cv~L1M21QXrPp88F$72kGcm zMsp`lur+bEO#_dyOUObpQ`R#-bpJ_J__*=a^ihegET|r{%}2Mq-|lk{}CT*$ZuYoY>O6_a{eXbYH`2#$*F4tB{uiXvOD@V=@-4Ki+?P8k}?5WY|W&1Y0Cu zXbOjac4js8bTAxgMgOQ|kxWG4kuAwQeOvVM>sH-o_%#QsEBC29YCU9wSYp;T5u2eG zDcVA>d^6PGe)Y~}yGpl@u}eB8YCgjY3lw_ywDF#1NM#ctgZSQQfzzLO*8B4FkE9cM zHoP@djMNU1;-vh}%v4Y0P%j`7B;Fh3YoVv~IajHsI{RK~)&=5U6A8XZqDJ!t{$ZJe zA%&ZRi*qv}1E0k)i%C}u7*)DBtXM{p%a%@oyI~)%NaTx&1kI2?OzWc;cB<=_y?neE80WE?KY5Jp9pY zw|4m9_Im2O-@QuDkH?xs20@I#GK3m=W$^_n>wz=XVG#DCj{)b3DM_goIQy=ERO{ryuO{NFuU&Q^ z1sTirg`QX8n<3o>IxK$+;Va7cwEQoxDpwT*RO83EEQ3K4@P4Nn$Ie} zF6xEoQam;v7OQ4r5~B2JBBUVW8ioGxBgvoS5EbNDW+r<&Q4UV~QSoakPRAlns6DHY zy4E-Tl+FS4KdJ^#`>0(!w%0_;*IHDlWs&AbU7kLnk#V~)j= z!=6#A8M3Tl5i}m|hAgA1xj{P^J|V2G@bSs5|NeZkT}nYaZMC*@*=xk4bJ9D#Zn)ZR z-CItfZdeJUXtK0c%X&TtEr^!)l!30n-BXADV>73G=a=E-Ae3%2zrVjc%%T~+`@W#x z6s$1c&*-wXoq5b`Ld_-`i=)jjpYO-h2z?vV=^?>GX`q2z`|H~LWVTZ%D!X#n5Zud) zGW3gye-n=ht z3=9OD{D6Z%jHdJi>6ih@jBgF#ZMizUX+~{Kw#B{As3a(f0^zTdPNEPn8l!+wL$@Lm zK1&^OYues_tch3jB1QVt<B06ml7GHT$$7T}kXe#pckH=hAd`qoC$F)XsPzMy>hCV&+7#wrPV{9Se#kL zx{-kC4NRrlJ&Xr`L7eB7I_mkY;bQXsxnhTmd* zCk^?Ax1#vg?5Arb`tgwvJ#&|tnDRlk^8nuh@H7d(Ef=uTq6{`f`3kL-2vi%uMTSiO z;!B<>N55Y9wfSa%22R0Fm54l2`y<^N+Fxo?&JUJ713|KjNT6P3B7(~e8r47ut&dd> zSieY+vMZ8$8Hp1DiH=PM6G~?bYjlw?xquaa#cKYR(p=KpwR&Egbs~XKY$0-Fx*oM^Vdo+3) zdM!;Q)S7J{Uvukq!|&^NUoLk>;WwHk9q+pQ|n?D8-s~I z1!_%6$UFn65E^M^SEd}?5(bn(<2C5$GNjGV{eVMK4sMt;{haUCK|hGZm`LbN|0Q(b z%|5>vkm7jR=Aq<>BTgdWx;6kQ9@Wf&b(b4)7f|!}_N>w&Y9A=+0-nQbKfrHAs2q{^ z;^K?w;h>%s0QhSw5t=07KBG0?o2#j_hDJIK~LnHr4LIJ1*gg={p-KX;i z5W*oQs#4mC6q^`_IFW_=tb^Ztkpia#gk$6X7gH)D-s~Ai53Qu9%y_69{KY7S6(l2? zxJBhUkpOd7xVwl&b?L9Q95ThXfM93Hbpx!#lEgimLSHT)nF@b;9$7QyKJ@B{3n_x|7 z`e);39W0X>73C^)6V9kHc`FjqCtp-etL9$XLZtZKd9sLi^UMI@(&&x@ zrO$PY%dcv6^g7_t@LxVPo&d%A!4-DPHe<8}r3Aen*2$0-Zz{GLKv~{}aR5U*EMu4T9LzLn1?Ec|R5pxDKRbemjVS(m@h#8j@6sFn2C88=XNK87 z9PO#h&sL5Cy-jqh@els?qKJp zg#@CiwVn?Wq*|-D#uhf7r+~uG^Xhd|Psj;tIIWf|1z4)RCuR$H=($)TO4c3TIi}SZH#We*Zd=hQ{$UcDFco*BbJloSj##U8gRT+@xT{^4I$1I@6Rnw1J$E-G=qM$ zYDa=0y8R&s$BIIVupNIUl37ywL~4?2EJ)?@0|MnQoz-LD+L%c(h}dR{Gh`SsL9pv`IP9Ur-+1XSPi_;qmxGG^}TH=mNHPG*Dfr zY8cSnm-K;i++BzD;sa*PgjLQ-7S!S};qkR@6KXK`pSk~Wma!|#i|Qe6+H3esiw{AF z2OX>1&r@OR={3|(yBqI`<%ms?!b1tgS%>JRCUpkLZI7UMZ*k$_ zF^2e;JK>Hn0g8R0i%CTlCpg*lwSOefW0!}gTUs!a5$Kda{888WCq5ITc3rKDd$VJ3 z&|Zh)gV$Z)@}(_@4)qRx-lx-%Rw{k@bg-u`F!1d^C+cIEFN57)zyYmYf8#XND`WqM z>zY*DW}<}&^B9zM{zOn`aP0m_nur`BM*nxzZrDMh6ZyDWcRH~~CkKH8p(zvZ_x{{rtto6D3O zRKdSYKMX)4g><|CEZawmnd{qe$&mxa2#7?L0|cQlI2Mu{Oie5ubfMlc`pWw|W`5m;c_ zH%~bl-zFoLJa4%ZnWijV?}#6P4{{hx(pmwqjh5>6y) zxDsn1aMxN8ZJ4G$tOyq*Bes?p;R|j@SgUWI5VkatfJy?icY;0PENGR*y<3&*61O23 zyvPS-;`%Mt&l$s^^S>*fOGyH1eZ1?Ttfm18asC{5E{Hth)AeesM}!to%!~)NZwtF^ zRWl24d+~CqvcUf#oi%0;1^bq15D;}hbo?B6pCXn9q{LVKHxY0GcEM zY>$lAYd|nzn*l5Ol631o8N%=j$w9}OZAd1g=|I|2W zF@7e+?+~hZfJ#gEbjg{0ZbM&}`^0X~d1`fV`4$pbqdUum^!J#UerH)V;yxy6c%ky4 z2L#H;Vih@OTh++vG#LA@g5%V5GUP*9t^EZCnXiaau3m;PeHzgrvf0U{6)vP9c~7Jq zXnG_*i}^VLaf+}kv?NbKfOs>mi>(BjKvvu=v`pRFct#iEuJuY#{?E!LgSEm4aHsgE zT!bQHSqs5Sj&NH+;n^$i4$z9szr~;wd;2Vj6d7;$eahp!AS>o}BWk>k<7&`3f)vFa zsG48z$yU0TL_xyKGSzX@6~v|=qrT)@RUjVVyXJpQ75B67{_^3$t1KtjhI+w=wd$Nr z^MefObNco+|M2qoIIIZqiPl44QAaUQ-SZ`PUIv<|gmq)6avN|&Q&D;Slx63Agr_5x z_ybSrbR-3=hR$z9aQ*m~;QIHW_O>$&8bUKg(9j>W;oYRrA}@wXFGKmWH#hp-YV&b7 zSQs6kWB8bksp{0VPb4xx*CNadQfp(NXP*TO2q*+nIb7-iP-59nnP74e1FD2^WL4_fvgpJO7u3WO=koqCp@L@7 z34#06-S!FrOgip3aY%EOSwFxGYTesj&m3a;?0CDqC$UkS&5$bhn7Vz& zRvOw+UNf}+@jI%Ag#>9wO-6+{{XS!k<=eq0eXEB}hY$7rxRdz7F&%#GX00YByYii{ z6nxZgR0}#dYfFyZCJ{k~UqBwqAAAFS>;GH@Hj$2KPzqv>{rthsfzrESZ`1N9fSi|b zwi~E^aTnm#-ocwiP8MNj4C;)1QP zkfF4n<_I0UF-}ncmY>@7sXFv@2|44`bw}dx%q)Fm7&4`RL1#Ybc|KIXJ#lQwARpNToDT6>b@=RvA zJueA_h3H*Oiw!~NnA8uS$^RETJw-fiRHQZ7RD7}yZASRv`e^ddpz;s_JsXzLC=2^n zHkE9=HVVWQ;7lo4Rz_e9m^dMcLvD*V+FJj5#Q&vJx_n8^1obVT6l#A^V0bms8ddNR=|9Hj;uI-Z*rQ$&=v6z z313AY&TbfQzA#+;&sD&Lg;~_ouMju82XwW6(jf@hU1)H_!m*(&6~ICHAv(5n@Yf|& zDPO3Kqr^_Y1bBs?)Wn&N&rI3}q{yZ~1TG2by`9ht0BuC<+68&y-nziUsKnG6<+J<0 z4Y1u9K=V(ACihdF+Sa4$*?BOwe)==I*rg!}mDlVW`My{Yq6nn#z(|R#V=t+UKMiL~ zfOAM46e6C(A$#(r?_wcX*L?B=ZO1i`dqmsN9zqdhy zkKPe}V3kyj0J5SJF$l4?;H4XBSY&ju2bCn+rg>9* zfqn(YEGk)Ek$->+grvb>?AMMCyungyH&F9`{`{-9fi_U~mk`$f)_t}ePFS>6KOOwO z#A_t&1BXp6C>!7zC(%+N19)F>uszALH%p8BO^0(_^oEyNx*z`!eJ1~QVU_wwTyLkJ z?|Tu;0vY{)jCy7w+>HMC5Mt`b+v~Hyi;vKB0s4O21<%Tp*qyOB5a!ZCUF?uDY#vUi z@Yxw)R|tX7KYK^W8*J_QpKaxO;?)iYV$Obm0L9vAoONIi65|!*6$M)!Q zz-%v)(7pFgZ5K}6R-jUe0vV;mim(ytHuK4wfJSwItSC3~Pe-&_)c89DCi5fPt4FC2 za}OL!&bUF>OdG1AcLA6kA#&Md74SNc`MhCzjHrsu;#|wx~ac54o5?HXX zNpP$H1mr`}#+@Cq^~5W8*Sy-rdO$$N`TObHsn;L7&gu{EJc%NDLiMZG-|q@|(j2_? zjQjEG(Ew%E!pLCmmtdb|B%kfk{4VP%@wWR~{^XHmFm3gmAK+Bi$w=}A3&O403}Cod z0hYNt|JBrnQdgC{ZV!rjJ-RoKFX#<6>1IfOF;M!bdvh8qf(E$6PfBL7`X;ku(cgma z3br5mL1Zh>z_wT3Z}_OYz^KspN!sPLzVG)3Y(RTGAT#;0<4F^uF2WChE>uqaxO%Y0 zbgpaRUN@B2dUZci!W8qt6JXvM<7B{}q?5q*5~^_+5g0Ph>?;^4G`B-!(a#n9w|cSq zq!YVKAs>24Y>`Hg1K@r4bGm-i!qaTzL*^@Rm)!d z6Rf)aBdaUL+m+d>MNy7u_Q((aO-pM0Jt^h`aD1(vg!)u^M;+7zYo#}YF@F|o zKD`*Y4Ke!)kez1NFw#Vm=CAEBYoo9|ELHDU;NI=GG*R_|Krdz!Qb`~Fz_-(n-F-bO zL&F;m?Vk8HzcJS~eET~8S=ZWT5f#6IKcx@idv$m>AGP!0oyz_USmq~Eo`{PzRwQ4~ zo5=V8M{l)f28pe+eGhSeN@>j2MVi;F?ypwuKZOj2`4PRq`hpe~F?B!`jfd}>WdTd= zKMp(f#@A;~So#81$@5$m@5ACS7b{U~FtKX*Y4vRL`%O`5K>{S7e7J(>Wki+Yb8J+O zUM)?dAf=DtuX>f|Z?Ok%H>q^5sMJSRVT0zHtxn@}YdQ1Xo-5Gkyclk;O`L!6o3HJW zRk(L0E2f~mi$A5wU|my$daXb`H=}wy`&lHtT6Rpih zLUu%L9pbUwLe74}OJeC)>q=?jA4SN)sY6LZQ1{WowFifq8XJQ+k`A5{d{X5TsOx;D zd;%^wiO4I{tgQ?1W8)Mf3Famh$Id1kbHq$4zG9jU90%tQH>#()a*L*+F60ZYuM)pJhn@%JAq_$6KD>>QCJXkoP;5U%;-9LF~S)mAFcKFR)-!{)-CUVBM|Z=Jfi%-5+l37|7{5r zvE=!vAD;?|4TVfkcYIh;_1L*5UGe_(BOJjABy;r%^?wBL_8!kgm^8gT9hPq!`>h&6eI4AbgOY-#TyiPz&&dCrYIbWfBFzkScVPFakaU2{2>syu!Usp z(YZYgH2~U7WlB!xlXRs^ktDPYMO2{~o4$c6UU(Z)_R1e(MTLQkAglRFNTZbQ=evT% zitN+IUgC4Np{$^9pdphJLOJ;H%ZiTNBE8lU3(v>-iX9mmOZ9lVaMq5S$^_qoa03V| zPhz6+mg)l!l&XU!?FmTuYI^IP&CM1%lst^WgNyg_3O$BWPW2C6k_*-A$-JA|8})#G?| zTBnZu#(EPtef)g9fxy79^c`Tmb6^Si`uUxF=?SKr*Tb|=nBn!~I+LW^mwSCNjE|q- zBZZcpyr`(jPlo7$#7O}lmH6M=YqS{#Y+jXXbH^#*ttdsgR!O^04RO(qT`Q695#(XE z3b0!md7Go-p}P2;_?hDe%R&a?uce?2HIVwJp2EjdUPyLs$(Weq01nBd5GvVLp3bTX zD`;kM1LULDBjrnM9Z>u~r*6*o7d+bA?hbs6O3wKV#QD^pSuu2Zem!Tl8xdg=83buw zJGE~#g{5us4I^_bK`M`)D~9x~kso8G-$2{B4YZfgg5i!a|Da(spm#`Q;kv@^wZ{?chQPJA1gU>>40V9a6NW^K7+|_qA}q9WC%u>__zsVl z&x+MiIjF z6b9Du`*q2nEoqFR-HvP^{!0T?ADXJir>0<>t+d7?y>S;+Z{I>;Xm3l}KoxOMfJUv! ztCPVG)bY(e;xirt4}{)MB{ZBr7!T|Z@-Jw_-Q#%eJp46@nwN$@N4a1_@hCK^sjUI^ zFlb0DB7E`tn?gsR6B{y!l4CJMUKDk<^{jtFPj?)SZSa^SLdz0MZ71+{hs8%Rvj}wR zUZ|wcMsxh?*#b&yB6x$>1iNn?QLNY6L*7IEujAbnok+yp+3+#UpTga(rOBx7L&H*y z()leR=Cgj)$QLr;H-Iop#xkKMcPLn84Vxbv<$}QE5u85XbZ;Mb>7uY}$_Hd}Y}uHI zLu5?r5cD4t!;>h08d^Xn$8jeV-&m!-;FQxd?M&H$0b+->0sK|a$ITG@$n+^g#{K2l zo~S!waf)w9$FGDKo!u(2Y3hbx>SW#F{<2`eWguN%Y{x_B7snBZb3b|G^R|PTXw zKfst3f^c<1b0F%YsOBD6@A-K~|Al9#J#`lG8P z-One!AaOmLG0=pRI^O|4O<8_zdKn5af{r3h@A0j2Z=b}aOZeP!^oOXEn_ek}Bt`(R zKQcCf>W4`vFfY~ghDp-~@r$KcEKiXCG%l!Zi=0#E_yPmuuDNR}gUwpxaXlA~-ENH# z*Vf2pJWJ(4GuFq1Yd5S(yypJB5dYhgC^C^-5Q+zk01&(sQ=m9LubC0(2X}X=`bzGT z5`mRioAV~8eRh<`TYk33WNi8W8ER=NSjS{c%DR9vIcB1yWB-`}cDa1Unp%1fW#yZ0h5(n9{%bHeiXy;!9RA|NF1Yz1$|EKtv z0}wb4_|4OrlqQ`8^uC?e%o_3k3VSvq*d1tzF=?P4_m$-HJMw zGHs`l9X29%M&Klr&wTyp(V4NB_wLz62;r3|7;=e~y*g3`!uSKCnw_s1jl2alwR3iS z-zwn&=s!mNh9vIy%klv1F@wjz(L+HUg-ONi(0q);!Fyxs8g%0dKw@39IF;h(1Ay&R zZq8R|EaIk9b}dN^!s$!%wjc8QNN)F*UyIz%vBguTdek6otmm zsbJ$#eN=BHHE2i;@`UKQ=wQuo3E>QQ1a1(jR*zD#%1WQQSQ!ZEK{Odt&bL}~ePp>p z@|oCrx*lj?%QsBstv*20^k`IvTwk3yl!um(&(rpadM&=!#hS??w>)vRL>si?WkVVJ z&tI*NdPz*%1l}1p(w#G6NsE5qQ2##iSw=ig@iOUPR7n2LBwNVQgq<}}z>ysc6LMl* zo0Pufr^KPy{E{l{auc=Wg@)EtG=i>}o4;-c?wb2e9DW)+Wp8-L+?C?+n(2PjK$~nN zZ>3hIJa@WNd1Q1;?MG1dVo8@`DFZF&Xq^MsWn$ALdklzlJ-%7;wpoGLW}|}eUEsI^ z;o14|SW4d`dguC2T`k=_W-j^Ah}=~Fp)A2iu=e9MjXy$RsuYy;g+$CbdZ4SJ=cSS0 zp=BPl*)Or;p6$K2%-8U{VbRO6c@=E!$=N2PNVy-Qx>@B-)4$n0RqzVMBeIAiLOIF= zP;sq)xwBb!I9f5ZdMEd-nS^6yYah?MCujA{B@PX=*L`*_jd$niW9pkYi+5C4VxI|F zPW+n3uY1vvsjzWme4?}+cbL%-XQlrzSTkBaC6b-O>M4HIt;gj9)L9@s6&{{Mg|Tuj z0HqzltC=cyQ}pSJ@Qts`eGJgKE94K0LVF}C1a^lO13Ik(UlBNe1rxHk<23Lv48#q~ zdM@TyD-|{ZC+33`pM7s*Ab!}`tc5*aeZYYvt}Yr?={85IzdIKC%0A_}eQmG#`|V}4 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%0DIM1PmDf9P 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�~_UpNza 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 literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/sequence_diagram.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-microservice-transaction-sample/images/sequence_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0317b5f3abfc1eff92e3268f33517cf9da5948ac GIT binary patch literal 35855 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 A+yDRo literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/README.mdx b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/README.mdx new file mode 100644 index 00000000..ab59aad2 --- /dev/null +++ b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/README.mdx @@ -0,0 +1,334 @@ +--- +tags: + - Enterprise Premium +--- + +# マルチストレージトランザクションを備えた Spring Data JDBC for ScalarDB のサンプルアプリケーション + +import WarningLicenseKeyContact from '/src/components/ja-jp/_warning-license-key-contact.mdx'; +import TranslationBanner from '/src/components/_translation-ja-jp.mdx'; + + + +このチュートリアルでは、マルチストレージトランザクションを備えた Spring Data JDBC for ScalarDB を使用してサンプル Spring Boot アプリケーションを作成する方法について説明します。 + +## このサンプルアプリケーションの前提条件 + +- [Eclipse Temurin](https://adoptium.net/temurin/releases/) の OpenJDK LTS バージョン (8、11、17、または 21) +- [Docker](https://www.docker.com/get-started/) 20.10 以降 ([Docker Compose](https://docs.docker.com/compose/install/) V2 以降) + +:::note + +このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、[要件](../../requirements.mdx)を参照してください。 + +::: + + + +## サンプルアプリケーション + +### 概要 + +このチュートリアルでは、ScalarDB の [マルチストレージトランザクション](../../multi-storage-transactions.mdx)機能を使用して、アイテムを注文し、信用枠で支払いを行うことができるサンプル電子商取引アプリケーションを作成するプロセスについて説明します。 + +:::note + +このチュートリアルでは、マルチストレージトランザクションで Spring Data JDBC for ScalarDB を使用する方法を説明することに重点を置いているため、サンプルアプリケーションではアプリケーション固有のエラー処理、認証処理などは省略されています。 + +詳細については、[Spring Data JDBC for ScalarDB ガイド](../../scalardb-sql/spring-data-guide.mdx)を参照してください。 + +::: + +![概要](images/overview.png) + +アプリケーションは、ScalarDB Cluster を介してデータベースにアクセスします。 + +### スキーマ + +[スキーマ](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-multi-storage-transaction-sample/schema.sql)は次のとおりです。 + +```sql +CREATE COORDINATOR TABLES IF NOT EXIST; + +CREATE NAMESPACE IF NOT EXISTS customer; + +CREATE TABLE IF NOT EXISTS customer.customers ( + customer_id INT PRIMARY KEY, + name TEXT, + credit_limit INT, + credit_total INT +); + +CREATE NAMESPACE IF NOT EXISTS "order"; + +CREATE TABLE IF NOT EXISTS "order".orders ( + customer_id INT, + timestamp BIGINT, + order_id TEXT, + PRIMARY KEY (customer_id, timestamp) +); + +CREATE INDEX IF NOT EXISTS ON "order".orders (order_id); + +CREATE TABLE IF NOT EXISTS "order".statements ( + order_id TEXT, + item_id INT, + count INT, + PRIMARY KEY (order_id, item_id) +); + +CREATE TABLE IF NOT EXISTS "order".items ( + item_id INT PRIMARY KEY, + name TEXT, + price INT +); +``` + +すべてのテーブルは、`customer` および `order` 名前空間に作成されます。 + +- `customer.customers`: 顧客の情報を管理するテーブル + - `credit_limit`: 貸し手が各顧客にクレジットカードの使用を許可する最大金額 + - `credit_total`: 各顧客がクレジットカードを使用してすでに使用した金額 +- `order.orders`: 注文情報を管理するテーブル +- `order.statements`: 注文明細情報を管理するテーブル +- `order.items`: 注文するアイテムの情報を管理するテーブル + +スキーマのエンティティ関係図は次のとおりです。 + +![ERD](images/ERD.png) + +### トランザクション + +このサンプルアプリケーションでは、次の 5 つのトランザクションが実装されています: + +1. 顧客情報の取得 +2. クレジットカードによる注文 (注文のコストがクレジット限度額を下回っているかどうかを確認し、注文履歴を記録して、チェックに合格した場合は `credit_total` を更新します) +3. 注文 ID による注文情報の取得 +4. 顧客 ID による注文情報の取得 +5. 返済 (`credit_total` の金額を減らします) + +## ScalarDB Cluster の設定 + +[ScalarDB Cluster の設定](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-multi-storage-transaction-sample/scalardb-cluster-node.properties)は次のとおりです: + +```properties +scalar.db.storage=multi-storage +scalar.db.multi_storage.storages=cassandra,mysql +scalar.db.multi_storage.storages.cassandra.storage=cassandra +scalar.db.multi_storage.storages.cassandra.contact_points=cassandra-1 +scalar.db.multi_storage.storages.cassandra.username=cassandra +scalar.db.multi_storage.storages.cassandra.password=cassandra +scalar.db.multi_storage.storages.mysql.storage=jdbc +scalar.db.multi_storage.storages.mysql.contact_points=jdbc:mysql://mysql-1:3306/ +scalar.db.multi_storage.storages.mysql.username=root +scalar.db.multi_storage.storages.mysql.password=mysql +scalar.db.multi_storage.namespace_mapping=customer:mysql,order:cassandra,coordinator:cassandra +scalar.db.multi_storage.default_storage=cassandra + +scalar.db.cluster.node.standalone_mode.enabled=true +scalar.db.sql.enabled=true + +# License key configurations +scalar.db.cluster.node.licensing.license_key= +scalar.db.cluster.node.licensing.license_check_cert_pem= +``` + +- `scalar.db.storage`: ScalarDB でマルチストレージトランザクションを使用するには、`multi-storage` を指定する必要があります。 +- `scalar.db.multi_storage.storages`: ここでストレージ名を定義する必要があります。 +- `scalar.db.multi_storage.storages.cassandra.*`: これらの設定は、`scalar.db.multi_storage.storages` で定義されているストレージ名の 1 つである `cassandra` ストレージ用です。ここで、`cassandra` ストレージのすべての `scalar.db.*` プロパティを設定できます。 +- `scalar.db.multi_storage.storages.mysql.*`: これらの設定は、`scalar.db.multi_storage.storages` で定義されているストレージ名の 1 つである `mysql` ストレージ用です。ここで、`mysql` ストレージのすべての `scalar.db.*` プロパティを設定できます。 +- `scalar.db.multi_storage.namespace_mapping`: この設定は、名前空間をストレージにマップします。このサンプルアプリケーションでは、`customer` 名前空間テーブルの操作は `mysql` ストレージにマップされ、`order` 名前空間テーブルの操作は `cassandra` ストレージにマップされます。また、Consensus Commit トランザクションで使用される `coordinator` 名前空間にマップされるストレージを定義することもできます。 +- `scalar.db.multi_storage.default_storage`: この設定は、マップされていない名前空間テーブルの操作に使用されるデフォルトのストレージを設定します。 + +詳細については、[マルチストレージトランザクション](../../multi-storage-transactions.mdx)を参照してください。 + +このサンプル アプリケーションでは、ScalarDB Cluster はスタンドアロンモード (`scalar.db.cluster.node.standalone_mode.enabled=true`) で実行されています。 + +また、設定ファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定する必要があります。 詳細については、[製品ライセンスキーの設定方法](../../scalar-licensing/README.mdx)を参照してください。 + +## クライアント設定 + +[クライアント設定](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-multi-storage-transaction-sample/scalardb-sql.properties)は次のとおりです。 + +```properties +scalar.db.sql.connection_mode=cluster +scalar.db.sql.cluster_mode.contact_points=indirect:localhost +``` + +## セットアップ + +### ScalarDB サンプルリポジトリのクローンを作成する + +ターミナルを開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。 + +```console +git clone https://github.com/scalar-labs/scalardb-samples +``` + +次に、次のコマンドを実行して、このサンプルがあるディレクトリに移動します。 + +```console +cd scalardb-samples/spring-data-multi-storage-transaction-sample +``` + +### ライセンスキーを設定する + +設定ファイル [`scalardb-cluster-node.properties`](https://github.com/scalar-labs/scalardb-samples/blob/main/spring-data-multi-storage-transaction-sample/scalardb-cluster-node.properties) で ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、[製品ライセンスキーの設定方法](../../scalar-licensing/README.mdx)を参照してください。 + +### Cassandra、MySQL、および ScalarDB Cluster を起動する + +Cassandra、MySQL、および ScalarDB Cluster を起動するには、次の `docker-compose` コマンドを実行する必要があります。 + +```console +docker-compose up -d +``` + +コンテナの起動には 1 分以上かかる場合があることに注意してください。 + +### スキーマをロード + +次に、次のコマンドでスキーマを適用する必要があります。SQL CLI ツール `scalardb-cluster-sql-cli--all.jar` をダウンロードするには、ScalarDB の [リリース](https://github.com/scalar-labs/scalardb/releases)を参照して、使用するバージョンをダウンロードしてください。 + +```console +java -jar scalardb-cluster-sql-cli--all.jar --config scalardb-sql.properties --file schema.sql +``` + +### 初期データをロードする + +コンテナが起動したら、次のコマンドを実行して初期データをロードする必要があります。 + +```console +./gradlew run --args="LoadInitialData" +``` + +初期データがロードされた後、次のレコードがテーブルに保存されます: + +- `customer.customers` テーブルの場合: + +| customer_id | name | credit_limit | credit_total | +|-------------|---------------|--------------|--------------| +| 1 | Yamada Taro | 10000 | 0 | +| 2 | Yamada Hanako | 10000 | 0 | +| 3 | Suzuki Ichiro | 10000 | 0 | + +- `order.items` テーブルの場合: + +| item_id | name | price | +|---------|--------|-------| +| 1 | Apple | 1000 | +| 2 | Orange | 2000 | +| 3 | Grape | 2500 | +| 4 | Mango | 5000 | +| 5 | Melon | 3000 | + +## サンプルアプリケーションを実行する + +まず、ID が `1` である顧客に関する情報を取得します。 + +```console +./gradlew run --args="GetCustomerInfo 1" +... +{"customer_id":1,"name":"Yamada Taro","credit_limit":10000,"credit_total":0} +... +``` + +次に、顧客 ID `1` を使用して、リンゴ 3 個とオレンジ 2 個を注文します。注文形式は `:,:,...` であることに注意してください。 + +```console +./gradlew run --args="PlaceOrder 1 1:3,2:2" +... +{"order_id":"5d49eb62-fcb9-4dd2-9ae5-e714d989937f","customer_id":1,"timestamp":1677564659810} +... +``` + +このコマンドを実行すると、注文 ID が表示されます。 + +注文 ID を使用して注文の詳細を確認してみましょう。 + +```console +./gradlew run --args="GetOrder 5d49eb62-fcb9-4dd2-9ae5-e714d989937f" +... +{"order_id":"5d49eb62-fcb9-4dd2-9ae5-e714d989937f","timestamp":1677564659810,"customer_id":1,"customer_name":"Yamada Taro","statements":[{"item_id":1,"item_name":"Apple","price":1000,"count":3,"total":3000},{"item_id":2,"item_name":"Orange","price":2000,"count":2,"total":4000}],"total":7000} +... +``` + +次に、別の注文を出して、顧客 ID `1` の注文履歴を取得しましょう。 + +```console +./gradlew run --args="PlaceOrder 1 5:1" +... +{"order_id":"ccd97d75-ee57-4393-a0bb-5230c4a8c68a","customer_id":1,"timestamp":1677564776069} +... +./gradlew run --args="GetOrders 1" +... +[{"order_id":"ccd97d75-ee57-4393-a0bb-5230c4a8c68a","timestamp":1677564776069,"customer_id":1,"customer_name":"Yamada Taro","statements":[{"item_id":5,"item_name":"Melon","price":3000,"count":1,"total":3000}],"total":3000},{"order_id":"5d49eb62-fcb9-4dd2-9ae5-e714d989937f","timestamp":1677564659810,"customer_id":1,"customer_name":"Yamada Taro","statements":[{"item_id":1,"item_name":"Apple","price":1000,"count":3,"total":3000},{"item_id":2,"item_name":"Orange","price":2000,"count":2,"total":4000}],"total":7000}] +... +``` + +この注文履歴は、タイムスタンプの降順で表示されます。 + +顧客の現在の `credit_total` は `10000` です。顧客は、情報を取得したときに表示された `credit_limit` に達したため、これ以上注文することはできません。 + +```console +./gradlew run --args="GetCustomerInfo 1" +... +{"customer_id":1,"name":"Yamada Taro","credit_limit":10000,"credit_total":10000} +... +./gradlew run --args="PlaceOrder 1 3:1,4:1" +... +java.lang.RuntimeException: Credit limit exceeded. limit:10000, total:17500 + at sample.SampleService.placeOrder(SampleService.java:102) + at sample.SampleService$$FastClassBySpringCGLIB$$1123c447.invoke() + at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) + at sample.SampleService$$EnhancerBySpringCGLIB$$1cb0cc8c.placeOrder() + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:37) + at sample.command.PlaceOrderCommand.call(PlaceOrderCommand.java:13) + at picocli.CommandLine.executeUserObject(CommandLine.java:2041) + at picocli.CommandLine.access$1500(CommandLine.java:148) + at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2453) + at picocli.CommandLine$RunLast.handle(CommandLine.java:2415) + at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273) + at picocli.CommandLine$RunLast.execute(CommandLine.java:2417) + at picocli.CommandLine.execute(CommandLine.java:2170) + at sample.SampleApp.run(SampleApp.java:26) + at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:768) + at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:752) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) + at sample.SampleApp.main(SampleApp.java:35) +... +``` + +支払いが完了すると、顧客は再度注文できるようになります。 + +```console +./gradlew run --args="Repayment 1 8000" +... +./gradlew run --args="GetCustomerInfo 1" +... +{"customer_id":1,"name":"Yamada Taro","credit_limit":10000,"credit_total":2000} +... +./gradlew run --args="PlaceOrder 1 3:1,4:1" +... +{"order_id":"3ac4a1bf-a724-4f26-b948-9f03281a971e","customer_id":1,"timestamp":1677565028204} +... +``` + +## クリーンアップ + +Cassandra、MySQL、および ScalarDB Cluster を停止するには、次のコマンドを実行します。 + +```console +docker-compose down +``` diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/images/ERD.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/images/ERD.png new file mode 100644 index 0000000000000000000000000000000000000000..021004371c536704a4381817a954488bc4aaef1f GIT binary patch literal 9786 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 ZwfFl!8(dVAjAIM{6-7;j3OUOU{|4=(#hCyA literal 0 HcmV?d00001 diff --git a/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/images/overview.png b/i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/version-3.13/scalardb-samples/spring-data-multi-storage-transaction-sample/images/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..360b26c6a59b58a368acd217cab6c9fd9cfadd1e GIT binary patch literal 62938 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

@e9RR^iwxy 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 ZjRsyx-+p$!IJczxrOWZerl{sqKh [WITH creation_options] + +creation_options: