我想在db(mysql)中存储非常大的序列化Ruby对象集。
1)缺点和优点是什么?
2)有其他方法吗?
3)如果物体真的很大,技术上有什么困难?
4)如果对象真的很大,我会在序列化和反序列化时遇到内存问题吗?
答案 0 :(得分:4)
<强>赞成强>
<强>缺点强>
<强>替代强>
如前所述,对象数据库或面向文档的数据库可能符合您的要求。
<强>难点强>
如果您的对象非常大,则在DBMS和程序之间移动数据时可能会遇到困难。您可以通过分离对象数据的存储和与对象相关的元数据来最小化这一点。
内存问题
对于足够大的对象,肯定会耗尽内存。它还取决于您使用的序列化类型。要知道您将使用多少内存,您需要分析您的应用。我建议使用ruby-prof,bleak_house或memprof。
我建议尽可能使用非二进制序列化。您不必仅为整个数据库使用一种类型的序列化,但这可能会变得复杂和混乱。
如果您希望继续这样做,那么使用面向对象的dbms(如ObjectStore)或面向文档的dbms(如CouchDB)可能是您的最佳选择。它们设计得更好,并且针对对象序列化。
答案 1 :(得分:2)
作为替代方案,您可以使用众多NoSQL数据库中的任何一个。如果您可以将对象序列化为JSON,那么它应该很容易存储在CouchDB中。
答案 2 :(得分:1)
您必须记住,磁盘空间方面的序列化对象远远大于您以自己的方式保存它们,并以您自己的方式加载它们。来自硬盘驱动器的I / O速度非常慢,如果您正在查看复杂对象,这会占用大量处理能力,实际上加载文件并在每次启动时处理它可能会更快;或者以一种易于加载的方式保存数据。