timeseries:hbase与opentsdb/kdb,用于带条件的范围查询

oalqel3c  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(508)

我有大约10万用户。对于每个用户,我(每分钟)不断更改hbase中存储的一组值(列)。行键看起来像 userId-timestamp ,在哪里 timestamp 四舍五入到分钟。数据集不断增长,因为每一分钟我又得到100000行。
我需要低延迟查询(<0.5ms),如下所示: (userId, fromTimestamp, toTimestamp, step) ,在哪里 from - to 最多可包含1000个项目。所以我使用hbase的范围查询。
棘手的是 step param的值可以在[1,5,15,603601440]中。如果 step=5 ,查询应返回5th,10th,15th,。。。分钟值。所以呢 step=1440 是非常昂贵的查询。
你能解释一下opentsdb或者kdb对于这个用例来说是更快的吗?为什么?

xv8emn3q

xv8emn3q1#

为应用程序选择数据库系统取决于各种因素,因此回答您的问题并不是那么简单。
但是基于您提供的高级细节,kdb无疑是一个可行的选择。
kdb是一个时间序列、面向列的数据库。根据您的详细信息,您的应用程序似乎有相同的要求。
您的查询主要针对2列(userid和timestamp),其中一列是time数据类型。kdb直接支持日期/时间数据类型,旨在为此类数据提供更好的性能。
一般来说,在这种情况下,面向列的数据库比面向行的数据库性能更好,因为它们读取的数据更少,并且可以更有效地管理和查询数据,因为数据的类型对于列是统一的,所以可以应用其他优化。
数据大小:100000/分钟=600万/小时。从kdb的Angular 来看,这是一个中等大小的表。若系统设计得当,kdb查询不会在那个大小的表上花费太多的执行时间。
属性:kdb还支持表上的属性,如排序的、唯一的、分组的和分开的。属性有助于查询执行得更好。例如,可以存储按userid排序的数据,然后按每个userid的时间戳排序。排序属性将使查询使用二进制搜索而不是线性搜索。类似地,其他属性也有其他有用的特性。
查询语言:查询语言是任何数据库系统的重要组成部分。kdb使用q语言。它是一种功能强大的向量语言,有许多函数可以对向量进行操作。
类似地,您可以在kdb中很容易地查询步骤。但正如您所提到的,要获得目标延迟,这可能是一个棘手的部分。但是有多种方法可以设计您的系统来提高这个用例的性能。
kdb还有其他有用的特性来管理数据,比如将数据分发到多个节点、设置不同的进程和进程间通信。
这一切都归结为如何设计系统以及如何将数据组织到表中。
正如我在开始时所说的,选择数据库取决于各种因素。我建议您在您的机器上设置kdb(非常简单),并对一小部分数据进行测试,以获得这个想法。

相关问题