2012-06-24 152 views
0

我最近開始學習Linq和SQL。作爲一個小型項目,我正在爲Windows Phone編寫一個字典應用程序。該項目分爲兩個應用程序。一個應用程序(目前運行在我的電腦上)在我的電腦上生成一個SDF文件。第二個應用程序在我的Windows Phone上運行並搜索數據庫。不過,我想優化數據使用情況。字典的原始條目被寫入TXT文件中,文件大小約爲39MB。該文件具有以下佈局優化SDF文件大小

germanWord \tab englishWord \tab group 
germanWord \tab englishWord \tab group 

使用以下表格將文件解析到SDF數據庫中。

與列_version(rowversion),ID(INT IDENTITY),字(爲nvarchar(250)),語言(INT)
此表包含文件中的每一個字。該語言是我使用的代碼中的一個標誌,以備日後添加更多語言。一個詞語對是獨一無二的。

組與列_version(rowversion)的GroupId(INT IDENTITY),字幕(nvarchar的(250))
本表包含不同的組。每組都有一次。

條目與列_version(rowversion),ENTRYID(INT IDENTITY),WordOneId(INT),WordTwoId(INT),的GroupId(INT)
此錶鏈接翻譯在一起。 WordOneIdWordTwoId外鍵在Word中一排,它們包含一個行的id。 GroupId定義了單詞所屬的組。

我選擇了這種佈局來減少數據佔用量。原始文本文件多次包含一些德語(或英語)單詞。大約有60個團體重複自己。以編程方式,我將wordcount從1.800.000左右減少到1.100.000左右。在表中有大約50行。儘管單詞數量減少了,但SDF的文件大小仍在80MB左右。這是原始數據的兩倍多。另一件事是,爲了加快翻譯的搜索,我打算索引列的表。通過添加這個索引,文件增長到超過130MB。

怎麼可能是原始數據的〜60%的SDF是兩倍大?

有沒有辦法優化文件大小?

回答

0

除了行元數據之外,數據庫文件還必須包含原始文件中的所有數據 - 它還將包含基於指定數據類型的字符串 - 我相信您在此處的選項是NVARCHAR,它每個使用兩個字節信。綜合考慮這些因素,使用ISO-Latin-1字符集的數據庫文件的大小是相同數據的文本文件的兩倍,這並不令人感到意外。