2011-08-30 54 views
0

我有一个数据库有很多条目,但只有一个字段。想想一个基本的名单,按照字母顺序排列大约20万个名字。 该应用程序的用户将能够搜索此列表并获得他的请求上的自动填充。用于线性但大型数据库的SQLite或核心数据?

对于这种方法,SQLite或CoreData会更好吗?或者不需要,因为它只是一个数据领域?

在此先感谢。

编辑:更多的信息:所有的项目都是静态的,并不会在所有

回答

0

我认为使用SQLLite支持的FMDB可能是更好的解决方案为了这。在核心数据中,每一行都将由一个对象实例表示,而这个对象实例又会包含一个字符串......这是很多包装和结果的间接方式。

然而,最好的想法是测试这个 - 因为它是一个如此简单的模型,将SQLLite数据库和CoreData数据库放在一起,然后用200k项目和每个时间搜索它们填充每个项目将是最好的选择。这可能是因为CoreData的更高级的缓存可能有助于像用户输入的渐进式搜索字符串那样删除字符。

不要忘记将行标记为索引!这对两种情况都有帮助。

+0

感谢您的意见。我会按照你的建议尝试速度测试。 –

0

SQLite的编辑和CoreData将几乎执行相同的,因为后端的商店之一可以(默认情况下为) SQLite,所以基本上它是一样的,如果你使用一个或另一个。核心数据的主要优点是框架的所有额外好处,如缓存结果,面向对象的方式与数据库进行交互,等等...

+0

感谢您的回答。在决定现在要做什么之前,我会尽量深入研究CoreData。 –

0

也许比数据存储的选择更重要的是自动完成算法的选择以及与如何构建数据存储中的数据有关的决定。

您不希望算法的“踢入”导致用户的击键或至少其中一些击键被吞噬。您是否曾经在Google中输入过搜索字符串,发现您输入的前几个字符不在文本框中?

您可能希望延迟字符串匹配,直到至少输入三个字符,并且/或者您可能希望以非规范化的方式存储数据,这可能更适合自动完成。

例如,你的PK或关键可能是“替代”和这个分隔字符串可能是该键的值:

  altar,alter,alteration,altercation,alternate,alternation,alternator,although, 
      altimeter,altitude,alto,altogether,altruism,altruist 

,而不是各自的那些话占据自己的行。