database - 提高字符串匹配的性能

标签 database string algorithm caching string-matching

我在一家正在构建 iPhone 应用程序的初创公司工作。我想问几个问题来改进我们用于字符串匹配的算法。

我们有一个数据库,其中包含大量电话号码以及拥有该电话号码的用户的姓名。假设数据库看起来像这样

姓名电话号码


哈里1234

abc 3873

....

此数据库有大量行(大约 100 万行)。当用户打开应用程序时,应用程序会从该人的电话联系人中获取电话号码列表,并将其与数据库进行匹配。我们返回数据库中存在的所有电话号码。现在,我们所做的事情效率非常低。我们以 20 个为一组发送来自电话联系人的电话号码。我们将其与数据库进行匹配。这将导致 num of phone contacts * O(n) 的复杂性。

我想到了一些改进,比如让数据库行按电话号码排序,这样我们就可以进行二进制搜索。除此之外,我们可以在缓存内存中有一个包含大约 10,000 个电话号码的哈希表,我们可以最初搜索这个缓存内存。仅当未命中时,我们才会访问数据库并使用二分查找复杂度为 O(log n) 的数据库进行搜索。

此外,还有发送电话号码进行匹配的问题。我是按原样发送还是将它们作为散列值发送?这对提高性能有影响吗?

还有其他方法吗?

我解释了整个场景,以便您可以更好地了解我的需求

谢谢

最佳答案

如果您已经有一个 SQL Server 数据库,那就让它来处理吧。在电话号码列上创建一个索引(如果您还没有的话)。一次性发送联系人列表中的所有号码(无需除以 20)并与数据库匹配。 SQL 服务器使用的索引可能比您能想出的任何东西都好得多,所以它会非常快。

或者,您可以尝试将数字插入临时表并对其进行查询,但我不知道那样会不会更快。

关于database - 提高字符串匹配的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963479/

相关文章:

c# - 在员工管理系统中实现假期

mysql - XAMPP-无法连接到phpmyadmin

c# - 包含多个值的字符串

java - 在 Java 中,哪个更快 - String.contains ("some text") 或查找相同文本的正则表达式?

algorithm - 查找文件中的前 n 个数字

performance - 广度优先搜索分支因子

sql - 如何在多个数据库表上创建单个触发器

php - 尝试通过 HTML 和 php 将数据插入 Mysql 数据库时出错

c++ - С++ 中的字符串文字是在静态内存中创建的吗?

algorithm - 将一个数分成三部分,并使 lcm(a,b,c) 尽可能小