假设1000万条数据,每条数据4个特征值,每个特征值1 byte,共40 MB数据,可以全加载到内存里。
方法1:
按照4,3,2,1个特征值匹配依此排好序,依次从排好序的列表里二分法查询。 比如假设4个特征值都匹配, 排序结果:
AA AA AA AA : id list
AA AA AA AB : id list
AA AA AA AC : id list
…
假设只有三个特征值匹配,
AA AA AA None : id list
AA AA AB None : id list
AA AA AC None : id list
…
AA AA None AA : id list
AA AA None AB : id list
AA AA None AC : id list
…
类似的可以建立2个、1个匹配的排序列表。
方法2:
同上,但用哈希表,不用排序
方法3:
每个特征值单独排序,用二分查找法找出每个目标特征值最靠近的点。 四个点就连成了一个最佳匹配线,但线上可能没有完美匹配的数据。 在每个匹配点上下动一格,寻找次优解,不行就再动一格。
方法4:
机器学习, 训练一个神经网络模型预测。
方法 5:
算出每行数据与原点(0, 0, 0, 0) 的距离差, 目标与到原点的距离 约等于 最优解到原点的距离。 以此为依据缩小搜索范围。
方法6:
分布式计算,用一万台机器,每台机器比对一千条数据。
不论选择何种算法,都可以加一层cache, 遇到最近查过的数据,直接从cache里返回结果,不用读数据库。
【 在 BAIYUXIONG 的大作中提到: 】
: 需求是这样:
: 数据库中有数千万条数据,每条数据有4个特征值,外部任意输入4个特征值,如何快速找到匹配度最高的那一条。
: 如:
: ....................
- 来自「最水木 for iPhone 11 Pro Max」
※ 修改:·galaxy123 于 Dec 4 10:36:00 2021 修改本文·[FROM: 173.63.213.*]
※ 来源:·最水木 客户端·[FROM: 173.63.213.*]
修改:galaxy123 FROM 173.63.213.*
FROM 173.63.213.*