向量索引压测步骤

准备工作

image.png

image.png

解压后使用目录中的gist_base.fvecs

  • python3及相关库

h5py
json
numpy
sklearn
alibabacloud_ha3engine_vector

生成数据

  • 使用prepare_data.py脚本,脚本支持hdf5/fvecs/bvecs/ivecs格式的向量数据,以hdf5格式作为例子

python3 prepare_data.py -i ./gist-960-euclidean.hdf5 
  • 脚本执行完成后,当前目录下会产生一个data/子目录

    • 生成文件名为gist-960-euclidean.hdf5.data

    • 检查生成的数据行数是否完整

wc -l data/gist-960-euclidean.hdf5.data

1000000 gist-960-euclidean.hdf5.data

购买OpenSearch向量检索版实例

购买实例请参考购买OpenSearch向量检索版实例

添加表

详情可参考:

推送数据

  • 使用push_data.py脚本推送数据

  • 参数

    • 表名-t:table_name

    • 用户名-u:user_name

    • 密码-p:password

    • 实例ID-e:instance_id

python3 push_data.py -i data/gist-960-euclidean.hdf5.data  -t gist -u ${user_name} -p ${password} -e ${instance_id}

生成query

  • 使用prepare_query.py脚本从原始数据中随机生成query

python3 prepare_query.py -i gist-960-euclidean.hdf5 -c 10000 -t gist
  • 脚本会在data/文件夹下生成query.dataquery文件

使用wrk进行压测

git clone https://github.com/wg/wrk.git
  • 使用search.lua进行测试

    • 复制到脚本目录下

cp search.lua wrk/scripts/
  • 计算签名并更改脚本的request方法中的header["authorization"]信息

-- wrk 运行阶段,随机选取query,构造具体发送的请求
request = function ()
  local query = query_table[count]
  count = (count + 1)%query_count
  local headers = {}
  headers["authorization"] = "Basic xxxx" -- 签名信息
  headers["Content-Type"] = "application/json"
  return wrk.format("POST", nil, headers, query)
end

  • 开始压测

    • -c连接数(并发数)

    • -t发送请求的线程数

    • -d指定压测时间

    • -s指定脚本

    • --latency打印详细压测结果

./wrk -c24 -d100s -t8 -s scripts/search.lua http://ha-cn-xxxxxx.ha.aliyuncs.com/vector-service/query --latency

查看指标

脚本下载