最好的方法来快速匹配针对大型干草堆

时间:2014-04-27 03:37:23

标签: ios sqlite core-data

想想员工管理系统应用程序,现在添加一个生物识别机器。当用户进入和离开建筑物时,用户可以滑动手指以进出系统。

到目前为止,我的应用程序目前可以成功注册从我的生物识别机器检索到的指纹模板,并将其保存到blob / varchar字段的数据库中。

我在我创建的本地mac应用程序中拥有超过3000个注册用户。现在我正在实现匹配算法,并想知道我是否应该:

  1. 将所有3000个指纹模板从本地数据库 - 大海捞针 - 加载到NSMutableArray,其中一个数据库调用将在应用程序启动时完成,然后匹配用户的指纹模板 - 针对大海捞针对于进入或离开建筑物的每个用户;

  2. 多次SQL调用一次返回haystack的一个元素,将其与针进行比较,如果它们不匹配,则从haystack返回另一个元素,直到它们匹配为止。或者,

  3. 抓住干草堆的一部分(一次说100个指纹模板)并将其加载到NSMutableArray中,然后将针与该干草堆子集匹配。

  4. 哪种方法最适合快速闪电?

    我正在使用atm的指纹SDK在指纹验证本身方面意味着闪电般快,但我需要处理数据库方面的事情并自己管理干草堆和针头,理想情况下这样做要快太。

    我目前正在使用SQLite,如果我需要采用Cocoa Core Data来实现我希望实现的更好的方法,那么我全神贯注并且可以采用该系统来提供更好的用户体验速度

    以下是一个指纹模板数据在基本64位编码字符串格式中的样子。

    enter image description here

2 个答案:

答案 0 :(得分:2)

3000条记录看起来像一个小干草堆。模板有多大?如果您需要进行复杂的比较,我几乎肯定会把它全部加载到内存中,前提是模板不是很大。

各种方法听起来很难实施。你现在采用哪种方式,以及性能瓶颈是什么?首先简单地实施,然后看看是否存在问题。通常没有,你花了很多时间把事情搞得一团糟。

答案 1 :(得分:2)

3800 base 64 chars只有2500字节...... 只是测试它,尝试strnstr(空字符将阻止它搜索),我打赌你可以每秒搜索数百次。 一定要搜索解码因为对齐你的针可能看起来像很多不同的东西。