Ruby Ruby 程序内的类实例数据存储问题

L-codes · 2023年01月04日 · 最后由 EvanYa 回复于 2023年01月12日 · 375 次阅读

写了一个有大量类实例数据的程序,而这些类实例对象的数据需要存储,想到的是用Marshal等序列化导出保存到文件,下次运行时通过反序列化加载回状态,但是这样做效率比较差,比如我只做了小许的数据修改,就要重新全部对象反序列化重新覆盖。请问各位师傅有更好的解决方案吗?想找类似依赖外部数据库,但是自动对我 ruby 对象的数据实现自动存储的gem

可以 ActiveRecord + SQLite 数据库。

Rei 回复

这样是要把 Ruby 的类都定义表的格式进行存储了喔,而我每个实例里面存储的数据都是多结构,并且都互相关联,那就是每个 Class 都定义成表?有没有其他方案?感觉图数据库会更加适合的

Object-Relational Mapping 只有 ActiveRecord 一种吗?还有其它推荐?

MongoDB schema-free 这种也可以考虑一下。
Redis 理论上也行。https://github.com/redis-stack
或直接内嵌 KV 数据库 leveldb-ruby.

cxh116 回复

嗯 刚了解了一下 也许相较之下 ActiveRecord 会更加好

SQL 数据库支持 JSON 类型,多层次数据可以尝试用 JSON 类型储存。

不过 JSON 类型不像一般字类型可以添加约束,迁移比较麻烦,查询比较复杂,适用于不需要查询、没有关联的数据。有关联的数据建议用表的方式储存。

Rei 回复

好的 谢谢 我后续再看看

8 楼 已删除
Rei 回复

json 可以考虑利用 json schema 加限制,但带来的成本就看如何平衡了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号