我最近开始学习Linq和SQL。作为一个小项目,我正在为Windows Phone编写一个字典应用程序。该项目分为两个应用程序。一个应用程序(当前在我的PC上运行)在我的PC上生成SDF文件。第二个应用程序在我的Windows Phone上运行并搜索数据库。但是我想优化数据使用。字典的原始条目写在TXT文件中,文件大小约为39MB。该文件具有以下布局
germanWord \tab englishWord \tab group
germanWord \tab englishWord \tab group
使用以下表格将文件解析为SDF数据库。
表 Word ,列 _version(rowversion),Id(int IDENTITY),Word(nvarchar(250)),语言(int)
该表包含文件中的每个单词。该语言是我的代码中的一个标志,我以后想要添加更多语言。单词 - 语言对是独一无二的。
表组,列 _version(rowversion),GroupId(int IDENTITY),Caption(nvarchar(250))
该表包含不同的组。每个小组都有一次出现。
表条目,列 _version(rowversion),EntryId(int IDENTITY),WordOneId(int),WordTwoId(int),GroupId(int)
此表将翻译链接在一起。 WordOneId 和 WordTwoId 是 Word 表中某行的外键,它们包含行的ID。 GroupId 定义单词所属的组。
我选择此布局来减少数据占用空间。原始文本文件多次包含一些德语(或英语)单词。有大约60个团体重复他们自己。以编程方式,我将wordcount从大约1.800.000减少到大约1.100.000。 Group 表中有大约50行。尽管单词数量减少,但SDF在文件大小方面约为80MB。这是原始数据大小的两倍多。另一件事是,为了加快翻译的搜索,我计划索引 Word 表的 Word 列。通过添加此索引,文件增长到130MB以上。
如果原始数据约60%的SDF是两倍大?
有没有办法优化文件大小?
答案 0 :(得分:0)
除了行元数据之外,数据库文件必须包含原始文件中的所有数据 - 它还将包含基于指定数据类型的字符串 - 我相信您的选项是NVARCHAR
,它使用每个字母两个字节。结合这些考虑因素,数据库文件的大小是使用ISO-Latin-1字符集的相同数据的文本文件的两倍,这并不奇怪。