2011-12-31 71 views
1

我有一個我需要在本地存儲的字符串列表(假設列表可以在10個項目到100個項目之間運行)。我想知道是否應該將列表寫入Flat數據庫或使用Serialization將包含列表的對象展平?哪個更昂貴(CPU方面)?有什麼條件使一個比另一個更昂貴?在Java中什麼更昂貴?序列化或寫入文件?

謝謝!

+7

爲什麼不嘗試一下和標杆? – 2011-12-31 21:28:59

+1

更好,爲什麼不看其他要求,看看最適合他們的東西?這兩種選擇傾向於在不同的情況下使用......如果與合作是一種痛苦,誰會關心什麼更快? – cHao 2011-12-31 21:32:35

+2

如果你只寫了10-100個字符串,你甚至可能看不到任何區別。你爲什麼如此關心這樣一個小數據集的性能?如果不符合您的要求,請使用最簡單的解決方案並進行更改。 – milan 2011-12-31 22:18:31

回答

0

我有我需要在本地存儲的字符串列表(假設列表可以在10個項目之間運行到100個項目)。

假設串的總長度小(例如,小於10K),用於執行保存在用戶空間的CPU時間很可能是使用任一序列或平面文件幾毫秒。換句話說,用戶不會注意到其中的差異。

你應該看其他原因兩個選擇(和其他人)之間進行選擇:

  • 有多容易寫代碼。

  • 很多額外的依賴關係如何在保存的數據文件。

  • 易讀/可編輯的替代拉...如果你需要做到這一點。

  • 如果您需要更改保存到文件中的內容的「架構」,這將會變得多麼容易/困難。

  • 是否可以在不重寫整個文件的情況下更新一個字符串......如果這是相關的。

  • 支持其他事情,如原子更新,交易,複雜的查詢等...如果這些是相關的。


如果,儘管上面我說,你還是想知道,這將是更快(多少)​​,那麼基準它。真實世界的表現將取決於您未指定的因素。

以下是關於如何編寫Java基準以提供有意義的結果的幾個重要參考。

而且你可以嘗試回答你的問題,這部分:

什麼是讓比一個更昂貴的條件其他?

(見上文)

0

我不確定費用,但我相信因爲對象表示很多次都包含大量元數據(和結構),這可能導致創建比原始預期數據大的大對象大小。 示例對此可能是當您在DOM對象中存儲xml結構時 - 內存大小比原始數據大約大4倍。

基於上述,我認爲序列化作爲一個對象可能會更昂貴。您可能還想考慮最終產品的消耗。如果你想要生成的文件是人類可讀的,你將不得不序列化字符串數據的可讀性。

1

尤其是因爲它們是字符串,只需將它們每行寫入一個文件即可。簡單,快速,而且更容易測試。