簡體   English   中英

JSON服務器端數據存儲文件有哪些缺點?

[英]What are the drawbacks to a JSON server-side data storage file?

我在尋找替代的數據存儲方法,SQL( 也就是說,我不想使用SQL,甚至查詢 )和跨基於JSON幾個來了。 與做數據庫工作的朋友交談,他們說我不應該考慮這些,但不會詳細說明。 使用JSON作為數據存儲文件格式有 哪些潛在的 (和實際的) 缺點


由於以下原因,我認為JSON比SQL 更好

  1. JSON是嚴格定義的 ,沒有風味(Oracle,Microsoft,MySQL等)
  2. 自谷歌開始制作Chrome以來,JS解釋器已經使閱讀,解析和輸出JS(以及JSON)成為一個非常 快速和簡單的過程。
  3. 數據庫輸出可以是純JSON ,從而消除了對瀏覽器等中間人口譯員的需求。

其中......

JSON或JavaScript Object Notation是一種開放標准格式,它使用人類可讀的文本來傳輸由屬性 - 值對組成的數據對象。 它主要用於在服務器和Web應用程序之間傳輸數據,作為XML的替代方案。

您更關注數據庫與平面文件存儲之間的比較。

我想你可能想看看NO-SQL數據庫: https//en.wikipedia.org/wiki/NoSQL

如果您喜歡使用類似JSON的數據,那么我個人使用的是MongoDB。

我沒有將它用作我的應用數據的主要/單一來源,但僅用於次要目的。 但是,我想,您也可以嘗試將其用作主要數據存儲(我想很多人都這樣做)。

我嘗試過並且非常令人滿意的是使用C#的MongoDB並使用MongoVue作為GUI應用程序來執行查詢和與DB的交互。 我對MongoVUE不是很滿意,但它似乎是當時最好的選擇。

但是,SQL DB非常擅長定義數據中的關系。 例如,從表B上的條目引用表A上的條目,以及那種東西。 使用這些關系,您可以連接表並執行許多有趣的事情。 我想,你也可以在這個領域獲得一些經驗。

MongoDB不是為定義關系而構建的(據我所知)。 它具有“文檔”的概念,您可以使用JSON格式(使用嵌套鍵/值)存儲信息。 您可以查詢文檔,但加入似乎就像正常使用方式一樣: 如何在MongoDB中執行SQL Join等效操作? 此外,在MongoDB中使用關系時,確保數據一致性(以真正可靠的方式)對我來說似乎是不可能的。 但即使我錯了也有可能,實現它比使用SQL DB要困難10倍。

但是您可以查看WikiPedia中的列表,並且可能有比MongoDB更好的替代方案。

但是你可以使用純JSON而不使用DB系統。

因此,總之類似JSON的存儲(至少)存在以下問題:

  • 不善於定義和利用關系
  • 使用關系時,數據完整性(或更可能是參考完整性)很難。
  • 如果您沒有使用良好的數據庫系統,但只是將JSON轉儲到文件中,當該文件變得太大時,您將遇到性能問題。 想象一下,查詢1GB JSON編碼的對象數組,以獲得您想要的對象。 你必須在內存中加載整個數組,運行整個數組(因為你沒有索引),然后(如果你沒有內存耗盡,你的連接 - 當使用網絡時 - 沒有過期)你會得到一個結果。 大多數NO-SQL數據庫(如MongoDB和大多數SQL數據庫)都沒有這樣的問題(至少在合理的數據量內)。 它們經過微調,它們支持索引,引用,權限和角色,您還可以在數據庫級別定義執行代碼(如觸發器和存儲過程)。 當然它們更復雜,但是為了達到最終結果,大多數時候可能需要這種復雜性。

即使使用關系數據庫,數據完整性(或參照完整性)仍然很難,因為行通常帶有時間戳。 通常,外鍵不會因此而強制執行。 當發生行更新時,您有2個選擇。 首先,'忘記'以前的版本。 其次,更新原始行並將先前版本復制到帶時間戳的“非關系”歷史表中,其中外鍵無效。 大多數業務數據需要更新。 用於維護關系數據庫中的引用完整性的功能對於此類業務數據(代表大多數企業數據)是無用的。 所需要的是時間數據庫或抽象層,其基於時間上下文向用戶呈現行的適當版本。 理想情況下,在2個維度,即交易時間和業務時間(也稱為有效時間)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM