2011-10-20 171 views
0

我想以一種可查詢的格式存儲數據,而無需提前知道給定的數據包將包含哪些字段。元數據結構在?數據庫

簡單/愚蠢的方法似乎是一個大的鍵 - 值對錶和一個關鍵字返回到數據描述的「父」對象表。

的數據將具有以下性質:

  1. 許多將被關聯到一個父對象
  2. 的數據將始終在鍵 - 值對的形式的元數據'片段
  3. 的數據將不會是平等的(只有一個關鍵值對)
  4. 會有很多。從未清除過。移動複製檔案存儲器如果需要

例如

日誌文件進行解析和它的消息被拉入基於某些規則的一些定義的格式如下:

  • 日誌/系統名稱
  • 位置
    • 日期
    • 時間
    • 級別
    • 消息

可能有許多日誌分析爲許多不同的系統。每個系統可能有不同的領域。

僅當創建解析文件的規則時才知道日期/時間/級別/消息字段,而不是在構建數據存儲時。

你會怎麼做呢?你會使用什麼樣的數據庫/設計?

回答

0

選項1:使用MongoDB之類的NoSQL數據庫之一 - 我並不熟悉這些數據庫,因爲我生活在大多數SQL Server環境中。這些讓你有那些文件,如關係數據庫的

選項2列的不是靜態的數字記錄:關係數據庫

表:登錄{ID(PK),日期,時間,級別,消息} 表:ExtraFields {Id(PK),FieldName} 表:AdditionalFields {FieldId(PK),LogId(PK),Value}

這裏每個記錄都會得到一個Log記錄,然後在AdditionalFields中獲得一些附加字段,該鏈接返回到LogId。然後你可以將它們加載到一個Log對象中。 ExtraFields表將包含所有類型的字段。如果在加載記錄時不存在,則添加另一個記錄。所以這可能有URL,IP,用戶代理等,如果它是網絡日誌。

或者,您可以避開ExtraFields表並將字段名稱直接放在AdditionalFields表中。