如何在移动设备上管理大量数据

时间:2011-05-09 12:48:45

标签: c# algorithm data-structures windows-phone-7 indexing

我目前正在实施一本日语词典,并想了解如何快速有效地查找条目。字典条目本身被加载并存储在一个类中,该类包含日语单词(可能具有多个拼写),它们的语音发音和英语定义为三个列表。

我最初有一个树形结构,每个节点代表一个单词中的一个字符。这是非常快,但不幸的是使用了大量的内存。定义数据本身约为35meg,树结构本身约为130meg。此外,它也只允许从日语查找 - >英语。内存是一个问题,因为除了需要额外的索引之外,应该存在Windows Phone 7版本的应用程序。该词典包含150,000个条目。

总结一下,这就是我需要做的事情: 存储定义列表 在此列表中有三个索引用于日语,语音和英语含义。 查找速度快(理想情况下不到1秒) 使用尽可能少的内存(Windows Phone 7上的内存使用限制为90美元)

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您应该考虑使用移动数据库或Web服务来处理移动设备上的大量数据。您正在寻找的那种性能,功能和管理很难在任何平台上获得,但您不必这样做。使用具有适当索引和表的数据库,本地或远程。

SQL CE不适用于WP7,但有other options,商业和开源。此外,如果您希望经常连接并且可以稍微延迟,请考虑使用Web服务。您可以在通过Web服务呈现给您的中央服务器上使用任何选择的数据库。您的瓶颈是通信,但您可以从受限设备上卸载大量处理。

答案 1 :(得分:1)

  • 最简单的解决方案是:客户端只接受输入,然后向服务器端发送请求,服务器端返回输出到客户端
  • 另一种方法是使应用程序脱机:
    1. 日语单词列表应按字典顺序排序,其他两个列表也是如此。
    2. 由于日语有50个字母,因此根据单词的前两个字母,列表可以分成50 * 50个部分。所以关键点是:准备一个50 * 50阵列,记录与文件中前两个字母的起始位置相对应的偏移。如果使用32位整数来存储偏移量,则需要10KB。
    3. 对于每个日语单词,将偏移存储在其他两个列表中。为方便起见,这两个列表可以组合在一起。如果使用32位整数来存储偏移量,并且您有150000个条目,则会将数据大小增加600KB。
    4. 偏移数组保留在内存中,当输入日语单词时,首先根据前两个字母找出偏移,然后阅读全部以前两个字母开头的日语单词。因为你有150000个条目,所以平均而言,以相同的两个字母开头的单词数是60.而内存页面是4KB,足够60个单词,所以只有1 IO 是必要的。在其他两个列表中找到偏移后,请阅读相应的内容。因此,在搜索操作中仅需要2 b 。而且计算成本也很小,内存成本也很低。