MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    已解决 关于AutoSavePluginData存储大数据的方案

    开发交流
    4
    6
    525
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      Michael1015198808 最后由 编辑

      如题,我目前在开发一个Mirai斗地主插件,打算支持数据持久化。对于每个人,打算用PlayerInfo来记录积分、胜场、负场等数据。如果使用AutoSavePluginData的话,当使用人数很多时,对数据的存取开销都会变大,并且对内存的要求也会变高。而实际上,我们在组织一个牌桌时,只需要知道牌桌上的三个人的数据即可。
      所以,想请教一下有没有什么代码层面的奇技淫巧能够规避这个问题,即既能使用AutoSavePluginData提供的自动存取的便利,又能够防止过高的时空开销?(不太想用MySQL之类的数据库,感觉那样会增加复杂度)

      1 条回复 最后回复 回复 引用 0
      • Nekoer
        Nekoer 摸鱼 最后由 编辑

        Redis?

        1 条回复 最后回复 回复 引用 0
        • M
          Michael1015198808 最后由 编辑

          感觉引入Redis会让插件大小变得不必要的大,我好像想到了一个解决方案,稍后尝试一下,如果可行再回来()

          1 条回复 最后回复 回复 引用 0
          • H
            hundun000 ⭐2021⭐ 最后由 hundun000 编辑

            自己拓展AutoSavePluginData,使其读写的实现时按照用户id划分的文件名?

            1 条回复 最后回复 回复 引用 0
            • RainChan
              RainChan 摸鱼 最后由 编辑

              多个文件可能是好办法,不过sqlite也不是很复杂

              1 条回复 最后回复 回复 引用 0
              • M
                Michael1015198808 最后由 编辑

                感谢各位,我最后想了一个多文件的惰性加载的办法。

                class PlayerInfoLoader(playerId: Long): AutoSavePluginData("players/$playerId") {
                    var score: Long by value()
                    var wins: Long by value()
                    var loses: Long by value()
                }
                

                不过这个方法没有加锁,可能存在多线程隐患。
                再次感谢各位,我主要是想找一个语言难度低一点的技巧绕开批量存取的问题,现在这个解决方案对我来说应该算是比较好的了

                1 条回复 最后回复 回复 引用 0
                • 1 / 1
                • First post
                  Last post
                Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact