2011-01-06 36 views
1

我需要創建一個包含分層數據集的文件。所討論的數據集是一個文件系統列表(每個目錄中的目錄名,文件名/大小,子目錄,...)。用於分層數據集的高效可移植數據庫 - Json,Sqlite或?

我的第一直覺是使用JSON和使用路徑扁平化層級,所以解析器不必遞歸這麼多。如下面的例子所示,每個條目都是一個路徑(「/」,「/ child01」,「/ child01/gchild01」,...)以及它的文件。

{ 
    "entries": 
    [ 
     { 
      "path":"/", 
      "files": 
      [ 
       {"name":"File1", "size":1024}, 
       {"name":"File2", "size":1024} 
      ] 
     }, 
     { 
      "path":"/child01", 
      "files": 
      [ 
       {"name":"File1", "size":1024}, 
       {"name":"File2", "size":1024} 
      ] 
     }, 
     { 
      "path":"/child01/gchild01", 
      "files": 
      [ 
       {"name":"File1", "size":1024}, 
       {"name":"File2", "size":1024} 
      ] 
     }, 
     { 
      "path":"/child02", 
      "files": 
      [ 
       {"name":"File1", "size":1024}, 
       {"name":"File2", "size":1024} 
      ] 
     } 
    ] 
} 

然後我覺得每個文件類型的吸盤重複鍵(「名稱」,「大小」)。所以我發現這篇文章關於如何使用Json,就好像它是一個數據庫 - http://peter.michaux.ca/articles/json-db-a-compressed-json-format

使用該技術,我會有一個Json表,如「Entry」,列「Id」,「ParentId」,「EntryType」 「名稱」,「文件大小」,其中「EntryType」對於目錄爲0,對於文件爲1。

所以,在這一點上,我想知道,如果sqlite的將是一個更好的選擇。我在考慮文件大小比Json文件小很多,但是如果我從文章中使用Json-DB壓縮格式,文件大小可能可以忽略不計。除了規模之外,您還能想到其他任何優勢嗎?

回答

2

我認爲對於數據源JavaScript對象,加載文件流進瀏覽器,然後在使用JavaScript邏輯在瀏覽器中會消耗最少的時間,都有不錯的表現..但只有等到內容的層次有限尺寸。

而且,不存儲層次其他地方,並保持它只是作爲一個JSON文件嚴重限制了數據源的使用在項目中的客戶端技術..或力量轉換成其它技術。

如果您正在構建一個純粹的基於JavaScript的應用程序(html,js,css only應用程序),那麼您可以將其保留爲JSON對象,並限制您的層次結構大小..您可以將更大的層次結構拆分爲多個文件鏈接json對象。

如果你將擁有服務器端的代碼,如PHP,在您的項目, 考慮的代碼managebility和縮放,您應儲存在的SQLite數據庫中的數據,在運行時創建的水平有限,隨着Ajax加載你的JSON層次從你的頁面。

1

如果這是你的應用程序商店,那麼你可以做很簡單的東西像剛纔的數據存儲在一個簡單的解析的唯一數據/讀取的文本文件是這樣的:

File1:1024 
File2:1024 
child01 
    File1:1024 
    File2:1024 
    gchild01 
     File1:1024 
     File2:1024 
child02 
    File1:1024 
    File2:1024 

文件獲取文件:大小和目錄只是他們的名字。縮進給出結構。對於稍微更標準但更容易閱讀的內容,請使用yaml。

http://www.yaml.org/

兩者都可以從減小文件大小受益(但降低用戶可讀性)由gzip壓縮該文件。

如果你有更多的數據要存儲,那麼使用SQLite。 SQLite很棒。

請勿將JSON用於數據持久性。這是浪費。