关于客户端的数据存储

2022-01-05 09:55:36 +08:00
 jhqz103

现在有个需求: 1 、本地存储 20w 条左右的数据 2 、一条数据大概有 20 个左右的字段,全部都是数字 3 、本身是用 Unity 开发,希望能够跨端方案 希望能够有较快的写入和读取速度,同时体积尽量小 请问除了 Sqlite 有其他更好的方案吗?

3086 次点击
所在节点    程序员
36 条回复
chashao
2022-01-05 12:55:32 +08:00
每一局游戏给个 guid 表示,然后写入 guid 为文件名,内容是这一句状态的小文件里,不过不知道你需要怎么查。。
Harry
2022-01-05 13:34:14 +08:00
依然使用 SQLite ,它的读写速度快,而且稳定性上要比其他数据库高出非常多。

因为 SQLite 是文件数据库,所以你没有必要把很多数据都 塞到同一个 SQLite 数据库里。你可以 ① 根据业务分类;② 根据数据的读写频率;③ 只读 还是 读写 把数据归类一下。使用多个 SQLite 数据库。

这个方案可能最优。
jhqz103
2022-01-05 13:41:24 +08:00
@vstar 自己做着玩哈哈,又不是工作
jhqz103
2022-01-05 13:44:28 +08:00
@Soar360 是的,我看都是说开启事务来优化写入速度。不过我这边目前还是很慢,如果大方向(使用 sqlite )没错的话,我就继续研究下为何慢就行了
jhqz103
2022-01-05 13:45:31 +08:00
@Huelse 是全量读写的,所以我两个都试试,看看哪种适合哈,谢谢
jhqz103
2022-01-05 13:46:22 +08:00
@chashao 这个可以的,不过主要是很多局游戏都要同时查,如果分的太多,同时读感觉也不好
jhqz103
2022-01-05 13:49:46 +08:00
@Harry 先谢谢哈。我也有在考虑分多个,不过确实有两点是用 sqlite 有点大才小用的,一个是不会出现局部更改,一个是可能会比较频繁出现全局读
sunny352787
2022-01-05 14:09:18 +08:00
@jhqz103 按你的需求,应该用不上 sqlite ,sqlite 在 Unity 里使用起来比较麻烦,推荐你用 nosql

https://github.com/rejemy/UltraLiteDB
https://www.iboxdb.com/

这两个都是免费的 Unity 可以用的嵌入 nosql ,性能都不错,LiteDB 开源 iBoxDB 不开源,挑一个用就是了

不过要是我做的话,对于你的这个情况我可能直接存文件了,dump 内存或者 protobuf 。你这个是要存游戏帧录像做回放的吧?那就直接存文件最好
sunny352787
2022-01-05 14:12:31 +08:00
使用 sqlite 确实会慢,因为会同步写 IO ,这种情况用什么数据库都一样,要么改成异步存,要么就别存数据库直接逐条写文件,如果没有强记录需求只是想做回放的话,战局结束之后统一存文件是最好的方式。
hanxiV2EX
2022-01-05 14:15:47 +08:00
https://github.com/Tencent/MMKV

这个号称性能很强的 kv 数据库呢?
sunny352787
2022-01-05 17:55:31 +08:00
@hanxiV2EX Unity 没法用,或者说很难使用
cssk
2022-01-05 18:03:23 +08:00
@jhqz103 # transaction 很快
jhqz103
2022-01-05 18:32:53 +08:00
@sunny352787 非常感谢分享的链接,我试试效果怎么样。结束统一记录跟异步这个还是会做的,毕竟是比较通用的优化
jhqz103
2022-01-05 18:33:31 +08:00
@cssk 好的,估计是我现在使用的姿势有问题,我研究下
netnr
2022-01-05 19:04:53 +08:00
经简单测试 SQLite 事物写入几万条数据比 MySQL SQLServer 批量插入 更快
另外 LiteDB Fir...DB 容易造成文件损坏,SQLite 经得住各种摧残
jhqz103
2022-01-06 10:05:12 +08:00
@netnr 啊这。。我昨天暂时还没发现损坏,不过 sqlite 我试了下,事务一次插入 5000 条数据还是很快的。所以速度差距不大的情况下,估计 sqlite 还是优先

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX