2010-02-25 72 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速度非常慢,如果您正在查看複雜的對象,需要大量的處理能力,加載文件並在每次啓動時處理它可能會更快;或者可能以易於加載的方式保存數據。