2016-08-19 68 views
3

我想存儲一個大的json散列(或內容,像你想要的那樣稱呼它),而「大」我的意思是1000個以上的鍵值對,我不想要在該json字段上進行任何搜索,我只想從數據庫中檢索它並將其傳遞給javascript來解析它並構建一個可視結果。什麼數據類型選擇json或jsonb或文本

在Postgresql上有json類型和jsonb類型(也可以使用text字段來存儲json)。我只是想爲此做出正確的選擇,所以我希望有經驗的人提供一些建議。

+1

你的問題不是你沒有發佈代碼,而是你要求什麼類型是最好的意見。 –

+2

@羅伯特哥倫比亞好笑!尋求建議有什麼問題:) – medBo

回答

8

假設你正在談論的實際,嚴格JSON(不怪癖如無引號鍵)...

json是不是從text太大的不同。除了驗證JSON的之外,它沒有太大的作用。

jsonb與以下兩者相比,它是一個不同的野獸:它是一個全面的數據結構,它有自己的內部格式,在搜索中有更多的操作。例如json沒有適用的=(相等運算符)。 jsonb有。 (text也有,即使它在語義上有所不同。)

索引要合理得多,但在讀取和寫入過程中必須來回轉換。

鑑於此,jsonb在這裏看起來不太合適。


...所以只存在一個決定遺令:

你要確保你的數據庫包含在列中唯一有效的JSON值?在數據庫級別?或者您是否相信該數據庫的每個客戶端(通常是服務器應用程序)只提供有效數據?

json是一種相對安全的選擇。使用text理論上可以提高性能的可忽略邊際由於沒有驗證,但你只會得到特定的數字基準。但是它不能保護非JSON值,並且客戶端中的偶然錯誤可能會被忽視。負責任地測試!

+0

我有一個按鈕,當用戶點擊它時,它通過javascript生成json哈希,然後通過ajax發送到數據庫,我不認爲用戶可以在這裏修改某些東西,但甚至如果他這樣做只會影響他的賬戶:) – medBo

+0

所以我覺得在這種情況下文本字段就足夠了! :)大概 – medBo

+0

@medBo。不要忽視自己的軟件中的錯誤的可能性。使用'json'可以保證你無論出於什麼原因都能寫出錯誤的值,比如馬虎的引用。 –

相關問題