我有一個開源的應用程序(here)嵌入資源是一個只讀xml數據庫的好方法嗎?
此應用程序得到一個字符或句子,並給它一些關於它的unicode信息。它通過提供Unicode.org
IUSE Unicode字符數據庫,這是一個XML文檔(130MB)
起初我這個嵌入XML到我的DLL,但我不知道這是一個好的方法或沒有。因爲這個XML文件只是因爲DLL大小的增長。我可以像使用其他資源一樣使用它,但用戶可以看到它。
我該怎麼辦?什麼是最好的模式?爲什麼?
TIA
我有一個開源的應用程序(here)嵌入資源是一個只讀xml數據庫的好方法嗎?
此應用程序得到一個字符或句子,並給它一些關於它的unicode信息。它通過提供Unicode.org
IUSE Unicode字符數據庫,這是一個XML文檔(130MB)
起初我這個嵌入XML到我的DLL,但我不知道這是一個好的方法或沒有。因爲這個XML文件只是因爲DLL大小的增長。我可以像使用其他資源一樣使用它,但用戶可以看到它。
我該怎麼辦?什麼是最好的模式?爲什麼?
TIA
我想嵌入式資源是一個很好的選擇如果你很樂意每次有改變時重新編譯和重新部署;另外,僅僅因爲你可能很樂意這樣做並不意味着每個人都會:)
一個非常普遍的方法是抽象出接口後面的任何類型的數據訪問;如果你這樣做了,你將能夠讓用戶選擇他們想要的實現(假設你提供了一對),並且讓他們自己寫。就模式而言,這是Dependancy Inversion(也稱爲控制反轉)。
如果您通過配置(例如:使用Factory)來驅動提供程序的實例化,則無需重新部署應用程序的主要部分(即使用數據的部分)即可切換提供程序。因此,您可以擁有任意數量的供應商:XML讀取文件提供程序,SqlLite數據提供程序,Web服務/雲端提供程序等。
我喜歡羅蘭茲的方法 - 您可以構建作爲提供者的實現方式(將文件讀入內存,快速響應內存查詢)。
如果壓縮文件,大小是多少?如果節省顯着,請使用壓縮資源,將資源解壓縮到內存流,然後將流加載到XML文檔中。
我認爲XML不是去這裏的路。特別是當性能至關重要時。如果這麼大考慮切換到嵌入式數據庫(例如SQLite或其他)。
想了解更多關於XML VS SQLite的檢查這個問題:Xml or Sqlite, When to drop Xml for a Database?
對於Sqlite來說+1,在這種情況下應該是快速的 – daniels 2010-06-13 09:59:03
XML是一種數據交換格式。由於您已經考慮將XML文件嵌入到您的DLL中,可能沒有人會真正需要該格式爲XML。那麼從XML文件中提取相關數據並將其作爲資源存儲在DLL中呢?首先,它節省了空間,其次,您可以按照以後需要的方式組織數據。
+1 - 您可能希望自動執行該過程(提取相關數據),以便每當底層源發生更改時都可以快速執行該過程。 – 2010-06-28 03:40:22
mydll約爲13MB。並注意提供快速和準時的反饋是必要的。 XML非常龐大,目前對於某個角色來說,它需要大約10-20秒的時間才能顯示答案,因此對於一個句子而言,它會更多,所以我認爲壓縮並不是一個好主意。 – 2010-06-10 13:24:20