2011-03-06 37 views
4

我有大約30 MB的文本數據,這些數據是我在Web應用程序中使用的算法的核心。在Web應用程序中處理源文件數據文件的最佳方式是什麼?

一方面,數據是算法的一部分,對數據的更改可能導致整個算法失敗。這就是爲什麼我將數據保存在源代碼管理中的文本文件中,並且所有更改都經過了自動測試(預先提交)。我目前的控制水平很高。隨着我們產生更多網絡實例,將數據與源一起分發不成問題,因爲它與源代碼一起標記。我現在有這些問題:

  • 我經常制定特殊的工具來操作文件,複製數據庫訪問工具功能
  • 我想給非開發控制網絡訪問這些數據。

另一方面,它是數據,它在數據庫中「屬於」。我希望我可以把它放在一個數據庫,但然後我會遇到這些問題:

  • 如何將此數據庫同步到源?發行版包含代碼和數據。
  • 當我產生Web服務器的新實例時,我該如何隨數據一起提供它?
  • 如何管理數據的提交前測試?

事情我已經考慮過這樣遠:

  • sqlite的(沒有解決非開發者訪問)
  • 建立一個精心製作的預產數據庫,數據用戶將編輯創建「補丁」到「真正的」數據庫,開發人員將接受,測試和提交。聽起來很複雜。
    我還沒有完全設計好這又和我真的希望我在這裏重新發明輪子而一些用戶會告訴我的我的方式錯誤...

BTW:我有一個「正規」數據庫以及不是算法數據的東西。
BTW2:我添加了Python標籤,因爲我目前使用Python,Django,Apache和Nginx,Linux(以及一些蹩腳的開發人員使用Windows)。

在此先感謝!

UPDATE

數據的一些例子(算法是自然語言處理的東西):

  • 世界城市和他們的備用名稱貨幣
  • 酒店座標的
  • 名稱

這個名單還在繼續,但想象一下,如果有人改變教導我說羅馬在意大利的座標,或者如果某人爲拉斯維加斯添加了「浪漫」作爲替代名稱,那麼試圖解析這個句子Romantic hotel for 2 in Rome arriving in Italy next monday(是的,例子是跛腳,但我希望你得到漂移)。

回答

1

好了,這裏是一個想法:

  1. 船舶的全部資料,現在已經完成。
  2. 將安裝腳本安裝到適當的數據庫中。
  3. 讓用戶修改這個數據庫,並給他們一個「恢復到原來的」按鈕,只需從文本文件重新安裝。

或者,此路線可能更容易,尤其是,升級安裝時:

  1. 按照現在所做的那樣發送所有數據。
  2. 讓用戶修改數據並將修改後的版本存儲在適當的數據庫中。
  3. 讓代碼在數據庫中查找,如果找不到適當的數據,則回退到文本文件。不要讓代碼以任何方式修改文本文件。

無論哪種情況,您都可以保留當前的測試代碼;您只需添加確保數據庫正確覆蓋文本文件的測試。

+0

哦,我猜我沒有正確解釋。抱歉。這個算法數據是真正的數據(不是代碼)。我會在問題主體中添加一些例子。 – 2011-03-06 12:22:22

+0

@Tal Weiss:改變事情。重寫我的答案。 – 2011-03-06 12:47:29

1

我認爲這是一個資源,它是應用程序依賴的數據,但不是應用程序管理的數據。圖像,CSS和模板是相似的資源,並且讓它們保持所有版本的控制。

在這種情況下,您可以將數據拆分爲單獨的包。在python分發條款中,使用應用程序依賴的單獨的egg;軟件包部署工具(如pip和buildout)將自動引入依賴項。這樣你可以獨立版本,你可以有其他工具依賴於它等。

最後,選擇一種可以被源代碼管理系統有效管理的格式。這意味着一種文本格式。您可以在啓動時對該格式進行解析,但通過保持文本格式,您可以通過對其進行更改來正確進行管理。這可能是一個SQL轉儲(CREATE TABLE和INSERT語句)在啓動時或其他一些基於python的結構中加載到sqlite數據庫中。您也可以選擇按需加載數據,並根據需要將其緩存到內存中。

查看pytz時區數據庫,查看其他資源項目如何管理此類結構的一個很好的示例。

相關問題