我想在 db (mysql) 中存储非常大的序列化 Ruby 对象集。
1) 优缺点是什么?
2) 有没有其他方法?
3)如果对象真的很大,技术难点是什么?
4) 如果对象真的很大,我在序列化和反序列化时会遇到内存问题吗?
最佳答案
优点
- 允许您存储任意复杂对象
- 简化了您的数据库架构(无需表示那些复杂的对象)
缺点
- 使您的模型和数据层复杂化
- 可能需要处理多个版本的序列化对象(对象定义随时间的变化)
- 无法直接查询序列化列
备选方案
正如前面的回答所述,对象数据库或面向文档的数据库可能会满足您的要求。
困难
如果您的对象非常大,则在 DBMS 和程序之间移动数据时可能会遇到困难。您可以通过分离对象数据和与对象相关的元数据的存储来最大限度地减少这种情况。
内存问题
如果对象足够大,内存不足肯定是有可能的。它还取决于您使用的序列化类型。要知道您将使用多少内存,您需要分析您的应用程序。我建议使用 ruby-prof、bleak_house 或 memprof。
我建议尽可能使用非二进制序列化。您不必为整个数据库只使用一种类型的序列化,但这可能会变得复杂和困惑。
如果这是您想要继续的方式,那么使用像 ObjectStore 这样的面向对象的数据库管理系统或像 CouchDB 这样的面向文档的数据库管理系统可能是您的最佳选择。它们经过更好的设计并针对对象序列化。
关于mysql - 在数据库中存储序列化的 ruby 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333160/