デアゴ管理アプリ制作 第2弾 隣の田所さん 94-95日目

この2日間はサーバ側データの保存形式を決めていました。

以下、私の開発用メモになってしまっている部分が多々あります。

意味不明でしたらごめんなさい。

     -ーー ,,_
   r'”      `ヽ,__
   \       ∩/ ̄ ̄ ヽつ
  ノ ̄\ /”ヽ/ ”   ノ   ヽi
 |  \_)\ .\    >  < |\スマソ
 \ ~ )     \ .\_  ( _●_)\_つ
    ̄       \_つ

サーバ側で保存すべき主なデータは3つです。

1.土地データ
2.設置アイテムデータ
3.プレーヤーデータ

それぞれの詳細は以下の通りです。

1.土地データ

1つのブロックを1バイト(0〜255)で持つこととします。

1区画を、7×7×7と定め、この単位で各プレーヤーが”支配”可能です。1区画のデータ量は7×7×7=343バイトに加え、支配者識別IDの32バイトを加えて合計375バイトになります。

区画数は、縦方向(y軸)に10、横方向(x軸とz軸それぞれ)に4294967296(4バイト)あり、論理上の合計区画数は1.844674407370955e20個となります。

DBは読み書きが遅いので、データはバイナリファイルに保存します。区画の位置を元に、ファイル名はN-N-N.landとします。

世界の中心の区画を0-0-0区画として、0-0-0〜9-9-9区画(1000個の区画)のデータを”0-0″ディレクトリに格納します。0-10-0〜9-19-9区画のデータを”0-10″ディレクトリに格納します。10-0-0〜19-9-9区画のデータを”10-0″ディレクトリに格納します。10-10-0〜19-19-9区画のデータを”10-10″ディレクトリに格納します。マイナス10-マイナス10-0〜マイナス1-マイナス1-9区画のデータを”m10-m10″ディレクトリに格納します。

このような形で読み書きしたい区画データファイルをディレクトリで分類し、素早くアクセス可能にします。

尚、区画データ内の支配者IDは横方向(x軸とz軸)で一意に決まります。つまり縦方向(y軸)で支配者IDが変わることはありません。天井/地下方向とも戦うのは辛いですからね。東西南北4方向と戦います。

2.設置アイテムデータ

・アイテムID [2バイト]
・設置位置 [3バイト]
・設置状態[1バイト]

上記6バイト×設置数

区画の位置を元に、ファイル名はN-N-N.itemとします。保存ディレクトリは対象区画データと同じです。

3.プレーヤーデータ

・プレーヤー名 [64バイト]
・HP [2バイト]
・プレーヤー位置[1バイト+1バイト+1バイト=3バイト]
・所持アイテム [アイテムID2バイトを各最大数量255で最大64個所持=181バイト]

合計 [250バイト]

保存ファイル名は”ログインID.ply”です。保存ディレクトリはプレーヤーが存在する区画に基づきます。プレーヤー名が重複した場合は、○○区画の○○などと表示して区別します。

クライアント側にはログインID(GUID的なIDを自動生成)と区画位置、編集した区画データを保持します。

一意なIDでの重複チェックなどが必要ないデータ構造のため、区画毎に別サーバに分割可能で、サーバ数に応じてリニアに計算/通信性能向上可能です。

将来的に不足などが生じたら都度修正します。

コメントを残す

メールアドレスが公開されることはありません。