使用加密散列和bloom过滤器的匿名链接
anonlink的Python项目详细描述
安装
直接从pypi安装:
pip install anonlink
或从源安装:
pip install -r requirements.txt pip install -e .
< H3>替代-手动编译C++库
对于Mac,具有:
g++ -std=c++11 -mssse3 -mpopcnt -O2 -Wall -pedantic -Wextra -dynamiclib -fpic -o _entitymatcher.dll dice_one_against_many.cpp
对于Linux,具有:
g++ -std=c++11 -mssse3 -mpopcnt -O2 -Wall -pedantic -Wextra -shared -fpic -o _entitymatcher.so dice_one_against_many.cpp
基准
您可以使用以下命令运行基准:
$ python -m anonlink.benchmark Anonlink benchmark -- see README for explanation ------------------------------------------------ 100000 x 1024 bit popcounts Implementation | Time (ms) | Bandwidth (MiB/s) | Throughput (1e6 popc/s) Python (bitarray.count()): | 17.78 | 686.54 | 5.62 Native code (no copy): | 1.00 | 12243.76 | 100.30 Native code (w/ copy): | 344.17 | 35.47 | 0.29 (99.7% copying) Threshold: 0.5 Size 1 | Size 2 | Comparisons | Total Time (s) | Throughput | | (match %) | (comparisons / matching)| (1e6 cmp/s) -------+--------+------------------+-------------------------+------------- 1000 | 1000 | 1e6 (50.20%) | 0.249 (88.6% / 11.4%) | 4.525 2000 | 2000 | 4e6 (50.51%) | 1.069 (88.5% / 11.5%) | 4.227 3000 | 3000 | 9e6 (50.51%) | 2.412 (85.3% / 14.7%) | 4.375 4000 | 4000 | 16e6 (50.56%) | 4.316 (83.6% / 16.4%) | 4.434 Threshold: 0.7 Size 1 | Size 2 | Comparisons | Total Time (s) | Throughput | | (match %) | (comparisons / matching)| (1e6 cmp/s) -------+--------+------------------+-------------------------+------------- 1000 | 1000 | 1e6 ( 0.01%) | 0.017 (99.8% / 0.2%) | 59.605 2000 | 2000 | 4e6 ( 0.01%) | 0.056 (99.8% / 0.2%) | 71.484 3000 | 3000 | 9e6 ( 0.01%) | 0.118 (99.9% / 0.1%) | 76.500 4000 | 4000 | 16e6 ( 0.01%) | 0.202 (99.9% / 0.1%) | 79.256 5000 | 5000 | 25e6 ( 0.01%) | 0.309 (99.9% / 0.1%) | 81.093 6000 | 6000 | 36e6 ( 0.01%) | 0.435 (99.9% / 0.1%) | 82.841 7000 | 7000 | 49e6 ( 0.01%) | 0.590 (99.9% / 0.1%) | 83.164 8000 | 8000 | 64e6 ( 0.01%) | 0.757 (99.9% / 0.1%) | 84.619 9000 | 9000 | 81e6 ( 0.01%) | 0.962 (99.8% / 0.2%) | 84.358 10000 | 10000 | 100e6 ( 0.01%) | 1.166 (99.8% / 0.2%) | 85.895 20000 | 20000 | 400e6 ( 0.01%) | 4.586 (99.9% / 0.1%) | 87.334
表的解释如下。第一节比较 通过(i)python位数组库和 (ii)汇编程序中的本机代码实现。后者 实施的衡量方法有两种:第一种是 计算popCounts所用的时间,而第二个包括 从正在运行的python实例中复制数据所需的时间 将结果复制回python。"%正在复制"度量值是" 复制所花时间的比例。
第二部分包括两个表,用于测量 骰子系数比较函数。这两张表对应于 "匹配阈值"的两种不同选择,0.5和0.7 用于描述两种不同的性能方案。自从 用于比较的数据是随机生成的,第一个阈值 值将导致大约50%的候选人"匹配",而 第二个阈值将导致0.01%的候选项匹配 (这些值在"match%"列中报告)。在这两种情况下, 所有超过阈值的匹配都将返回并传递给 求解器。在第一种情况下,大量的匹配意味着 把时间花在保持候选人的秩序上 k 可以返回匹配项。在后一种情况下, 候选匹配意味着吞吐量主要由 比较代码本身。
最后,总时间列包括 计算(稀疏)相似矩阵所花时间的比例 比较和 贪婪的解决者。后者取决于相似性的大小 矩阵,它将大约为 比较*match%/100