nosql-expert
分散型NoSQLデータベース(Cassandra、DynamoDB)に関する専門的なアドバイスを提供します。クエリファーストのデータモデリング、シングルテーブル設計、ホットパーティションの回避など、大規模システムの設計に必要な考え方と実践的な手法を中心に解説します。
description の原文を見る
Expert guidance for distributed NoSQL databases (Cassandra, DynamoDB). Focuses on mental models, query-first modeling, single-table design, and avoiding hot partitions in high-scale systems.
SKILL.md 本文
NoSQL Expert Patterns (Cassandra & DynamoDB)
概要
このスキルは、分散ワイドカラムおよびキーバリューストア(特に Apache Cassandra と Amazon DynamoDB)向けのプロフェッショナルなメンタルモデルとデザインパターンを提供します。
SQL(データエンティティをモデル化)やドキュメントストア(MongoDB など)とは異なり、これらの分散システムではクエリを最初にモデル化する必要があります。
使用場面
- スケール向けの設計:シングルノードデータベースから分散クラスタへの移行。
- 技術選定:Cassandra、ScyllaDB、または DynamoDB の評価または使用。
- パフォーマンスチューニング:既存 NoSQL システムの「ホットパーティション」または高レイテンシーのトラブルシューティング。
- マイクロサービス:高度に最適化された読み込みが必要な「サービスごとのデータベース」パターンの実装。
メンタルシフト:SQL vs. 分散 NoSQL
| 項目 | SQL(リレーショナル) | 分散 NoSQL(Cassandra/DynamoDB) |
|---|---|---|
| データモデリング | エンティティ + リレーションシップをモデル化 | クエリ(アクセスパターン)をモデル化 |
| 結合 | CPU 集約的、読み込み時に実行 | 事前計算(非正規化)、書き込み時に実行 |
| ストレージコスト | 高い(重複を最小化) | 安い(読み込み速度のためにデータを重複) |
| 一貫性 | ACID(強い一貫性) | BASE(結果整合性)/チューニング可能 |
| スケーラビリティ | 垂直(より大きなマシン) | 水平(より多くのノード/シャード) |
黄金律: SQL では、データモデルを任意のクエリに答えるように設計します。NoSQL では、データモデルを特定のクエリに効率的に答えるように設計します。
コアデザインパターン
1. クエリファースト モデリング(アクセスパターン)
後からクエリを追加することは通常できず、マイグレーションまたは新しいテーブル/インデックスの作成が必要になります。
プロセス:
- すべてのエンティティをリストアップ(User、Order、Product)。
- すべてのアクセスパターンをリストアップ(「メールでユーザーを取得」、「ユーザーの注文を日付でソートして取得」)。
- テーブルを設計し、単一のルックアップでそのパターンに対応できるようにします。
2. パーティションキーは王様
データは**パーティションキー(PK)**に基づいて物理ノード全体に分散されます。
- 目標: データとトラフィックの均等な分散。
- アンチパターン: 低カーディナリティのPK を使用(例:
status="active"またはgender="m")は、ホットパーティションを作成し、スループットを単一ノードの容量に制限します。 - ベストプラクティス: 高カーディナリティのキーを使用(ユーザーID、デバイスID、複合キー)。
3. クラスタリング/ソートキー
パーティション内では、データはディスク上で**クラスタリングキー(Cassandra)またはソートキー(DynamoDB)**でソートされます。
- これにより、効率的な範囲クエリが可能になります(例:
WHERE user_id=X AND date > Y)。 - 特定の取得要件に対してデータを効果的に事前ソートします。
4. シングルテーブル設計(隣接リスト)
主な用途:DynamoDB(ただし概念は他にも適用可能)
複数のエンティティタイプを 1 つのテーブルに格納して、事前結合された読み込みを実現します。
| PK(パーティション) | SK(ソート) | データフィールド... |
|---|---|---|
USER#123 | PROFILE | { name: "Ian", email: "..." } |
USER#123 | ORDER#998 | { total: 50.00, status: "shipped" } |
USER#123 | ORDER#999 | { total: 12.00, status: "pending" } |
- クエリ:
PK="USER#123" - 結果: ユーザープロファイルとすべての注文を1 つのネットワークリクエストで取得。
5. 非正規化と重複
異なるクエリパターンに対応するために、同じデータを複数のテーブルに格納することを躊躇しないでください。
- テーブル A:
users_by_id(PK: uuid) - テーブル B:
users_by_email(PK: email)
トレードオフ:テーブル間でデータ一貫性を管理する必要があります(多くの場合、結果整合性またはバッチ書き込みを使用)。
具体的なガイダンス
Apache Cassandra / ScyllaDB
- 主キー構造:
((Partition Key), Clustering Columns) - 結合なし、集約なし:
JOINやGROUP BYを試みないでください。別のカウンターテーブルで集約を事前計算してください。 ALLOW FILTERINGを避ける: 本番環境でこれを見かけたら、データモデルが間違っています。クラスタ全体スキャンを意味します。- 書き込みは安い: 挿入と更新は単に LSM ツリーへの追記です。読み込み効率ほど書き込みボリュームについて心配する必要はありません。
- 墓石(Tombstones): 削除はコストのかかるマーカーです。標準テーブルでの高速削除パターン(キューなど)は避けてください。
AWS DynamoDB
- GSI(グローバルセカンダリインデックス): GSI を使用してデータの代替ビューを作成します(例:ユーザーではなく日付で注文を検索)。
- 注記: GSI は結果整合性です。
- LSI(ローカルセカンダリインデックス): 同じパーティション内でデータを異なる方法でソートします。テーブル作成時に作成する必要があります。
- WCU / RCU: キャパシティモードを理解してください。シングルテーブル設計は消費キャパシティユニットの最適化に役立ちます。
- TTL: Time-To-Live 属性を使用して古いデータを自動的に期限切れにします(無料削除)。墓石を作成しません。
エキスパートチェックリスト
NoSQL スキーマを最終化する前に:
- アクセスパターンカバレッジ: すべてのクエリパターンが特定のテーブルまたはインデックスにマップされていますか?
- カーディナリティチェック: パーティションキーに十分なユニーク値があり、トラフィックを均等に分散していますか?
- パーティション分割リスク: 単一パーティション(例:単一ユーザーの注文)は無期限に成長しますか?(> 10GB の場合、パーティションを「シャード」する必要があります。例:
USER#123#2024-01)。 - 一貫性要件: アプリケーションはこの読み込みパターンに対して結果整合性を許容できますか?
一般的なアンチパターン
❌ スキャッタ・ギャザー: 1 つのアイテムを見つけるためにすべてのパーティションにクエリを実行(Scan)。
❌ ホットキー: すべての「月曜日」データを 1 つのパーティションに入れる。
❌ リレーショナルモデリング: Author と Book テーブルを作成し、コードでそれらを結合しようとする。(代わりに、Book 概要を Author に埋め込むか、Books に Author 情報を重複させます)。
制限事項
- このスキルは、タスクが上記の説明範囲と明確に一致する場合にのみ使用してください。
- 出力を環境固有の検証、テスト、またはエキスパートレビューの代わりにしないでください。
- 必要な入力、権限、安全境界、または成功基準が不明な場合は停止して、明確化を求めてください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- sickn33
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。