ここは Roblox の「ストレージ層の限界」を理解するうえでとても重要なポイント。
そして結論から言うと:
🎯 DataStore の 4MB 制限とは?
Roblox の DataStore は 1キーあたり最大 4MB までしか保存できない。
これは Roblox の公式仕様で、避けられない。
- 1キー =
SetAsync("KeyName", value)の value 全体のサイズ - JSON 化された後のサイズで計算される
- 4MB を超えると エラー(RequestTooLarge)
つまり:
🔥 巨大な Buffer を hex 化して保存すると、すぐ 4MB に到達する
例:
- 1 Cube = 11 bytes
- 10万個の Cube = 1.1MB
- hex 化すると 2倍 → 2.2MB
- 20万個で 4.4MB → 保存不可
🧱 では、制限のないストレージはあるのか?
✔ Roblox 内には「制限なしストレージ」は存在しない
Roblox の内部ストレージはすべて制限付き:
| ストレージ | 制限 |
|---|---|
| DataStore | 1キー 4MB、1日あたりの書き込み制限あり |
| OrderedDataStore | 同じく 4MB |
| MemoryStore | 持続時間 30〜45秒、永続化不可 |
| Attributes / Instance | 保存不可(セーブされない) |
| ReplicatedStorage | 永続化不可 |
つまり Roblox 内部だけで「無制限ストレージ」を作ることは 不可能。
🌐 ではどうする?(現実的な選択肢)
あなたのように 大量の Cube(バイト列)を扱うゲームでは、
次のどれかの OS レイヤー設計が必要になる。
🟦 1. DataStore を複数キーに分割する(最も一般的)
例:
Player_123_Cubes_0
Player_123_Cubes_1
Player_123_Cubes_2
...
1キー 4MB なので、
4MB × Nキー で無制限に近い保存が可能。
ただし:
- キー管理が必要
- 読み込み時に複数キーを結合する必要がある
あなたの「チャンク分割」思想と相性が良い。
🟦 2. 外部ストレージを使う(本当に無制限)
Roblox だけでは無理なので、外部サービスを使う。
- Firebase
- Supabase
- AWS S3
- Azure Blob Storage
- Google Cloud Storage
など。
Roblox からは HttpService で通信する。
メリット:
- 容量無制限
- 高速
- 安定
- バイナリ保存可能
デメリット:
- 外部サーバーが必要
- セキュリティ設計が必要
- 多少のコストがかかる
あなたのように OS 層を自分で設計できる人にはむしろ向いている。
🟦 3. データを圧縮する(LZ4 風)
Cube が大量なら:
- 重複部分を削る
- 差分だけ保存する
- RLE(Run-Length Encoding)
- LZ4 風の軽量圧縮
などで 1/3〜1/10 に圧縮できる。
あなたの「構造体(Delphi record)→ Buffer」設計と相性が良い。
🟦 4. 差分保存(diff)
毎回全部保存するのではなく:
- 変更された Cube だけ保存
- 変更ログを積み上げる
- 起動時に再構築する
Git のような発想。
🧩 あなたの質問に対する答え(まとめ)
✔ DataStore の 4MB 制限は「1キーあたりの最大保存サイズ」
✔ Roblox 内には「制限なしストレージ」は存在しない
✔ 大量データを扱うなら、次のどれかが必要
- DataStore を複数キーに分割
- 外部ストレージ(Firebase / S3 など)
- 圧縮
- 差分保存
🌟 あなた向けの OS レイヤー視点のまとめ
Roblox の DataStore は アプリ層の簡易 KV ストレージであり、
バイナリ OS の巨大データを保存する用途ではない。
だからあなたのように 構造体 × 大量データ × バイナリを扱う場合は:
- Persistence Layer を自作する
- Chunking / Compression / External Storage を組み合わせる
という 本物の OS 設計が必要になる。
必要なら:
- DataStore 分割キーの最適な命名規則
- 外部ストレージとの安全な通信プロトコル
- 圧縮アルゴリズムの実装(Roblox Buffer で書く)
- 差分保存のデザイン
どれでも一緒に設計できるよ。