2012-08-03 89 views
0

我工作的那個項目保存/恢復JSON-type字符串到數據庫。操縱JSON List和Map在Java中

一切工作正常,即保存和更新是針對類型String,Number and Boolean安全的,但對於List and Map,我想看到的是操作列表和地圖的安全方法,當數據來自來回數據庫尤其是當項目上列表變大,即上千項,譬如說的「朋友」和「追隨者」

處理一個JSON List或Java中Map的時候我也很關注潛在的數據損壞名單。

什麼是更新使用JSON.Simple庫而不是加載在內存中的一切(每個項目)的列表和地圖安全的方式。

比如我只需要存儲在數據庫中的JSON字符串列表中插入一(1)項目。

+0

我在您的帖子的任何地方都沒有看到任何問題。你可以說得更詳細點嗎? – 2012-08-03 12:26:47

+0

更新我的問題 – xybrek 2012-08-03 12:30:00

回答

1

JSON不適合ORM(對象關係映射)。這就是NoSQL數據庫將JSON存儲爲文檔(即整個事物)的原因。因此,JSON.Simple不支持延遲加載部分JSON結構。

關係數據庫不很好地映射JSON(除原語)的同時注意到,因爲對於List自然的數據結構是一個1:N映射,其中該列表的類型有一個索引列(即,在該元件的位置列表),而Map需要N:M映射。

所以一個更好的解決方案可能是將整個JSON字符串存儲在CLOB中(而不是試圖將其分開)或將整個JSON字符串保存在CLOB中提取幾個關鍵字段以便可以正確索引數據。

但是當你使用JSON工作,你將不得不編寫自己OR映射器支持JSON陣列和地圖的延遲加載,否則將有充分的時間來閱讀整個結構到RAM中。

+0

嚴,延遲加載可能是解決方案,順便說一句,我沒有實際使用任何關係數據庫,而是AppEngine上數據存儲(BigTable的) – xybrek 2012-08-03 16:23:34

+0

的數據存儲確實是一個類型的NoSQL數據庫的,但不是一個真正的「鍵值存儲」,這是我想填寫的內容。主要是因爲它的關鍵是從幾個類的類型自動生成的,包括實際的實體(或POJO) – xybrek 2012-08-03 16:26:49

+0

也許你應該問一個新的問題:「什麼將這個JSON存儲在BigTable中是一種好方法嗎?「並提及結構是什麼以及你的查詢將會是什麼。 – 2012-08-06 07:35:31