2010-08-25 119 views
0

我們有一個應用程序,它具有存儲在數據庫中的元數據信息(一些表之間有關係)。元數據可以通過Web應用程序進行編輯或直接在SQL Server數據庫中操作值。數據庫易於比較

問題:元數據更改並需要在不同環境(測試,分段,生產等)之間進行合併。有些工具(如RedGate)可以提供幫助,但是如果使用自動生成的ID(比如現在在我們的數據庫中,那麼比較數據庫還是相當多的工作)(是的,一種方法是使用自然鍵來比較更容易)。但是,我們的元數據可能不一定存儲在SQL數據庫中 - 它可以作爲文檔存儲在NOSQL數據庫(MongoDB,CouchDB,RavenDB)或甚至簡單的XML數據庫(也許是Berkeley DB XML?)中。作爲XML文件存儲似乎會工作(因爲比較和合並文件比數據庫更容易),但可能不是一個好的選擇,因爲需要一些併發機制,一定程度的事務支持。 我們不需要複製到其他服務器,就沒有必要對高可用性等

的要求來存儲數據:

  • 某種ACID
  • 的應用在Windows
  • 運行易於比較(雙向同步)
  • (可選)GUI查看數據庫中的內容
  • (可選)導出到文件(JSON,XML)

有什麼選擇?

回答

1

爲什麼要將存儲與正在執行差異的表示相混淆?

我會將所有內容都保存在SQL中,但是當它們進行比較時,請將所有重要的數據(不是ID)選擇爲XML格式,並使用XML差異化工具(或csv格式,以及使用純文本比較器)。

+0

那麼,你做了這個比較後,你需要更新數據庫的變化 - 有什麼工具可以輕鬆地做到這一點?我的意思是 - 提取重要數據XML並從更新的XML導入數據? – Sazug 2010-08-25 08:11:17

+0

如果這是您的用例,則可以使用where子句編寫insert語句來同步數據。或者,編寫一個XSLT來從生成的xml差異生成SQL? – 2010-08-25 18:56:37

+0

這是一個選項。但我更喜歡使用一些工具,而不是自己寫。我認爲有類似的東西,但從這個問題的答覆我明白,沒有任何。 – Sazug 2010-08-26 13:30:23

0

我從來沒有使用過它,但CouchDB內置了對db之間的雙向同步的支持。