已解决 关于AutoSavePluginData存储大数据的方案
-
如题,我目前在开发一个Mirai斗地主插件,打算支持数据持久化。对于每个人,打算用
PlayerInfo
来记录积分、胜场、负场等数据。如果使用AutoSavePluginData
的话,当使用人数很多时,对数据的存取开销都会变大,并且对内存的要求也会变高。而实际上,我们在组织一个牌桌时,只需要知道牌桌上的三个人的数据即可。
所以,想请教一下有没有什么代码层面的奇技淫巧能够规避这个问题,即既能使用AutoSavePluginData
提供的自动存取的便利,又能够防止过高的时空开销?(不太想用MySQL之类的数据库,感觉那样会增加复杂度) -
Redis?
-
感觉引入Redis会让插件大小变得不必要的大,我好像想到了一个解决方案,稍后尝试一下,如果可行再回来()
-
自己拓展AutoSavePluginData,使其读写的实现时按照用户id划分的文件名?
-
多个文件可能是好办法,不过sqlite也不是很复杂
-
感谢各位,我最后想了一个多文件的惰性加载的办法。
class PlayerInfoLoader(playerId: Long): AutoSavePluginData("players/$playerId") { var score: Long by value() var wins: Long by value() var loses: Long by value() }
不过这个方法没有加锁,可能存在多线程隐患。
再次感谢各位,我主要是想找一个语言难度低一点的技巧绕开批量存取的问题,现在这个解决方案对我来说应该算是比较好的了