7

假設我的應用程序創建,存儲和檢索了大量的條目(數千萬)。每個條目具有不同數量的不同數據(例如,某些條目只有幾個字節,例如ID /標題,而一些條目可能有兆字節的補充數據)。每個條目的基本結構是相同的並且是XML格式。創建存儲大量數據:數據庫或文件系統?

條目和編輯(最有可能通過附加,不重寫)任意。

是否有意義存儲在文件系統中的條目作爲單獨的文件,同時保持索引的需要套在DB與在DB節省一切嗎?

+0

你不需要快速的東西:file sys;你需要的東西很快:數據庫 – 2013-05-13 04:52:41

回答

4

這實際上取決於你將如何使用它。數據庫可以處理比大多數人想象的表中更多的條目,特別是適當的索引。另一方面,如果您不打算使用關係數據庫提供的功能,則可能沒有太多理由使用它。

好的,足夠一般化。鑑於數據庫最終歸結爲「磁盤上的文件」,我不會過多擔心「正確的做法」是什麼。如果數據庫的主要目的只是爲了有效地檢索這些文件,我認爲將數據庫條目保持較小並查找文件路徑而不是實際數據會非常合適 - 尤其是因爲您的文件系統在檢索數據時應該非常高效給定一個特定的位置。

在你感興趣的情況下,這實際上是對搜索引擎的通用數據存儲模式 - 該指數將索引數據的指針存儲的數據存儲在磁盤上,而不是存儲在索引中的一切。

3

我會絕對存儲文件系統上的數據散列數據庫中的路徑。

1

,這具體取決於您的成本,MS SQL Server有什麼叫做「主XML索引」,它可以創造,甚至在非結構化數據。這使您可以編寫XQuery來搜索列,數據庫將爲您提供幫助。

如果有任何的相干性的所有數據,或者它可以被放入一個模式,那麼你可能會看到這樣的好處。

我可能會建議,如果你有大量的二進制數據,如圖像等,是你帶這些拉出並放在別的地方,如文件系統。或者如果您使用2008,則有一種稱爲「Filestream」的類型(歡呼@Marc_s),它允許您索引,存儲和保護您記下的所有文件,並使用NTFS API檢索它們(即快速塊傳輸)保存爲數據庫中的列。

如果您的應用程序對XML數據的搜索提出了很高的要求,這意味着您不需要,那麼擁有數據庫可能會爲您提供一個良好的抽象層和擴展層。

只是我的2C。

+0

SQL Server 2008數據屬性實際上稱爲** FILESTREAM **。它本質上並不是一種類型 - 它可以添加到「VARBINARY(MAX)」列中的一個屬性 – 2010-01-16 22:39:10

1

在工作中,我經常需要積累大量的XML文檔以供日後分析。通常,這是通過將它們粘貼到一個目錄中完成的,並且分析由grep(或具有其所有XML工廠/構建器/包裝器/ API附件)的定製Java程序完成。

緩慢的一天,我想我會嘗試把它放在PostgreSQL中。有兩個我想要嘗試的功能:

  • 適當時自動壓縮大數據(TOAST)。
  • 使用表達式進行索引。

關於第一個特徵,數據庫大小小於原始文件大小的一半。進行全文搜索時,使用WHERE data::TEXT LIKE '%pattern%'進行表掃描實際上比在文件上運行grep更快。當你處理幾GB的XML時,這僅僅使得DB值得。

第二個功能,索引,是一個更多的工作來維護。我猜測有幾個特定元素可以很好地進行索引。 xpath('//tradeHeader/tradeId/text()', data)上的索引有效,但在每個查詢中複製可能很痛苦。我發現爲某些字段添加普通列更容易,並使用插入/更新觸發器保持同步。

+0

除了FS中存儲的XML /媒體文件之外,如何將只包含可搜索文本內容的表格? – 2010-01-18 20:42:25

+0

@Logistetica:我不太清楚你的意思。你的意思是把主文件放在FS中,而只是把元數據放在DB中? (用一個字段來說明文件名是什麼。)我認爲這是人們通常所做的。我自己沒有太多的經驗。 – Edmund 2010-01-19 04:58:27

1

幾個方面的考慮:

  • 事務管理;
  • 備份和恢復。

這些通常比使用文件系統更容易編入數據庫。但可能最難的是將文件系統備份與數據庫的前滾(重做)日誌同步。交易越多,這些因素就越重要。

從您的問題中可以看出,您並不打算使用普通數據庫功能(關係完整性,連接)。在這種情況下,您應該強烈考慮第三個選項:將數據存儲在文件系統中,而不是數據庫,使用基於文件的文本檢索引擎,如Solr(或Lucene),Sphinx,Autonomy等。

0

這取決於你如何使用數據,正如之前的迴應所述。

數據庫中的數據可用於支持許多不同類型的查詢,並將結果提供給報表,表單,OLAP引擎和許多其他類型的工具。適當的索引可以顯着加快搜索速度。

如果您瞭解SQL,並且數據庫設計得很好,那麼與使用文件做同等事情相比,提出查詢更容易,更快速,並且更少出錯。但是,正如其他人所指出的那樣,您可以將XML數據插入到SQL中,而無需將其移至數據庫。

設計一個好的多用途模式比大多數初學者認爲的更困難。有很多東西需要學習,而不僅僅是如何操縱一個或另一個工具。一個不好的多用途模式比文件更難處理。

如果您決定使用數據庫,請準備投入大量資金。並確保您將獲得該投資的收益。

1

我將使用HDFS(Hadoop分佈式文件系統)來存儲數據。主要想法是您將獲得高可用性,可伸縮性和複製。對你的應用程序的任何查詢都可以做成map reduce查詢。主要字段可以使用Katta作爲分佈式索引存儲在Hadoop之上。

嘗試使用這些技術的Google搜索。

相關問題