Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 219|回复: 1

[编程求助] [已解决][bukkit求助] 实例量多时序列化如何储存占用少效率高?

[复制链接]
1609089074 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
931
钻石
性别
保密
注册时间
2014-1-3
查看详细资料
发表于 2019-3-1 21:03:01 来自手机 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 1609089074 于 2019-3-5 21:27 编辑

我写了个Device装置类,类似于实体一样绑有Location,虽然实现了ConfigurationSerializable,需要onDisenable时候储存实例 onEnable再调出来恢复实例,但类成员变量比较多,也包含有其他ConfigurationSerializable,而且实例数量很有可能超过50,存yml是不是行数太多占用太大了,除了存yml还有哪些储存占用更少读存效率更高的储存方式吗?读存的内容是 Map<String, Object>好一些还是按json格式转换为一串String更好一点?(不是很了解哪个占用少哪个效率高)
754503921 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
9358
钻石
性别
保密
注册时间
2015-2-24
查看详细资料
发表于 2019-3-1 23:35:17 来自手机 | 显示全部楼层
本帖最后由 754503921 于 2019-3-1 23:43 编辑

首先要明白一点,要存储的数据表现在硬盘里一定会占用大于等于相对应的空间,这个是下限。
图方便而且不介意用数据库,有种东西叫bson,对应有种数据库叫mongodb,存储格式也类似于yaml的键值而不是mysql的表,大概可以满足你的需求。

如果要尽可能的压缩空间还要追求效率,假如你的数据非常有格式(或者你不介意多造一些轮子),你可以直接存二进制数据,做得好的话效率和空间都可以达到很高。
写二进制数据的话,bukkit使用的netty库提供了一些工具帮你更简单的规划数据,我给一个小例子,希望可以抛砖引玉(代码做了适当简化)


这种写法的空间利用很好,不多用任何空间,效率也很高,但是如果后期你的数据发生了变化,那么会多很多工作才能保证兼容(比如在序列化开始之前写一个版本号)

至于如果说要用json存,其实某种意义上只是另一种yaml,性能不会有太大变化。



手机打字不易,有缺漏谬误在所难免,请谅

评分

参与人数 1人气 +1 金粒 +10 收起 理由
1609089074 + 1 + 10 非常感谢大佬指点!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | | 手机版

GMT+8, 2019-5-24 17:26 , Processed in 0.030410 second(s), Total 10, Slave 8 queries , Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。
本站与Mojang以及微软公司没有从属关系。

© 2010-2019 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表