2011-04-07 62 views
9

我正在研究由少數Python腳本(1M max)和相對較大的數據集(1.5 GB)組成的協作科學項目。數據集與python腳本緊密相連,因爲數據集本身就是科學,腳本是它們的簡單接口。如何清理地處理源代碼和存儲庫中的數據

我使用Mercurial作爲我的源代碼控制工具,但我不清楚定義存儲庫的好機制。從邏輯上講,將這些捆綁在一起是有意義的,這樣通過克隆存儲庫就可以獲得整個軟件包。另一方面,我擔心處理大量數據的源代碼管理工具。

有沒有一個乾淨的機制來處理這個問題?

回答

7

如果數據文件很少發生變化,並且您通常都需要所有這些文件,那麼只需將它們添加到Mercurial中即可完成。您的所有克隆都將爲1.5 GB,但這只是數據量的方式。

如果數據是二進制數據並經常更改,那麼您可以嘗試避免下載所有舊數據。一種方法是使用Subversion子庫。你將有一個.hgsub文件,

data = [svn]http://svn.some.edu/me/ourdata 

告訴水銀,使從右側的URL svn checkout並把Subversion工作拷貝到你的Mercurial克隆作爲data。 Mercurial將爲您維護一個名爲.hgsubstate的附加文件,其中記錄了SVN修訂版編號以檢出任何給定的Mercurial變更集。通過像這樣使用Subversion,您只能得到機器上最新版本的數據,但Mercurial將知道如何在需要時獲取舊版本的數據。如果沿着這條路線走,請參閱this guide to subrepositories

1

我的第一個傾向是將python腳本分離到他們自己的存儲庫中,但我真的需要更多的域信息來進行「正確」調用。

一方面,如果要創建新的數據集,那麼您會希望核心工具集能夠處理所有這些數據集,對吧?但我也可以看到新的數據集可能會如何引入腳本以前可能沒有處理過的情況......雖然看起來在理想的世界中,您希望腳本以一般方式編寫,以便他們可以處理未來的數據和現有的數據集??

+1

一般來說,科學家們爲每個數據集推出一個新的工具,這個工具不在我的手中。腳本相對較輕並與每個數據集的怪癖緊密相關。對於我來說,定製一個小腳本比在其他人上強制實施一個數據交換協議要容易。 – Rich 2011-04-10 18:50:47