0

我最近开始学习 Linq 和 SQL。作为一个小项目,我正在为 Windows Phone 编写一个字典应用程序。该项目分为两个应用程序。一个应用程序(当前在我的 PC 上运行)在我的 PC 上生成一个 SDF 文件。第二个应用程序在我的 Windows Phone 上运行并搜索数据库。但是我想优化数据使用。字典的原始条目写在一个 TXT 文件中,文件大小约为 39MB。该文件具有以下布局

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

该文件被解析为具有下表的 SDF 数据库。

包含_version (rowversion)、Id (int IDENTITY)、Word (nvarchar(250))、Language (int)列的Word 表 此表包含文件中的每个单词。该语言是我代码中的一个标志,我在以后想添加更多语言时使用它。单词-语言对是独一无二的。

Table Group with columns _version (rowversion), GroupId (int IDENTITY), Caption (nvarchar(250))
此表包含不同的组。每个小组都出席一次。

包含_version (rowversion)、EntryId (int IDENTITY)、WordOneId (int)、WordTwoId(int)、GroupId(int)列的表Entry 此表将翻译链接在一起。WordOneIdWordTwoId是Word Table中一行的外键,它们包含一行的 id。GroupId定义单词所属的组。

我选择这种布局是为了减少数据占用。原始文本文件多次包含一些德语(或英语)单词。大约有 60 个组在重复自己。以编程方式,我将字数从大约 1.800.000 减少到大约 1.100.000。Group表中有大约 50 行。尽管字数减少,SDF 的文件大小约为 80MB。这是原始数据大小的两倍多。还有一点是为了加快翻译的搜索速度,我打算对Word表的Word列进行索引。通过添加此索引,文件将增长到 130MB 以上。

拥有约 60% 原始数据的 SDF 怎么会是原来的两倍?

有没有办法优化文件大小?

4

1 回答 1

0

数据库文件必须包含原始文件中的所有数据,除了行元数据——它还将包含基于指定数据类型的字符串——我相信你的选择是NVARCHAR每个字母使用两个字节。结合这些考虑,我不会感到惊讶,数据库文件比使用 ISO-Latin-1 字符集的相同数据的文本文件大两倍多。

于 2012-06-24T20:31:30.377 回答