暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

什么是高基数?

原创 eternity 2022-07-25
2977

高基数是指具有非常罕见或唯一值的列。高基数列值通常是标识号、电子邮件地址或用户名。具有高基数的数据表列的一个示例是具有名为USER_ID的列的USERS表。此列将包含1-n的唯一值。每次在USERS表中创建新用户时,都会在user_ID列中创建一个新编号,以唯一地标识他们。由于USE_ID列中的值是唯一的,因此该列的基数类型将被称为高基数。

如果您使用的是数据库,尤其是时间序列数据,那么您可能面临着处理高基数数据的挑战

特别是,时间序列高基数是工业物联网(例如制造业、石油和天然气、公用事业等)以及一些监测和事件数据工作负载中的常见问题。

高基数也是开发人员经常讨论的一个话题,围绕它经常会有很多问题。

为了澄清一个常见的困惑:由于一些流行的时间序列数据库的局限性,高基数在时间序列世界中只成为一个如此大的问题。实际上,如果选择正确的数据库,高基数数据实际上是一个已解决的问题。

让我们后退一步,首先定义高基数。
微信图片_20220724144849.jpg

什么是高基数?

广义上讲,基数是指一个集合中的值的数量。有时,集合的基数很小(低基数),有时可能很大(高基数)。例如,上图中有很多(美味的)M&M,但该数据集的基数非常小(6):
微信图片_20220724144948.jpg

在数据库世界中,基数是指数据库的特定列或字段中包含的唯一值的数量

然而,有了时间序列数据,事情变得有点复杂。

时间序列数据往往与描述该数据的元数据(有时称为“标记”)配对。通常,主要时间序列数据或元数据被索引以提高查询性能,以便您可以快速找到与所有指定标记匹配的值。

时间序列数据集的基数通常由每个单独索引列的基数的叉积定义。因此,如果有6种颜色的M&Ms,还有5种类型的M&Ms(平原、花生、杏仁、椒盐卷饼和脆皮),那么我们的基数现在是6x5=30个M&Ms的总选项。拥有正确的索引将使我们能够有效地找到所有蓝色、脆脆的M&M(客观上是最好的)。

如果有多个索引列,每个列都有大量的唯一值,则该叉积的基数可能会非常大。这就是软件开发人员在谈论具有“高基数”的时间序列数据集时通常的意思。

让我们来看一个例子。

高基数示例:工业物联网

想象一个物联网场景,在该场景中,在某个采石场中有大型、重型设备开采岩石、破碎岩石和分拣岩石。

假设有10000个设备,每个设备有100个传感器,运行10个不同的固件版本,分布在100个站点:
image.png

然后,该数据集的最大基数变为10亿[10000 x 100 x 10 x 100]。

现在想象一下,设备也可以移动,我们希望存储精确的GPS位置(纬度,经度),并将其作为索引元数据进行查询。由于(lat,long)是一个连续字段(而不是像equipment_id这样的离散字段),通过位置索引,该数据集的最大基数现在是无限大(无界)。

为时间序列设计的关系数据库如何处理高基数

不同的数据库采用不同的方法来处理高基数。最终,当使用高基数数据集时,数据库的性能可以追溯到它从一开始是如何设计的。

如果您正在处理大量时间序列数据并使用关系数据库,一种经验证的数据索引结构是B树

依赖B-树数据结构索引数据对于高基数数据集有几个好处:

  • 您可以清楚地了解数据库的性能。只要要查询的数据集的索引和数据适合内存(这是可以调整的),基数就没有问题。

  • 您可以控制要索引的列,包括在多个列上创建复合索引的能力。您还可以随时添加或删除索引,例如,如果您的查询工作负载发生变化。

  • 您可以在离散字段和连续字段上创建索引,特别是因为B-树可以很好地使用以下任何运算符进行比较:<,<=,=,>=,>,BETWEEN,IN,IS NULL,IS NOT NULL。我们的示例从上面的查询(“SELECTfrom sensor\U data WHERE mem\U free=0”和“SELECTfrom sensor\U data WHERE temperature>90”)将以对数或O(对数n)时间运行。

虽然时间序列数据库使用其他方法来实现高基数,但使用B树结构已被证明是可靠的。(有关两种流行的时间序列数据库比较的更多信息,请单击此处。)

如果您对高基数数据有问题,请随时在下面发表评论。

原文标题:What Is High Cardinality?
原文作者:Ajay Kulkarni
原文链接:https://dzone.com/articles/what-is-high-cardinality

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论