当前位置:网站首页>使用高斯Redis实现二级索引
使用高斯Redis实现二级索引
2022-07-07 17:38:00 【InfoQ】
一、背景
二、场景一:词典补全
2.1 基本方案
ZADD myindex 0 banana:1
ZRANGEBYLEX myindex "[bit" "[bit\xff"
2.2 与频率相关的词典补全
ZRANGEBYLEX myindex "[banana:" + LIMIT 0 1
ZADD myindex 0 banana:1
ZREM myindex 0 banana:1
ZADD myindex 0 banana:2
ZRANGEBYLEX myindex "[banana:" + LIMIT 0 10
1) "banana:123"
2) "banaooo:1"
3) "banned user:49"
4) "banning:89"
ZREM myindex 0 banaooo:1
ZREM myindex 0 banana:123
ZADD myindex 0 banana:122
三、场景二:多维索引
3.1 数据编码
3.2 添加新元素
ZADD myindex 0 000111000011001010
3.3 查询
def spacequery(x0,y0,x1,y1,exp)
bits=exp*2
x_start = x0/(2**exp)
x_end = x1/(2**exp)
y_start = y0/(2**exp)
y_end = y1/(2**exp)
(x_start..x_end).each{|x|
(y_start..y_end).each{|y|
x_range_start = x*(2**exp)
x_range_end = x_range_start | ((2**exp)-1)
y_range_start = y*(2**exp)
y_range_end = y_range_start | ((2**exp)-1)
puts "#{x},#{y} x from #{x_range_start} to #{x_range_end}, y from #{y_range_start} to #{y_range_end}"
# Turn it into interleaved form for ZRANGEBYLEX query.
# We assume we need 9 bits for each integer, so the final
# interleaved representation will be 18 bits.
xbin = x_range_start.to_s(2).rjust(9,'0')
ybin = y_range_start.to_s(2).rjust(9,'0')
s = xbin.split("").zip(ybin.split("")).flatten.compact.join("")
# Now that we have the start of the range, calculate the end
# by replacing the specified number of bits from 0 to 1.
e = s[0..-(bits+1)]+("1"*bits)
puts "ZRANGEBYLEX myindex [#{s} [#{e}"
}
}
end
spacequery(50,100,100,300,6)
四、总结
附录
- 本文作者:华为云数据库GaussDB(for Redis)团队
- 杭州/西安/深圳简历投递:[email protected]
- 更多产品信息,欢迎访问官方博客:bbs.huaweicloud.com/blogs/248875
边栏推荐
猜你喜欢
PV static creation and dynamic creation
Download from MySQL official website: mysql8 for Linux X Version (Graphic explanation)
位运算介绍
AD域组策略管理
Kirin Xin'an joins Ningxia commercial cipher Association
转置卷积理论解释(输入输出大小分析)
Kirin Xin'an with heterogeneous integration cloud financial information and innovation solutions appeared at the 15th Hunan Financial Technology Exchange Conference
Redis——基本使用(key、String、List、Set 、Zset 、Hash、Geo、Bitmap、Hyperloglog、事务 )
Redis master-slave and sentinel master-slave switchover are built step by step
一张图深入的理解FP/FN/Precision/Recall
随机推荐
杰理之开机自动配对【篇】
Tp6 realize Commission ranking
R语言ggplot2可视化:使用ggpubr包的ggqqplot函数可视化QQ图(Quantile-Quantile plot)
L1-028 judging prime number (Lua)
Numpy——2. Shape of array
Matplotlib drawing 3D graphics
How to buy stocks on your mobile phone and open an account? Is it safe to open an account
PMP practice once a day | don't get lost in the exam -7.7
PMP每日一练 | 考试不迷路-7.7
Redis——基本使用(key、String、List、Set 、Zset 、Hash、Geo、Bitmap、Hyperloglog、事务 )
索引总结(突击版本)
648. 单词替换
杰理之测试盒配置声道【篇】
State mode - Unity (finite state machine)
Browse the purpose of point setting
Make this crmeb single merchant wechat mall system popular, so easy to use!
【牛客网刷题系列 之 Verilog进阶挑战】~ 多bit MUX同步器
Research and practice of super-resolution technology in the field of real-time audio and video
9 atomic operation class 18 Rohan enhancement
Specify the version of OpenCV non-standard installation