【发布时间】:2020-07-16 20:32:35
【问题描述】:
我需要创建一个应用程序,让我能够尽快获取具有特定条件的用户的电话号码。例如,我们在 sql 表中有 4 列(地区、收入、年龄 [和电话号码本身的第 4 列])。我想从表格中获取特定地区和收入的电话号码。只做一个 sql 查询将无济于事,因为它需要大量时间。数据库每天更新 1 次,我有时间按照自己的意愿准备数据。
问题是:您如何使获取具有特定条件的电话号码的过程尽可能快。 O(1) 在最好的情况下。考虑将 sql 表中的值存储在 RAM 中以获得最快的访问速度。
我想出了以下想法:
- 为每个电话号码创建一个比特集。如果特定条件为假,则为 0,如果条件为真,则为 1。但我不确定是否可以为没有布尔值的列实现它。
- 用电话号码创建一个向量。
- 使用电话号码的位集创建一个向量。
- 要获取电话号码 - 迭代第二个向量并将位集与所需的位集进行比较。
这根本不是 O(1)。而且我仍然不知道如何处理非布尔列。我想也许可以用 std::unordered_map 做一些好事(所有电话号码都是唯一的)或者用矢量和掩码改进我的想法。
附: SQL 表占用 4GB 内存,我最多可以在 RAM 中存储 8GB。共有 500 列。
【问题讨论】:
-
你是说你可以查询这 500 列中的任何一个吗?
-
该程序应为任何请求提供电话号码,是的
标签: c++ sql algorithm performance data-structures