2010-07-29 63 views
13

應用程序的代碼和配置文件保存在代碼庫中。但有時,作爲項目的一部分,我也有一些數據(在某些情況下可能大於100MB,大於1GB)存儲在數據庫中。 Git在處理代碼及其更改方面做得很好,但開發團隊如何輕鬆共享數據?如何將數據集與應用程序一起管理?

它並不真正適合在代碼版本控制系統,因爲它主要是大型的二進制文件,並會作出獲取更新的噩夢。但它必須與存儲庫同步,因爲一些代碼修訂版會更改模式(即遷移)。

你如何處理這種情況?

+0

通過數據你的意思是在一個數據庫或其他地方的一些平面文件(如電影或MP3文件的集合例如)數據? – slebetman 2010-08-01 19:19:16

+0

在我的情況下,它的數據庫。我可以將它導出到一些XML/JSON/SQL文件,但這將是一個非常大的文件。 – 2010-08-02 03:43:48

回答

4

我們有存儲在XML數據和架構,並使用liquibase處理架構更新和數據兩者。這樣做的好處是您可以區分文件以查看正在發生的事情,它可以很好地與任何VCS配合使用,並且可以將其自動化。

由於數據庫的大小,這意味着相當大的「版本0」文件。但是,使用遷移策略之後,更新應該可以管理,因爲它們只會是增量。您可以將現有的遷移一對一地轉換爲liquibase,這可能比大爆炸更好。

您還可以利用@belisarius'的策略,如果您的增量非常大,因此每個開發人員不必單獨申請的增量。

2

我們通常使用數據庫同步或複製架構。

每個開發者都有數據庫的2個副本,一個用於工作,另一個只是爲了保持同步版本。

當代碼是同步的,腳本同步數據庫太大(相對於「死」開發商的副本中央DB)。之後,每個開發人員更新他自己的工作副本。有時開發人員需要保留一些他/她的數據,因此這些第二次更新並不總是由標準腳本驅動。

是一樣強大的複製模式....有時(取決於DB),並不代表好消息。

3

在我看來,你的數據庫有很多與二進制庫相關的相似之處:這是大的(當然,不是一個合理的代碼庫大得多!),二進制,並有自己的版本,它必須對應於各種版本的代碼庫。

考慮到這一點,爲什麼不依賴管理器(例如Apache Ivy)與構建過程集成,並讓它管理您的數據庫?這看起來就像是一個依賴管理器的構建任務。除非您可以將數據序列化爲可變量格式(XML/XML格式),否則關於數據/下載的龐大規模,我認爲沒有任何神奇的項目符號(缺少一些嚴重的文檔預加載基礎結構)你提到的JSON/SQL)。

第二種方法(可能與依賴管理不兼容):如果代碼的具體情況允許,則可以保留第二個文件,該文件是手動比較,可以將基本數據庫(版本0)數據庫直到版本X.每個開發人員都需要保持一個乾淨的版本0.一個拉(具有更改的數據庫的版本)將包括:拉差異文件,將版本0複製到工作數據庫,應用差異文件。請注意,應用diff文件可能需要一段時間才能處理較大的數據庫,因此您可能無法像在第一次看到時那樣節省直接下載的時間。

+0

感謝Greg,您的第一個解決方案聽起來很酷。我會檢查出來的。 你的第二個解決方案 - 數據庫數據遷移 - 在理論上是非常好的,但我無法在現實生活中使用它(我正在使用它,這就是我的問題的原因)。這需要比評論更長的時間來解釋原因。我應該寫一篇關於它的博客文章:) – 2010-08-31 08:59:37

+0

@Ofri,當然有道理。對於一般情況來說,這仍然可能有用 - 這是我發現自己在類似情況下最經常做的事情。不幸的是,我認爲會有一些大的下載並且沒有辦法解決這個問題......我們已經通過了撥號上網的好事。 :-) – Greg 2010-08-31 14:07:55

+0

我認爲關鍵部分是「哪些必須對應於您的代碼庫的各種版本。」 。我們發現並非所有開發人員都同意這一點,因爲他們的單元測試數據(例如)演化速度太快......比他們預期的代碼提交速度快得多。只是我2C – 2010-08-31 23:24:26

1

DataGrove是一個新產品,讓你的數據庫版本控制。我們允許您在任何時間點存儲整個數據庫(模式和數據),標記,恢復和共享數據庫。

這聽起來像是你在找什麼。

我們目前正在對功能,讓混帳樣(推輓)行爲,因此開發人員可以跨機器共享他們的倉庫,所以,當我需要它,我可以加載最新版本的數據庫。

相關問題