2010-02-25 79 views
1

我想在db(mysql)中存储非常大的序列化Ruby对象集。在数据库中存储序列化红宝石对象

1)什么是缺点和优点?
2)有没有其他方法?
3)如果物体真的很大,有什么技术难点?
4)如果对象真的很大,我会在序列化和反序列化时遇到内存问题吗?

+0

我想知道“真正的大”意味着什么? – 2012-11-10 00:34:38

回答

4

优点

  • 允许你存储任意复杂的对象
  • 简化您的DB模式(不需要表示这些复杂对象)

缺点

  • Complica TES您的模型和数据层
  • 潜在需要处理序列化对象的多个版本(修改对象随时间的定义)
  • 无力直接查询序列列

替代

由于先前的回答指出,对象数据库或面向文档的数据库可能会满足您的要求。

困难

如果你的对象是相当大的数据库管理系统和程序之间移动数据时,你可能会遇到困难。您可以通过分离对象数据的存储和与对象相关的元数据来最小化这一点。

内存问题

运行内存肯定是有足够大的物体的可能性。它也取决于您使用的序列化类型。要知道您将使用多少内存,您需要分析您的应用程序。我会建议ruby-prof,bleak_house或memprof。


我建议尽可能使用非二进制序列化。您不必为整个数据库仅使用一种类型的序列化,但可能会变得复杂和混乱。

如果这是您想要继续的方式,使用面向对象的dbms(如ObjectStore)或面向文档的dbms(如CouchDB)可能是您的最佳选择。它们更好地设计并针对对象序列化。

2

作为替代方案,您可以使用任何众多的NoSQL数据库。如果你可以序列化你的对象到JSON,那么它应该很容易存储在CouchDB中。

+1

我同意,如果你想存储人类可读的数据,JSON文件序列化会更好。然而,如果你想将objets作为二进制存储,数据库也可以是一个很好的解决方案,并且bin序列化比JSON序列化要快得多。 – 2010-02-25 13:28:27

1

您必须记住,序列化的对象在磁盘空间方面远大于以自己的方式保存序列化对象,并以您自己的方式加载它们。硬盘的I/O速度非常慢,如果您正在查看复杂的对象,需要大量的处理能力,加载文件并在每次启动时处理它可能会更快;或者可能以易于加载的方式保存数据。