2013-09-24 153 views
0

首先是一個警告:我對文檔數據庫是全新的,因此我所有的「理解」都來自文檔和博客文章,這是我第一次親身實踐。什麼是正確的文檔設計

我要實現以下目標:

  1. 存儲不同類型的文件和管理圍繞文件的一些元數據。
  2. 查詢數據庫由:
    • 元數據
    • 元數據和文件屬性
    • 元數據爲特定文檔類型
  3. 更新元數據,而無需加載整個文件。

我的理解是我在這裏有兩個選擇。

將元數據與文檔一起保存。

public class Metadata 
{ 
    public DateTime ValidFrom { get; set;} 
    public DateTime? ValidTo { get; set;} 
} 

public class DocumentWithMetadata<T> 
{ 
    public T Document { get; set;} 
    public Metadata Metadata { get; set;} 
} 

有一個索引,其中將包括元數據屬性和使用LiveProjections加載一個文件的元數據,而無需加載整個文檔。有關元數據的更新使用PATCH。根據文檔..."is considered to be an expert feature and generally should not be used as a general purpose solution. If you have reached a scenario where you are considering using this, you might want to recheck your data model and see if it can be optimized to prevent usage of the Patching API"

另一種選擇是將元數據另存爲獨立文檔。

public class Metadata 
{ 
    public DateTime ValidFrom { get; set;} 
    public DateTime? ValidTo { get; set;} 
} 

public class DocumentWithMetadata<T> 
{ 
    public T Document { get; set;} 
    public string MetadataId { get; set;} 
} 

在這種方法我可以使用Related Document Indexing功能和「提升」的元數據屬性到文檔的索引。

鑑於爲T1類型的文檔烏鴉會創建一個名爲DocumentWithMetadataOfT1集合,我將如何查詢爲T1文件元數據,如果所有的元數據是一個集?

我想過其他一些方法,比如向元數據添加文檔類型屬性或者反轉關係,但是它們都像是黑客。

必須有更好的方法..或不?

回答

1

這實在令人困惑,你實際上想做的事情。主要是因爲Raven已經擁有自己的文檔和元數據概念,並且出於某種原因您正在介紹自己的概念。

根據您添加到元數據中的ValidFromValidTo字段,我猜測您正在嘗試某種雙時間有效性或「歷史記錄表」。這實際上已經完成了,所以如果這就是你之後,那麼你應該只使用我的Temporal Versioning Bundle

+0

感謝馬特,正如我所提到的,我總的來說是一個RavenDB和文檔數據庫的初學者,所以有很多東西需要學習。作爲一個學習項目,我想實現[緩慢改變類型2的維度](http://en.wikipedia.org/wiki/Slowly_changing_dimension)。我將在今晚看看Temporal Versioning Bundle。 時間版本控制軟件包可以通過自定義「跟蹤字段」進行擴展嗎?例如誰做了改變的用過的ID? – Nafas

+0

這是一個先進的概念。我的建議是從簡單的RavenDB開始,並習慣於首先記錄數據庫模式。一旦你不再考慮關係數據庫的思維方式,那麼看看暫時版本控制,它對你來說會更有意義。是的,你可以擴展它,但你不需要做任何特別的事情。只需簡單地存儲其他數據或元數據字段,並且它們將被適當地版本化。關於SCD第2類 - 是的,這是一個類似的概念,但更多的是OLAP術語。 –

+0

我們正在處理每日數據轉儲。這些文件是其他系統中所有數據的快照。這些文件包含高達300K的記錄,其中變化率非常小,最壞的情況下大約爲1% - 1.5%。我只想使用校驗和來捕獲已更改的文檔(轉儲文件中的行)以檢測更改。我正在研究文檔數據庫的原因是,我不必爲每個需要處理的〜20個轉儲處理數據庫模式。 – Nafas

相關問題