在上一篇中我们了解了bitset索引的基本用法,本篇开始学习bitset索引更新及一些复杂查询。
1.bitset索引更新
因为我们的数据是在系统启动时全部加载进内存,所以当数据库数据发生变化时要实时通知到内存,可以使用消息队列的方式实现:将新增或者修改的数据写入kafka,然后在索引服务中从kafka中读出数据更新索引.
在UserIndexStore类中增加更新索引方法:
1 | /** |
在BitSetIndexModel类中增加clear()方法
1 | /** |
2.bitset进阶查询
‘>=’,’<=’,between and
在BitSetIndexModel类中增加如下方法:
1 | public List<String> getHigherList(String str) { |
在UserIndexStore中增加以下方法
1 | /** |
测试,查询年龄在16-17之间的北京女孩。
1 | public class BitSetTestRange { |
1 | 单次查询时间为:22ms |
相比”=”查询,区间查询速度慢了一些,但还在预期之内。
总结
以上就实现了一个bitset索引,支持索引创建,更新,查询。并且因为没有传统的网络传输和磁盘io,所以速度非常快,基本上响应时间都在10ms以内。如果需要我可以在下一篇使用spring cloud搭建一个较完整的demo,供大家参考使用。