|批量随机键值的查询优化( 二 )
本文插图
利用索引进行批量键值查找:
本文插图
A1:这里待查找键值没有排序 , 因为 A4 的 T.icursor 中的 A.contain 会自动对 A 进行排序 。
A3:其中 @3 的意思是将 id 键的多级索引的更多级缓存预先加载进内存 。 经过 index@3 预处理 , 第一遍查询时间就能达到索引被缓存后才能达到的极限值 。 另外 , 还有 index@2 , 相比 @3 缓存的索引层级更少 , 占用内存也更小 。
三、 复杂键值
3.1 非整数键值
非整数键值 , 比如车牌号 , 通常是由字符与数字组合成的字符串 。 因为字符串比较要比整数的比较复杂得多 , 比较速度也更慢 。 所以可以把这种有规律或者可枚举的字符串转为简单的整数类型 , 提升性能 。
3.2 多字段键值
多字段键值 , 可以直接利用多个字段键进行查找 , 但集合的存储和比较都要慢一些 。 为了获取高性能 , 更常用的办法是把多字段键拼成单字段键 。 对于有规律或者可枚举的串 , 可以将串数字化后 , 与其他数字化后的键值合并为一个新的整数键值 。
3.3 举例
本文插图
其中 pnum 和 pdate 两个字段作为联合主键确定一条记录 。
3.3.1 多字段键直接查找
使用 SPL , 按以上数据结构 , 创建组表(和单键值类似 , 多键值也需要确保键值有序 , 可以使用cs.sortx()函数排序 , 具体方法详见函数参考 。 ):
本文插图
多字段键组表建立索引时需要包含多个维 。 例如 , 以上数据结构中的 pnum 和 pdate 两个维:
本文插图
多字段键组表查询时可以使用 n 元组 。 例如 , 以上数据结构中的 [pnum,pdate]:
本文插图
3.3.2 数字化合并键值
用以上的数据结构做个例子 , 来说明如何进行数字化合并键值 。
pnum是个串 , 一共 7 位 , 第一位是一个随机大写英文字母 , 后六位都是数字 , 可以将字母用 ACS 码值表示 , 与后六位数字拼接后转为整数 。 pdate 是一个日期类型字段 , 可以将 2007-01-01 定为起始日期 , pdate 与起始日期间隔的天数可以作为该字段的数字化后的值 。
pnum中大写英文字母的 ACS 码是两位数 , 与后面的 6 位数加起来是 8 位数 , 而日期 pdate 的跨度范围为 10 年 , 换算成天是个 4 位数 , 将数字化后的 pnum*10000+pdate , 就得到了一个新的 12 位的数字化字段 , pid 。
本文插图
这样就得到了一个单字段键的组表“conbi.ctx” , 其数据结构如下:
本文插图
然后按照 ''单一整数键值'' 中的做法就可以处理了 。
四、 并行技术
4.1 数据拆分
多线程并行 , 是把数据分成 N 份 , 用 N 个线程查询 。 但如果只是随意地将数据分成 N 份 , 很可能无法真正地提高性能 。 因为将要查询的键值集是未知的 , 所以理论上也无法确保希望查找的数据能够均匀分布在每一份中 。 比较好的处理方式是先观察键值集的特征 , 从而尽可能地进行数据的均匀拆分 。
推荐阅读
- 路遇十三|提取阿里、淘宝小视频软件,可快速批量提取淘宝视频事前准备:步骤演示:
- 职场办公学习|每次进货价格不一样,Excel批量计算利润
- 南方都市报|拼多多淘金产业带,批量孵化美妆新国货,男士化妆品被盯上了
- 懂懂笔记|灰产租售“靠谱”直播号,商家千元备战双十一靠谱的直播账号可买可租批量“养号”,上量容易养号麻烦,买号省事
- |如何自动批量识别中通速递快递是否签收?什么样的工具比较好用?
- 科学|耶鲁大学最新实验推翻了量子随机论?
- 科学出版社|宋永华研究团队:新能源电力系统的随机过程分析与控制
- 账号|拟禁止批量注册囤积 公众账号将加严管理
- 重命名|Renamer for Mac(文件批量重命名软件)v6.0.6中文版
- 微信|好消息!微信 3.0.0 正式上线,可批量删除好友