基于键值存储的分布式时序相似性搜索方法(软件学报)

摘 要: 时序相似性搜索是时序数据分析最基本的操作之一, 具有广泛的应用场景. 针对现有分布式算法无法应

对维度增长、扫描范围过大和相似性计算耗时的问题, 提出一种面向键值存储的分布式时序相似性搜索方法

KV-Search. 首先对时序数据分块, 并设计其键值存入键值数据库, 解决了时序数据维度高且不断增长的问题; 其

次, 基于切比雪夫距离计算其下界, 并利用键值范围扫描提前过滤无效数据, 减少了数据传输; 最后, 利用基于分

块的时序表示计算距离下界, 避免了更高维度真实数据的计算, 加快了查询效率. 使用 HBase 实现了 KV-Search,

并利用真实的大规模数据集做了大量实验. 实验结果表明, KV-Search 算法在效率和扩展性方面均优于基准实验

背景:时序相似性查询, 即查询与给定序列最相似的 k 个序列, 是最常用的时序分析算子之一, 可应用于推荐、聚类和异常检测等上层应用

(1)主要挑战

第一, 时序数据基数大, 这就意味着传统的两两计算相似性哪怕是一种线性解决方案, 即仅需要扫描一遍数据库, 其耗时也是难以接受的

第二, 时序数据维度高, 两条时序数据计算相似性的耗时也随之增加, 即 f(n)与 n一般成正比关系, 最终体现在总体查询时间的增加

第三, 时序数据是不断产生的, 即其基数和维度均不断增加, 这给算法的设计带来了一定难度.

(2)研究现状

主要有两种处理方式

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_大数据

框架:

本文设计并实现了一种基于键值存储的分布式时序相似性搜索方法. 该工作是京东城市时空数据引擎JUST (https://just.urban-computing.cn/)的一部分, 命名为 KV-Search.

定义 3(时序相似性搜索, time series similarity search).给定时序数据集、 查询时序 Q 与其对应时间段T=[i,j], 1≤i≤j≤n 以及近邻个数 k, 时序相似性搜索指基于切比雪夫距离在中找出与 Q 最相似的 k 个序列.若令R为时序相似搜索的结果集

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_搜索_02

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_big data_03

Key-Value结构设计

HBase 采用键值对 KeyValue 的形式进行列存储,, 其中, RowKey 为其行键, 标识唯一一行

一般的Key-Value设置

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_big data_04

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_大数据_05

对其中的每个分块进行再次划分实现更小化划分块

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_键值_06

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_大数据_07

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_搜索_08

算法设计:

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_数据集_09

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_大数据_10

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_搜索_11

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_搜索_12

实验

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_键值_13

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_数据集_14

python 如何两两对比时间序列的相似度画热图 时间序列相似性搜索_键值_15