2010-09-06 96 views
2

当前数据库有20万条记录。我想制作iPad应用程序,我可以用sqlite运行20万条记录吗?我不想使用sqlite,因为搜索速度超过32000。任何搜索引擎,如lucene for iPhone SDK?如果我们可以在iPad上运行lucene,那将会非常棒,因为当前的项目是基于lucene的。你能给我一个建议吗?我可以用sqlite运行20万条记录的iPad吗?

谢谢

+0

挖掘这些'索引'! 32k行数据在任何数据库上都不会变慢! – Frankie 2010-09-06 03:54:26

+0

32k行数据不能在任何数据支持上变慢! :) – Frankie 2010-09-06 03:55:34

+0

我建议使用“如何在iPad上进行全文搜索”作为问题的标题。 SQLite在这里并不是真正的问题。 – 2010-09-06 04:49:51

回答

1

我最近建立了一个86000行和SQLite的iPhone应用程序。

起初我并没有对我的排序行进行索引,搜索大约需要1秒钟的时间才能在iPod touch第二代上执行。一旦我添加我的索引搜索是即时的。

说实话,你可能能够逃避在你正在寻找的领域“喜欢”的查询?它实际上可能够好。我想你会发现,一旦你为你的数据添加索引,数据库的规模将会增长,并且可能会让你的应用程序变得非常大,并且在这里放置一个完整的搜索引擎可能会有一个真正的痛苦。

下面是一些快速为SQLite数据库进行测试的代码。

http://www.rvaidya.com/blog/iphone/2009/02/14/wrapper-classes-for-using-sqlite-on-iphonecocoa/

SQLiteResult *result = [SQLite query:@"SELECT * from test;"]; 
NSArray *row = [result.rows objectAtIndex:0]; 
NSString *firstValue = [row objectAtIndex:0]; 
+0

如果你使用LIKE'text%',那么它是OK的(在这种情况下,SQLite可以使用索引),但是我会避免使用LIKE'%text%'。这将导致表扫描,并且对200,000行的表扫描很慢 - 与您使用的平台无关。您可能会用测试数据避开它,但是稍后更改应用程序比开始使用正确的算法可能更大。 – 2010-09-06 18:14:36

0

我理解Lucene是用Java编写的 - 这是指你不能使用它在iPad上。

你真的在你的Sqlite数据库中创建索引吗?根据我的经验,Sqlite非常快。如果核心数据太慢,您也可以尝试使用本机C API。

+0

是的。我知道。 Lucene无法在iPad上运行。我会尝试使用sqlite,或者如果我对速度满意,我们应该编写本地C API。 – saturngod 2010-09-06 03:43:48

2

我建议建立自己的全文索引。我不认为iPhone上的SQLite支持触发器,但您仍然可以使用类似于H2 fulltext search实现的算法。这个想法是将文本数据拆分为单词,然后将这些数据添加到索引在单词上的表中。 algorithm for building the index比较简单。本地H2全文搜索没有Lucene全文搜索的所有功能,但实现起来要简单得多。

+0

我喜欢这个想法。它其实很简单,我不是很久以前做过这个。 – 2010-09-06 21:53:04

1

blog post介绍了Lucene到目标C.你可以尝试使用代码中的端口,但它似乎有点过时。