2012-06-24 116 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字符集的数据库文件的大小是相同数据的文本文件的两倍,这并不令人感到意外。