写了一个有大量类实例数据的程序,而这些类实例对象的数据需要存储,想到的是用Marshal等序列化导出保存到文件,下次运行时通过反序列化加载回状态,但是这样做效率比较差,比如我只做了小许的数据修改,就要重新全部对象反序列化重新覆盖。请问各位师傅有更好的解决方案吗?想找类似依赖外部数据库,但是自动对我 ruby 对象的数据实现自动存储的gem
Marshal
gem
可以 ActiveRecord + SQLite 数据库。
这样是要把 Ruby 的类都定义表的格式进行存储了喔,而我每个实例里面存储的数据都是多结构,并且都互相关联,那就是每个 Class 都定义成表?有没有其他方案?感觉图数据库会更加适合的
Object-Relational Mapping 只有 ActiveRecord 一种吗?还有其它推荐?
MongoDB schema-free 这种也可以考虑一下。 Redis 理论上也行。https://github.com/redis-stack 或直接内嵌 KV 数据库 leveldb-ruby.
嗯 刚了解了一下 也许相较之下 ActiveRecord 会更加好
SQL 数据库支持 JSON 类型,多层次数据可以尝试用 JSON 类型储存。
不过 JSON 类型不像一般字类型可以添加约束,迁移比较麻烦,查询比较复杂,适用于不需要查询、没有关联的数据。有关联的数据建议用表的方式储存。
好的 谢谢 我后续再看看
json 可以考虑利用 json schema 加限制,但带来的成本就看如何平衡了