design-scalardb
ScalarDB設計エージェント - エディション設定に基づくマイクロサービスのデータアーキテクチャ設計。分散トランザクション、スキーマ設計、ポリグロット永続化を策定。/design-scalardb [対象パス] で呼び出し。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
ScalarDB設計エージェント - エディション設定に基づくマイクロサービスのデータアーキテクチャ設計。分散トランザクション、スキーマ設計、ポリグロット永続化を策定。/design-scalardb [対象パス] で呼び出し。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
ScalarDB Analytics設計エージェント - ScalarDB Analyticsを使用した分析基盤の設計。Apache Sparkベースの分析クエリ、マルチDB横断分析を策定。/design-scalardb-analytics [対象パス] で呼び出し。
ScalarDBサイジング見積もりエージェント - Enterprise/OSSエディション別のインフラ構成・Pod数・コストを対話形式で見積もり。/scalardb-sizing-estimator で呼び出し。
DDD評価エージェント - 戦略的設計・戦術的設計の両面からDDD原則への適合度を評価し改善点を特定。/ddd-evaluation [対象パス] で呼び出し。
システム分析エージェント - ユビキタス言語、アクター、ロール、権限、ドメイン-コード対応表を抽出。/analyze-system [対象パス] で呼び出し。
GraphDB構築エージェント - ユビキタス言語とコード解析結果からRyuGraphデータベースを構築。/build-graph [対象パス] で呼び出し。
ドメインストーリーテリングエージェント - ドメインストーリーの作成、ビジネスプロセスの可視化。/create-domain-story --domain=[ドメイン名] で呼び出し。
| name | design-scalardb |
| description | ScalarDB設計エージェント - エディション設定に基づくマイクロサービスのデータアーキテクチャ設計。分散トランザクション、スキーマ設計、ポリグロット永続化を策定。/design-scalardb [対象パス] で呼び出し。 |
| user_invocable | true |
エディション設定に基づいてマイクロサービスのデータアーキテクチャを設計するエージェントです。
このエージェントは、既存システムの分析結果とエディション設定をもとに、以下の設計を策定します:
エディション対応: 本スキルはOSS/Community、Enterprise Standard、Enterprise Premiumの3エディションに対応しています。エディション設定ファイル(
work/{project}/scalardb-edition-config.md)に基づいて設計を最適化します。未選定の場合は/select-scalardb-editionを先に実行してください。
分析要件がある場合: レポート、ダッシュボード、クロスDBクエリなどの分析要件がある場合は、
/design-scalardb-analyticsも併用してください。ScalarDB Analyticsを使用することで、HTAP(Hybrid Transactional/Analytical Processing)アーキテクチャを実現できます。
以下のファイルが存在すること:
必須:
reports/03_design/target-architecture.md ← /design-microservices推奨(エディション設定):
work/{project}/scalardb-edition-config.md ← /select-scalardb-edition(未選定時はEnterprise Standardをデフォルト)推奨(/ddd-redesign の出力):
reports/03_design/aggregate-redesign.md - 集約の再設計reports/03_design/bounded-contexts-redesign.md - 境界コンテキスト推奨(/analyze-system の出力):
reports/01_analysis/system-overview.md - システム概要結果は reports/03_design/ に出力します:
scalardb-architecture.md - アーキテクチャ設計scalardb-schema.md - ScalarDBスキーマ設計scalardb-transaction.md - トランザクション設計scalardb-migration.md - マイグレーション計画重要: 各ステップ完了時に即座にファイルを出力してください。
ScalarDBは、異種データベース間で分散トランザクションを実現するデータ管理プラットフォームです。エディションによりデプロイモードが異なります。
| エディション | デプロイモード | 説明 |
|---|---|---|
| OSS/Community | 組み込み(Embedded) | Javaライブラリとしてアプリケーションに直接組み込み |
| Enterprise Standard | Cluster | gRPCベースの分散トランザクションコーディネーター |
| Enterprise Premium | Cluster | Standard + GraphQL + AWS Marketplace対応 |
エディション詳細:
.claude/rules/scalardb-edition-profiles.mdを参照
┌─────────────────────────────────────────────────────────────┐
│ Application Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Service A│ │ Service B│ │ Service C│ │ Service D│ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼────────────┼────────────┼────────────┼──────────────┘
│ gRPC/SQL │ GraphQL │ gRPC │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ ScalarDB Cluster │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Transaction Coordinator │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Node 1 │ │ Node 2 │ │ Node 3 │ (HA構成) │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Storage Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │PostgreSQL│ │ DynamoDB │ │ Cassandra│ │ MySQL │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
| 機能 | 説明 |
|---|---|
| Consensus Commit | 単一ストレージでのACIDトランザクション |
| Two-Phase Commit | 複数ストレージ間の分散トランザクション |
| Multi-Storage Transaction | 異種DB間のアトミック操作 |
| gRPC API | 高性能なサービス間通信 |
| SQL Interface | JDBC互換のSQLアクセス |
| GraphQL Interface | 柔軟なクエリAPI |
| Vector Search | AIアプリケーション向けベクトル検索 |
| High Availability | クラスター構成による高可用性 |
| カテゴリ | データベース |
|---|---|
| JDBC | MySQL, PostgreSQL, Oracle, SQL Server, Db2 |
| NoSQL | Cassandra, DynamoDB, Cosmos DB, YugabyteDB |
| Object Storage | S3, Azure Blob, GCS |
| 観点 | メリット |
|---|---|
| 運用 | 集中管理、統一的な監視・ログ |
| スケーラビリティ | ノード追加による水平スケール |
| セキュリティ | 認証・認可の一元化 |
| マルチテナント | 名前空間による論理分離 |
| 開発効率 | SQL/GraphQLによる簡易アクセス |
あなたはScalarDB Clusterを使用したマイクロサービスデータアーキテクチャの設計専門家です。以下の手順で設計を実行してください。
重要: 実行前に必ず前提条件を確認してください。
必須ファイルの確認:
└── reports/03_design/target-architecture.md [必須] ← /design-microservices
推奨ファイルの確認:
├── reports/03_design/aggregate-redesign.md [推奨] ← /ddd-redesign
├── reports/03_design/bounded-contexts-redesign.md [推奨] ← /ddd-redesign
└── reports/01_analysis/system-overview.md [推奨] ← /analyze-system
エラーハンドリング:
/design-microservices を先に実行するよう案内work/{project}/scalardb-edition-config.md を読み込み、エディションに応じてワークフローを分岐する。
edition フィールドを読み込み、以下のルールに従う| ステップ | Enterprise (Cluster) | OSS (Embedded) |
|---|---|---|
| Step 2: 現状分析 | 実行 | 実行(変更なし) |
| Step 4: Cluster構成設計 | 実行 | スキップ — Cluster不要 |
| Step 5: ストレージバックエンド設計 | 実行 | 実行(OSS対応ストレージに限定) |
| Step 6: スキーマ設計 | 実行 | 実行(変更なし) |
| Step 7: トランザクション設計 | 実行 | 実行(Core API例に置換) |
| Step 8: 例外処理設計 | 実行 | 実行(変更なし) |
| Step 9: パフォーマンス最適化 | 実行 | 実行(Helm設定を除外) |
| Step 10: マイグレーション計画 | 実行 | 実行(ライブラリ組み込み設定に置換) |
OSS版の制約:
.claude/rules/scalardb-edition-profiles.md §2A を使用現在のデータアーキテクチャを分析:
## 現状分析
### データソース一覧
| データソース | 種別 | 用途 | データ量 | トランザクション要件 |
|-------------|-----|------|---------|-------------------|
### クロスサービストランザクション
| トランザクション名 | 関連サービス | 整合性要件 | 現状の実装 |
|------------------|-------------|-----------|-----------|
### 課題
- [課題1]
- [課題2]
データアーキテクチャに影響する非機能要件をAskUserQuestionで確認する。
{
"questions": [
{
"question": "トランザクションの整合性レベル要件を選択してください",
"header": "整合性",
"options": [
{"label": "SERIALIZABLE (推奨)", "description": "最高の整合性。金融・在庫等のミッションクリティカルなデータ向き"},
{"label": "SNAPSHOT", "description": "読み取り一貫性。書き込み競合時のみ直列化。NoSQL系のデフォルト"},
{"label": "混在", "description": "サービスごとに異なる整合性レベルを適用"}
],
"multiSelect": false
},
{
"question": "主要なワークロード特性を選択してください",
"header": "ワークロード",
"options": [
{"label": "バランス型 (推奨)", "description": "読み書き比率がほぼ同等。標準的な業務アプリ"},
{"label": "読み取りヘビー", "description": "読み取りが80%以上。キャッシュ戦略を重視"},
{"label": "書き込みヘビー", "description": "書き込みが50%以上。バッチ・ログ系"},
{"label": "混在", "description": "サービスごとに異なるワークロード特性"}
],
"multiSelect": false
},
{
"question": "データ保持・アーカイブの要件を選択してください",
"header": "データ保持",
"options": [
{"label": "オンライン保持のみ (推奨)", "description": "全データをアクティブストレージに保持"},
{"label": "期間ベースアーカイブ", "description": "一定期間後にコールドストレージへ移動"},
{"label": "論理削除+物理削除ポリシー", "description": "GDPR等コンプライアンス対応"},
{"label": "イベントソーシング", "description": "全変更履歴を永続保持"}
],
"multiSelect": false
}
]
}
設計への反映:
isolation_level / serializable_strategy に反映deleted_at, archived_at カラム追加検討ScalarDB Clusterのクラスター構成を設計します。
シングルリージョン構成(推奨開始構成)
# 構成
- クラスターノード数: 3(奇数推奨)
- ロードバランサー: L4/L7
- 認証: Kubernetes ServiceAccount / OAuth2
# 適用
- 単一リージョンでの高可用性
- 低レイテンシー要件
マルチリージョン構成(災害対策)
# 構成
- プライマリリージョン: 3ノード
- セカンダリリージョン: 3ノード(レプリカ)
- グローバルロードバランサー
# 適用
- 地理的冗長性が必要
- RPO/RTO要件が厳しい
| 規模 | ノード数 | CPU/ノード | メモリ/ノード | 想定TPS |
|---|---|---|---|---|
| Small | 3 | 2 vCPU | 4 GB | ~1,000 |
| Medium | 5 | 4 vCPU | 8 GB | ~5,000 |
| Large | 7+ | 8 vCPU | 16 GB | ~10,000+ |
| 方式 | ユースケース | 特徴 |
|---|---|---|
| gRPC API | 高性能トランザクション | 低レイテンシー、型安全 |
| SQL Interface | 既存JDBC資産活用 | 移行容易、標準SQL |
| GraphQL | フロントエンド直接アクセス | 柔軟なクエリ、自動生成スキーマ |
graph TB
subgraph "Application Services"
A["Order Service<br/>gRPC"]
B["Inventory Service<br/>gRPC"]
C["Analytics<br/>SQL"]
D["BFF<br/>GraphQL"]
end
subgraph "ScalarDB Cluster"
LB[Load Balancer]
N1[Node 1]
N2[Node 2]
N3[Node 3]
end
A --> LB
B --> LB
C --> LB
D --> LB
LB --> N1
LB --> N2
LB --> N3
各マイクロサービスに適したストレージを選定:
## ストレージ選定
### サービス別ストレージマッピング
| サービス | 主ストレージ | 選定理由 | ScalarDB設定 |
|---------|------------|---------|--------------|
| Order Service | PostgreSQL | トランザクション重視 | JDBC |
| Inventory Service | DynamoDB | スケーラビリティ | DynamoDB Native |
| Analytics Service | Cassandra | 書き込み性能 | Cassandra Native |
### マルチストレージ構成
```mermaid
graph TB
subgraph "ScalarDB Cluster"
Coordinator[Transaction Coordinator]
end
subgraph Services
OrderSvc[Order Service]
InvSvc[Inventory Service]
PaySvc[Payment Service]
end
subgraph Storage
PG[(PostgreSQL)]
DDB[(DynamoDB)]
Cassandra[(Cassandra)]
end
OrderSvc --> Coordinator
InvSvc --> Coordinator
PaySvc --> Coordinator
Coordinator --> PG
Coordinator --> DDB
Coordinator --> Cassandra
### Step 6: スキーマ設計
ScalarDBのスキーマ設計原則に従ってテーブルを設計:
```markdown
## スキーマ設計
### 命名規則
- Namespace: [service_name]
- Table: [entity_name]
- パーティションキー: ビジネスID(例:order_id, customer_id)
- クラスタリングキー: 時系列やバージョン
### テーブル定義
#### [Namespace].[Table]
| カラム名 | データ型 | キー種別 | 説明 |
|---------|---------|---------|------|
| id | TEXT | PARTITION | 主キー |
| created_at | TIMESTAMP | CLUSTERING | 作成日時 |
| status | TEXT | - | ステータス |
| data | TEXT | - | JSONデータ |
**スキーマJSON:**
```json
{
"namespace": "order_service",
"table": "orders",
"partition_key": ["order_id"],
"clustering_key": ["created_at"],
"columns": {
"order_id": "TEXT",
"created_at": "TIMESTAMP",
"customer_id": "TEXT",
"status": "TEXT",
"total_amount": "BIGINT"
},
"secondary_index": ["customer_id"]
}
### Step 7: トランザクション設計
#### 単一ストレージトランザクション(Consensus Commit)
```java
// 設定
scalar.db.transaction_manager=consensus-commit
scalar.db.storage=jdbc
scalar.db.contact_points=jdbc:postgresql://localhost:5432/mydb
// 使用パターン
DistributedTransactionManager manager = ...;
DistributedTransaction tx = manager.start();
try {
// Get
Optional<Result> result = tx.get(Get.newBuilder()
.namespace("order_service")
.table("orders")
.partitionKey(Key.ofText("order_id", orderId))
.build());
// Put
tx.put(Put.newBuilder()
.namespace("order_service")
.table("orders")
.partitionKey(Key.ofText("order_id", orderId))
.textValue("status", "CONFIRMED")
.build());
tx.commit();
} catch (Exception e) {
tx.rollback();
throw e;
}
// 設定
scalar.db.transaction_manager=consensus-commit
scalar.db.multi_storage.storages=postgres,dynamodb
// PostgreSQL設定
scalar.db.multi_storage.storages.postgres.storage=jdbc
scalar.db.multi_storage.storages.postgres.contact_points=jdbc:postgresql://...
// DynamoDB設定
scalar.db.multi_storage.storages.dynamodb.storage=dynamo
scalar.db.multi_storage.storages.dynamodb.contact_points=dynamodb.ap-northeast-1.amazonaws.com
// Namespace-Storage マッピング
scalar.db.multi_storage.namespace_mapping=order_service:postgres,inventory_service:dynamodb
## Sagaオーケストレーション
### 注文作成Saga
1. Order Service: 注文を作成(PENDING)
2. Inventory Service: 在庫を予約
3. Payment Service: 決済を実行
4. Order Service: 注文を確定(CONFIRMED)
### 補償トランザクション
| ステップ | 正常処理 | 補償処理 |
|---------|---------|---------|
| 在庫予約 | reserveInventory() | releaseInventory() |
| 決済実行 | processPayment() | refundPayment() |
| 注文確定 | confirmOrder() | cancelOrder() |
sequenceDiagram
participant Client
participant OrderSvc as Order Service
participant InvSvc as Inventory Service
participant PaySvc as Payment Service
participant ScalarDB as ScalarDB Cluster
Client->>OrderSvc: 注文作成
OrderSvc->>ScalarDB: Begin 2PC
ScalarDB->>OrderSvc: TX Started
OrderSvc->>ScalarDB: Insert Order (PENDING)
OrderSvc->>InvSvc: Reserve Inventory
InvSvc->>ScalarDB: Update Inventory
OrderSvc->>PaySvc: Process Payment
PaySvc->>ScalarDB: Insert Payment
OrderSvc->>ScalarDB: Prepare
ScalarDB-->>OrderSvc: Prepared
OrderSvc->>ScalarDB: Commit
ScalarDB-->>OrderSvc: Committed
OrderSvc->>Client: 注文完了
ScalarDBの例外カテゴリに基づく処理戦略:
| 例外タイプ | 例外クラス | 対応戦略 |
|---|---|---|
| Transient | CrudConflictException | リトライ(指数バックオフ) |
| Transient | CommitConflictException | リトライ(指数バックオフ) |
| Non-Transient | CrudException | 根本原因調査、エラー返却 |
| Unknown | UnknownTransactionStatusException | 冪等性チェック後リトライ |
// リトライパターン
int maxRetries = 3;
for (int i = 0; i < maxRetries; i++) {
try {
executeTransaction();
break;
} catch (CrudConflictException | CommitConflictException e) {
if (i == maxRetries - 1) throw e;
Thread.sleep((long) Math.pow(2, i) * 100);
} catch (UnknownTransactionStatusException e) {
// 冪等性キーでコミット状態を確認
if (isAlreadyCommitted(idempotencyKey)) {
return getExistingResult(idempotencyKey);
}
throw e;
}
}
# 有効化
scalar.db.consensus_commit.coordinator.group_commit.enabled=true
# スロットサイズ(並列書き込み数)
scalar.db.consensus_commit.coordinator.group_commit.slot_capacity=20
# 遅延時間(ミリ秒)
scalar.db.consensus_commit.coordinator.group_commit.group_size_fix_timeout_millis=20
// 存在チェックを自動化
Put put = Put.newBuilder()
.namespace("order_service")
.table("orders")
.partitionKey(Key.ofText("order_id", orderId))
.textValue("status", "CONFIRMED")
.enableImplicitPreRead() // 自動で存在チェック
.build();
## マイグレーション計画
### Phase 1: 準備
- ScalarDB Cluster環境構築
- Coordinatorテーブル作成
- スキーマ定義とテーブル作成
### Phase 2: Shadow Migration
- 既存DBとScalarDB双方に書き込み
- データ整合性検証
- パフォーマンス計測
### Phase 3: 段階的切り替え
| サービス | 切り替え順 | 前提条件 | ロールバック計画 |
|---------|----------|---------|----------------|
| Master Data | 1 | - | 旧DB復元 |
| Order Service | 2 | Master完了 | フラグ切り替え |
| Payment Service | 3 | Order完了 | フラグ切り替え |
### Phase 4: 完全移行
- 旧DB参照の削除
- モニタリング強化
- ドキュメント更新
出力したファイルのMermaid図を検証し、エラーがあれば修正:
/fix-mermaid ./reports/03_design
ScalarDB Clusterアーキテクチャ設計:
スキーマ設計:
トランザクション設計:
マイグレーション計画:
# 既存のデータアクセスパターンを確認
mcp__serena__find_symbol で Repository/DAO クラスを検索
mcp__serena__find_referencing_symbols でトランザクション境界を確認
# scalardb-cluster-node.properties テンプレート
# Cluster設定
scalar.db.cluster.node.standalone_mode.enabled=false
scalar.db.cluster.membership.type=KUBERNETES
# gRPC設定
scalar.db.cluster.grpc.deadline_duration_millis=60000
# トランザクション設定
scalar.db.storage=multi-storage
scalar.db.transaction_manager=consensus-commit
# Coordinator設定
scalar.db.consensus_commit.coordinator.namespace=coordinator
scalar.db.consensus_commit.coordinator.group_commit.enabled=true
# マルチストレージ設定
scalar.db.multi_storage.storages=postgres,dynamodb,cassandra
scalar.db.multi_storage.namespace_mapping=order_service:postgres,inventory_service:dynamodb
# 認証設定
scalar.db.cluster.auth.enabled=true
scalar.db.cluster.auth.type=JWT
# scalardb-cluster-client.properties
# Cluster接続
scalar.db.contact_points=indirect:scalardb-cluster-headless.default.svc.cluster.local
scalar.db.contact_port=60053
# 認証
scalar.db.cluster.auth.enabled=true
scalar.db.cluster.auth.credential.type=JWT
# values.yaml (Helm Chart)
scalardbCluster:
replicaCount: 3
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"
scalardbClusterNodeProperties: |
scalar.db.cluster.membership.type=KUBERNETES
scalar.db.storage=multi-storage
# ... 追加設定
envoy:
enabled: true
replicaCount: 3
| アンチパターン | 問題 | 推奨 |
|---|---|---|
| クロスパーティションスキャン多用 | パフォーマンス低下 | セカンダリインデックス活用 |
| 大きなトランザクション | ロック競合 | トランザクション分割 |
| Group Commit + カスタムTX ID | 未サポート | 自動生成ID使用 |
| 非JDBC DBでSERIALIZABLE前提 | SNAPSHOTになる可能性 | 整合性レベル確認 |
/select-scalardb-edition を先に実行するよう案内.claude/rules/scalardb-edition-profiles.md の静的情報で設計| スキル | 用途 |
|---|---|
/design-scalardb-analytics | 分析基盤設計(レポート、ダッシュボード、クロスDBクエリ) |
/design-microservices | マイクロサービスアーキテクチャ設計 |
/map-domains | ドメイン境界・コンテキスト設計 |