学习型索引----ALEX代码的一些记录

系列文章目录

学习型索引结构---开山之作学习 The Case for Learned Index Structures

学习索引--A Critical Analysis of Recursive Model Indexes(2021) (上)

学习型索引结构--ALEX: An Updatable Adaptive Learned Index

学习型索引----ALEX代码的一些记录


目录

系列文章目录

前言

一、配置

二、步骤

1.下载

​编辑

2.测试程序

 三、三个可以编译和运行的程序

总结


前言

        前段时间看了ALEX的论文,所以就趁热打铁,熟悉熟悉代码,没准做对比实验会用到。


一、配置

https://github.com/microsoft/ALEX

     官网地址,是开源的。 

二、步骤

1.下载

git clone https://github.com/microsoft/ALEX.git --recursive

2.测试程序

         官方是windows和linux都可以,所以我为了方便,就是用的windows,没有使用VS,因为我感觉VS使用CMake是比较麻烦的,我用的是Clion.

         打开就是我这个差不多界面,然后就是运行Cmake,它就会配置,这个运行之后它是会提示缺少文件,或者文件下载错误。

         报错的主要是我圈出来的地方,你需要把网址输入到你的浏览器,然后把它下载下来,存放到应该存放的地方。这个学过Cmake的应该是看的懂的,就不多叙述了。

        下完之后,重新构建以下,就完美通过了。先切换到example,运行一下。

         可以看到,我们已经有结果出来了。到这里,就已经基本完成了。


 三、三个可以编译和运行的程序

         ALEX\src\examples\main.cpp

        首先介绍的是ALEX 的示例程序,具体代码下载之后查看

        

        这是一个简短的示例程序,演示了 ALEX(Adaptive Lexicographic Order Index)索引库的 API 使用方法。

        ALEX 是一种学习索引结构,用于高效地存储和管理键值对数据。在这个示例程序中,演示了 ALEX 索引库的一些基本操作:

  1. 创建一些合成数据:生成一组键值对,其中键是介于 0 到 99 之间的稠密整数,值是随机数。

  2. 使用 ALEX 索引的 API 完成以下操作:

    • bulk_load:批量加载数据,将 0 到 99 的键值对加载到索引中。
    • insert:插入数据,将 100 到 199 的键值对插入索引,使得索引中共有 200 个键值对。
    • erase:删除数据,删除键值在 0 到 9 范围内的数据,使得索引中共有 190 个键值对。
    • 迭代遍历索引中的数据,并根据键是否为偶数,更新其对应的值。
    • 使用 lower_boundupper_bound 查找指定键的数据。
    • 使用 find 查找不存在的键,检查其是否存在于索引中。
  3. 输出一些统计信息,包括最终的键值对数量和插入操作的数量。

        该示例程序展示了如何使用 ALEX 索引库进行数据的插入、删除、查找和迭代等操作。在实际应用中,ALEX 索引可以用于更大规模的数据集,以提高索引和查询的性能。

运行结果

        ALEX\src\benchmark\main.cpp 

         接下来我运行的是一个简单的基准测试,用于测量 ALEX 上运行点查找和插入的吞吐量。

 按照github上面写的我输入参数。

./cmake-build-debug/benchmark --keys_file=resources/sample_keys.bin --keys_file_type=binary --init_num_keys=500 --total_num_keys=1000 --batch_size=1000 --insert_frac=0.5

运行得到结果(我是直接在clion的终端窗口中输入参数的)

        benchmark\main.cpp 这段代码是一个简单的基准测试程序,用于在 ALEX(Approximate Locality-sensitive Hashing for Indexing) 数据结构上运行一系列点查找(lookups)和插入(inserts)操作,并测量它们的吞吐量(operations per second)。

        程序首先解析命令行参数,包括文件路径、数据类型、初始键数量、总键数量、批处理大小等信息。然后从文件中读取键数据,并与随机生成的有效载荷(payload)组合。

        接下来,程序创建 ALEX 索引,并使用 bulk_load 方法进行初始键的批量加载。接着,程序执行工作负载,即进行一系列的查找和插入操作。

工作负载包括以下步骤:

  1. 进行查找操作:随机选择一些键,并使用 get_payload 方法在 ALEX 索引中查找对应的有效载荷。如果找到了,则将有效载荷的值累加到 sum 变量中,并计算查找操作的时间。
  2. 进行插入操作:随机选择一些键,并使用 insert 方法将它们插入到 ALEX 索引中。记录插入操作的时间。
  3. 检查工作负载结束条件:如果所有的键都被插入完毕,或者工作负载的执行时间超过了设定的时间限制,则终止工作负载。

        程序在运行过程中输出了一些统计信息,包括每个批次的吞吐量和累计吞吐量。最后输出整个基准测试的累计统计结果,包括完成的批次数、总操作数、吞吐量等。

        注意,该程序允许根据命令行参数修改数据类型。

        ALEX\test\unittest_main.cpp

        单元测试

        

     输出

     

 

总结

        这是这个代码库提供的三个可运行程序的执行输出结果。记录一下。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值