-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
データベース (データの保存方法) #9
Comments
CompoundTag にするメソッド (メモ) |
co_block_log
epoch bigint NOT NULL, <- Instant.now().getEpochSeconds()
nano int NOT NULL, <- Instant.now().getNano()
PRIMARY KEY(epoch, nano)
action tinyint NOT NULL, // <- source code defined
cause int NOT NULL, // <- co_cause.id
wid int NOT NULL, // <- co_world.id
x int NOT NULL,
y int NOT NULL,
z int NOT NULL,
block bigint index NOT NULL, // <- co_block.id
rolled_back tinyint NOT NULL DEFAULT 0
co_cause
id bigint NOT NULL autoincrement PRIMARY KEY,
causeblock int, <- co_block.id
causeentity int, <- co_entity.id
co_block
id bigint NOT NULL autoincrement PRIMARY KEY,
material int NOT NULL,
state varchar(300),
data mediumblob
co_material
id int NOT NULL autoincrement PRIMARY KEY,
namespace varchar(50) NOT NULL DEFAULT 'minecraft'
key varchar(50) NOT NULL,
UNIQUE(namespace, key)
co_entity_log
epoch bigint NOT NULL, <- Instant.now().getEpochSeconds()
nano int NOT NULL, <- Instant.now().getNano()
PRIMARY KEY(epoch, nano)
action tinyint NOT NULL, // kill, pickup(dropped item), throw(dropped item), place(armorstand, art, item frame)
cause int NOT NULL, <- co_cause.id
wid int NOT NULL, // <- co_world.id
x int NOT NULL,
y int NOT NULL,
z int NOT NULL,
entity int NOT NULL, <- co_entity.id
rolled_back tinyint NOT NULL DEFAULT 0
co_entity
id bigint NOT NULL PRIMARY KEY,
type int NOT NULL, <- source code defined?
nbt mediumblob NOT NULL, // if type == player nbt = uuid
co_world
id int NOT NULL PRIMARY KEY,
name varchar(50) NOT NULL unique
co_coreprotect
databaselock tinyint NOT NULL DEFAULT 0
minecraftversion varchar(64) NOT NULL |
昨今の CP のデータベースサイズの激増を踏まえた意見
|
テーブル名 | 1行あたりのデータサイズ (bytes) | 現行のサイズ |
---|---|---|
co_block_log2 | 42 | 42 + mblob + blob |
co_cause | 16 | |
co_block | 12 + varchar(300) + mblob | |
co_material | 4 + varchar(50) * 2 | 8 + varchar(255) |
co_entity_log2 | 42 | 42 + mblob + blob |
co_entity | 12 + mblob | 8 + blob |
co_world | 4 + varchar(50) | 8 + varchar(255) |
その他疑問点
co_world
- ワールド名ではなくネームスペースで管理するべき?co_container
などのコンテナ操作はどのテーブルで行う?
Footnotes
-
整数型のストレージサイズについては 11.1.2 整数型 (真数値) - INTEGER、INT、SMALLINT、TINYINT、MEDIUMINT、BIGINT
を元に算出。varchar
やmediumblob
(mblob
) はデータによって異なるため無視。 ↩ -
nano
を削除しautoincrement bigint
のid
導入やwid
のsmallint
化を施した場合、44 bytes になる。 ↩ ↩2
ちなみに上に上がってるデータベーススキーマはWIP 概ね賛成
それぞれで当然に違うデータ、例えばUUIDとかkeepalive、posなんかの情報を消すようにして、データベースに同じエンティティがいたらidを流用すれば効率的かもしれない
となると、materialを消してnamespacesテーブルを作り、保存したネームスペースをblockとworldテーブルで共有する?
迷いどころ |
No description provided.
The text was updated successfully, but these errors were encountered: