mcpField
S
spacetimedb-tables

spacetimedb-tables

github.com/danmossaデータ・データベース2169 回インストール19 週間前に更新
リポジトリ

spacetimedb-tables について

SpacetimeDB モジュールのテーブル設計とアクセスパターンを扱うリファレンススキルです。TypeScript、C#、Rust、C++ の開発者向けに、インデックス、公開範囲、移行、イベント、スケジュールを解説します。

主な機能

  1. 01各言語のテーブル宣言パターン
  2. 02テーブル公開範囲とアクセス指針
  3. 03インデックス選択と性能の助言
  4. 04移行と列のデフォルト値の規則
  5. 05イベント・スケジュールテーブルの指針

活用シーン

  1. 01SpacetimeDB モジュールのスキーマ設計
  2. 02頻繁なクエリ向けのインデックス選択
  3. 03公開済みテーブルの安全な変更

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/danmossa/spacetimedb-skills --skill spacetimedb-tables

インストール後、Claude Code で/spacetimedb-tablesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
tables-access-permissions.md
tables-auto-increment.md
tables-column-types.md
tables-constraints.md
tables-default-values.md
tables-event-tables.md
tables-file-storage.md
tables-indexes.md
tables-performance.md
tables-schedule-tables.md
tables.md

詳細

モジュールのスキーマとテーブルのパフォーマンスには、このスキルを使用してください。

テーブルの基本パターン

TypeScript のテーブルでは table(options, columns) を使用し、オブジェクトとして schema() に渡す必要があります。

import { schema, table, t } from "spacetimedb/server";

const player = table(
  { name: "player", public: true },
  {
    id: t.u64().primaryKey().autoInc(),
    identity: t.identity().unique(),
    name: t.string().index("btree"),
  },
);

export default schema({ player });

言語ごとのテーブル宣言:

  • TypeScript:{ name: "player_score" } により ctx.db.playerScore が作成されます。
  • C#:[SpacetimeDB.Table(Accessor = "Player", Public = true)] により ctx.Db.Player が作成されます。型は partial である必要があります。
  • Rust:#[spacetimedb::table(accessor = player, public)] により ctx.db.player() が作成されます。pub struct を指定しても、テーブルは公開されません。
  • C++:SPACETIMEDB_TABLE(Type, player, Public) により ctx.db[player] が作成されます。

設計ルール

  • データはアクセス/更新のパターンに応じて整理してください。頻繁に更新されるホットな状態は、変更頻度の低いプロフィール、設定、統計のフィールドから分離してください。
  • 公開テーブルはサブスクリプションを通じてクライアントから参照できます。サーバー専用の状態は非公開にし、必要に応じてビューを通じて派生した一部のデータを公開してください。
  • 主キーと一意制約は自動的にインデックスを作成します。それらに重複するインデックスを追加しないでください。
  • 頻繁に使われる等価検索、範囲検索、サブスクリプション、結合の経路に限ってインデックスを追加してください。デフォルトでは B-tree を使用してください。ダイレクトインデックスは密な符号なし整数キー向けであり、すべての言語でサポートされているわけではありません。
  • 既存の公開済みテーブルに列を追加する場合は、デフォルト値を設定し、末尾に追加する必要があります。既存のスキーマを変更する前に、データベースのマイグレーションルールを確認してください。
  • 自動インクリメント値はデータベースによって生成され、トランザクションの失敗後に欠番が生じることがあります。
  • 追記専用のクライアント通知にはイベントテーブルを使用してください。イベントフラグは公開後に変更できません。
  • スケジュールテーブルには ScheduleAt 列と、リンクされたスケジュール済みリデューサーが必要です。TypeScript では、ScheduleAt を spacetimedb/server ではなく spacetimedb からインポートしてください。

リファレンス一覧

必要な情報開く
テーブル定義と基本パターンreferences/tables.md
アクセス制御references/tables-access-permissions.md
ID とデフォルト値references/tables-auto-increment.md, references/tables-default-values.md
型と制約references/tables-column-types.md, references/tables-constraints.md
インデックス設計references/tables-indexes.md
イベントテーブルとスケジュールテーブルreferences/tables-event-tables.md, references/tables-schedule-tables.md
ストレージとパフォーマンスreferences/tables-file-storage.md, references/tables-performance.md

ガイダンス

  • 既存のスキーマを変更する前に、spacetimedb-databases でマイグレーションへの影響を確認してください。
  • 頻繁に実行されるリデューサーの処理経路や、大きなテーブルに触れる処理経路では、インデックスを使った検索を優先してください。
  • 特に、リデューサーの結果コールバックパターンを置き換える場合は、追記専用のクライアント通知にイベントテーブルを使用してください。

コメント