什么是高基数

高基数列是指数据基本不重复或许均为惟一值的列。典型的高基数列有ID标识,电子邮件地址或许用户名等。一个具备高基数的数据表列的例子是具备一个名为USER_ID的列的USERS表。

这一列蕴含1-n的惟一值。每次在USERS表中创立一个新用户时,将在USER_ID列中创立一个新数字,以惟一地标识它们。由于USER_ID列中保留的值是惟一的,因此该列的基数类型被称为高基数。

假设你的上班中用到了数据库,特意是要处置时序数据,那么或许你就会面对处置高基数数据的应战。

特意是工业物联网(如制作业、石油和自然气、专用事业等)以及一些监控和事情数据上班负载中,期间序列高基数的处置是一个经常出现疑问。高基数也是开发人员经常探讨的一个话题,围绕它经常会有很多疑问。

这里要廓清一个经常出现的混杂点:高基数在时序数据环球中之所以成为如此大的疑问,是由于一些盛行的时序数据库的局限性。假设选用了正确的数据库,高基数数据其实是一个曾经处置了的疑问。

让咱们回过头来首先来定义什么是高基数。

狭义上讲,基数是指一个汇合中的值的数量。有时,汇合的基数很小(低基数),有时或许很大(高基数)。例如,上图中有很多(美味的)M&M,但该数据集的基数十分小(6):

在数据库环球中,基数是指数据库的特定列或字段中蕴含的惟一值的数量。

但是,关于时序数据来说,事情或许变得有些复杂了。时序数据往往与形容该数据的元数据(有时称为“标签”)配对。

通常,主时序数据或元数据会被索引以提高查问性能,这样就可以极速找到婚配一切指定标签的值。时序数据集的基数最典型是定义形式为每个索引列的基数的交叉乘积。

假设有6种色彩的m&m巧克力豆以及5种类型的m&m巧克力豆(个别的、花生的、杏仁的、椒盐脆饼的和脆的),那么咱们的基数如今是6x5 = 30种m&m巧克力豆。有了正确的索引,咱们就能高效地找到一切蓝色的、酥脆的m&m巧克力豆(这是主观上最好的)。

假设你有多个索引列,每个列都有少量的惟一值,那么叉乘的基数或许会变得十分大。这是软件开发人员在议论具备“高基数”的时序数据集时,“高基数”的通常含意。

高基数示例:工业物联网

构想一个物联网场景,在某个采石场,有大型、繁重的设备在启动采矿、破碎岩石和分类岩石这三种作业。

假定有10000件设备,每件设备有100个传感器,运转10个不同的固件版本,散布在100个地点:这个数据集的最大基数变成了10亿[10,000 x 100 x 10 x 100]。如今,假定设备也可以移动,咱们想要存储准确的GPS位置(lat、long)(纬度,经度),并将其用作查问的索引元数据。由于(lat, long)是一个延续的字段(而不是像equipment_id这样的团圆字段),经过对位置启动索引,这个数据集的最大基数如今是有限大的(无界)。

为时序设计的相关型数据库

不同的数据库驳回不同的方法来处置高基数。基本上说,在经常使用高基数数据集时,数据库的性能体现如何可以追溯到它从一开局是如何设计的。

假设你正在处置少量的时序数据并经常使用相关数据库,那么用于索引数据的一种经过验证的数据结构是b树。依赖b树数据结构来索引数据关于高基数数据集有几个好处:

只管时序数据库经常使用其余方法来成功高基数,但经常使用b树结构已被证实是牢靠的。假设你遇到无关高基数的数据疑问,可以留言一同探讨。

卢鑫旺,社区编辑,科班出身的九零后程序员。做过前端页面,写过业务接口,搞过爬虫,钻研过JS,有幸接触Golang,介入微服务架构转型。目前主写Java,担任公司可定制化低代码平台的数据引擎层设计开发上班。

您可能还会对下面的文章感兴趣: