如何存储大量字符串以优化初始化时间和搜索速度



我正在编写一个android应用程序,它存储了一组约50.000字符串,并且我需要关于如何最好地存储它们的输入。

我的目标是能够以低延迟查询与模式匹配的字符串(如Hello W**m Aliv*),但要避免巨大的初始化时间。

我想到了以下两种方法:

  1. 一个java集合我认为java集合应该很快搜索,但考虑到它相当大,我担心它可能有对应用程序初始化时间有很大影响
  2. SQLite数据库中的一个表我想这会很容易初始化时间(因为它不需要加载到内存),但我担心查询会带来一些相关的延迟,因为它需要启动一个SQLite进程(或者不是吗?)

我的"想象"是正确的还是大错特错?哪种方式最好?

如果您想要快速(即时)搜索时间,您需要的是字符串的全文索引。幸运的是,SQLite通过FTS扩展提供了一些全文搜索支持。SQLite是Android API的一部分,初始化时间完全可以忽略不计。您需要注意的是,索引(.sqlite文件)必须在.apk中随应用程序一起提供,或者在第一次打开时重新创建(这可能需要相当长的时间)

看看像patricia trie这样的数据结构(http://en.wikipedia.org/wiki/Radix_tree)或三元搜索树(http://en.wikipedia.org/wiki/Ternary_search_tree)。它们将显著减少您的搜索时间,并且根据字符串中的重叠量,实际上可能会减少内存需求。Java集合适用于多种用途,但对于大型短字符串集来说并不是最佳选择。

我肯定会坚持使用SQLite。它在初始化和查询方面都非常快。SQLite在应用程序进程中运行,因此在初始化时几乎没有时间损失。查询通常在后台线程中激发,以不阻塞主线程。它在50.000条记录上会非常快,而且不会将所有数据加载到内存中,这也很重要。

您的字符串no为50。在这种情况下,您可以使用java集合数据库,这将花费时间。

最新更新