InfluxDB 的时间流是什么? - Amazon Timestream
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

InfluxDB 的时间流是什么?

适用于InfluxDB的Amazon Timestream是一个托管的时间序列数据库引擎,它使应用程序开发人员和 DevOps 团队可以轻松地使用开源为实时时间序列应用程序运行InfluxDB数据库。 Amazon APIs借助适用于 InfluxDB 的 Amazon Timestream,可以轻松设置、操作和扩展时间序列工作负载,这些工作负载可以用个位数毫秒的查询响应时间来回答查询。

适用于 InfluxDB 的 Amazon Timestream 允许你在其 2.x 分支上访问熟悉的 InfluxDB 开源版本的功能。这意味着你现在已经在现有InfluxDB开源数据库中使用的代码、应用程序和工具应该可以与适用于InfluxDB的Amazon Timestream无缝协作。适用于 InfluxDB 的 Amazon Timestream 可以自动备份您的数据库,并使您的数据库软件与最新版本保持同步。此外,适用于 InfluxDB 的 Amazon Timestream 可以轻松使用复制来增强数据库可用性并提高数据持久性。与所有 Amazon 服务一样,无需前期投资,您只需为使用的资源付费。

数据库实例

数据库实例是在云中运行的独立数据库环境。它是 InfluxDB 版 Amazon Timestream 的基本组成部分。一个数据库实例可以包含多个用户创建的数据库(对于 InfluxDb 2.x数据库,则可以包含组织和存储桶),并且可以使用与访问独立的自管理的InfluxDB实例相同的客户端工具和应用程序进行访问。使用 Amazon 命令行工具、Amazon Timestream InfluxDB API 操作或,可以轻松创建和修改数据库实例。 Amazon Web Services Management Console

注意

适用于 InfluxDB 的 Amazon Timestream 支持使用 Influx 操作和 Influx API 用户界面访问数据库。适用于 InfluxDB 的 Amazon Timestream 不允许直接访问主机。

InfluxDB 实例最多可以有 40 个 Amazon Timestream。

每个数据库实例都有一个数据库实例名称。在与适用于 API Influ Amazon CLI xDB 的 Amazon Timestream 和命令交互时,客户提供的这个名称可以唯一标识数据库实例。在一个 Amazon 区域中,该客户的数据库实例名称必须是唯一的。

数据库实例名称是 Timestream 为 InfluxDB 分配给您的实例DNS的主机名的一部分。例如,如果您将 influxdb1 指定为数据库实例名称,Timestream 将自动为您的实例分配一个DNS终端节点。示例终端节点是influxdb1-3ksj4dla5nfjhi.us-east-1.timestream-influxdb.amazonaws.com,其中influxdb1是您的实例名称。

在示例端点中influxdb1-3ksj4dla5nfjhi.us-east-1.timestream-influxdb.amazonaws.com,字符串3ksj4dla5nfjhi是由生成的唯一账户标识符 Amazon。示例3ksj4dla5nfjhi中特定区域中指定账户的标识符不会发生变化。因此,该账户创建的所有数据库实例共享相同的固定标识符。考虑固定标识符的以下特征:

  • 目前 InfluxDB 的 Timestream 不支持数据库实例重命名。

  • 如果您删除并重新创建具有相同数据库实例标识符的数据库实例,则端点相同。

  • 如果您使用同一个账户在不同的区域创建数据库实例,则内部生成的标识符会有所不同,因为该区域不同,如在 influxdb2.4a3j5du5ks7md2.us-west-1.timestream-influxdb.amazonaws.com 中。

每个数据库实例仅支持一个 InfluxDB 数据库引擎的时间流。

创建数据库实例时,InfluxDB 要求指定组织名称。一个数据库实例可以托管多个组织和与每个组织关联的多个存储桶。

InfluxDB 版 Amazon Timestream 允许您在创建过程中为数据库实例创建主用户账户和密码。该主用户有权创建组织、存储桶,以及对您的数据执行读取、写入、删除和更新插入操作。您还可以访问InfluxUI并检索您的操作员令牌。这是您的首次登录。从那里,您还可以管理所有访问令牌。创建数据库实例时必须设置主用户密码,但您可以随时使用 Influx、Influx 或 Influx API U CLI I 对其进行更改。

数据库实例类

数据库实例类决定了 Amazon fi UbfkyxDB Timestream 数据库实例的计算和内存容量。您需要的数据库实例类取决于您的处理能力和内存要求。

数据库实例类由数据库实例类类型和大小共同组成。例如,db.influx是一种内存优化的数据库实例类类型,适用于与正在运行 InfluxDb 的工作负载相关的高性能内存要求。在db.influx实例类类型中,db.influx.2xlarge是一个数据库实例类。这个班级的大小是 2x large。

有关实例类定价的更多信息,请参阅亚马逊 Timestream for InfluxDB 定价。

数据库实例类类型

适用于 InfluxDB 的 Amazon Timestream 支持以下用例的数据库实例类,这些用例针对 InfluxDB 用例进行了优化。

  • db.influx—这些实例类非常适合在开源 InfluxDB 数据库中运行内存密集型工作负载

数据库实例类的硬件规格

以下术语描述了数据库实例类的硬件规格:

  • v CPU

    虚拟中央处理单元的数量 (CPUs)。虚拟CPU是一种容量单位,可用于比较数据库实例类别。

  • 内存 (GiB)

    分配给数据库实例的(以 Gibibytes 为单位)。RAM内存和 v 之间的比例通常是一致的CPU。举个例子,以 db.influx 实例类为例,它的内存与 v 之CPU比类似于 EC2 r7g 实例类。

  • 针对涌入进行了优化

    数据库实例使用经过优化的配置堆栈,并为输入/输出提供额外的专用容量。这种优化通过最小化输入/输出与来自您实例的其他流量之间的争用,为您提供最佳性能。

  • 网络带宽

    与其他数据库实例类有关的网络速度。在下表中,您可以找到有关适用于 InfluxDB 的 Amazon Timestream 实例类的硬件详细信息。

实例类 v CPU 内存 (GiB) 存储类型 网络带宽 (Gbps)
db.infulx.medium 1 8 包括涌入 IOPS 10
db.influx.large 2 16 包括涌入 IOPS 10
db.influx.xlarge 4 32 包括涌入 IOPS 10
db.influx.2xlarge 8 64 包括涌入 IOPS 10
db.influx.4xlarge 16 128 包括涌入 IOPS 10
db.influx.8xlarge 32 256 包括涌入 IOPS 12
db.influx.12xlarge 48 384 包括涌入 IOPS 20
db.influx.16xlarge 64 512 包括涌入 IOPS 25

InfluxDB 实例存储

适用于 InfluxDB 的 Amazon Timestream 的数据库实例使用 Influx In IOPS cluded 卷存储数据库和日志存储。

在某些情况下,您的数据库工作负载可能无法达到您预配置IOPS的 100%。有关更多信息,请参阅影响存储性能的因素有关 Timestream for InfluxDB 存储定价的更多信息,请参阅亚马逊 Timestream 定价。

适用于 InfluxDB 存储类型的亚马逊 Timestream

适用于 InfluxDB 的 Amazon Timestream 支持一种存储类型,即包含 Influx。IOPS你可以为存储空间高达 16 太字节 (TiB) 的 InfluxDB 实例创建 Timestream。

以下是可用存储类型的简要描述:

  • Influx IO 包含存储:存储性能是每秒 I/O 操作数 (IOPS) 和存储卷执行读取和写入的速度(存储吞吐量)的组合。在 Influx Included 存储卷上,适用于 InfluxDB 的 Amazon Timestream 提供了 3 个存储层,预先配置了不同类型的工作负IOPS载所需IOPS的最佳存储层和吞吐量。

InfluxDB 实例大小调整

InfluxDB 实例的 Timestream 的最佳配置取决于许多因素,包括摄取率、批次大小、时间序列基数、并发查询和查询类型。为了提供规模建议,我们将重点放在具有以下特征的示例性工作负载上:

  • 数据由一组 Telegraf 代理收集和写入,这些代理从数据中心收集系统CPU、内存、磁盘、IO 等。

    每个写入请求包含 5000 行。

  • 在系统上执行的查询类型被归类为 “中等复杂性” 查询。此类查询具有以下特征:

    • 有多个函数和一两个正则表达式

    • 也可以按子句分组,或者采样时间范围为多周。

    • 通常需要几百毫秒到几千毫秒才能执行。

    • CPU主要有利于查询性能。

实例类 存储类型 写入(每秒行数) 读取(每秒查询数)
db.influx.large 包括 Influx IO 3K 约 50,000 <10
db.influx.2xlarge 包括 Influx IO 3K 大约 15万 <25
db.influx.4xlarge 包括 Influx IO 3K 大约 20 万 ~25
db.influx.4xlarge 包括 Influx IO 12K 大约 25 万 ~35
db.influx.8xlarge 包括 Influx IO 12K 约 500,000 ~50
db.influx.12xlarge 包括 Influx IO 12K <750,000 <100

Amazon Web Services 区域 和可用区

Amazon 云计算资源在全球多个位置托管。这些位置由 Amazon Web Services 区域 和组成。每个 Amazon 区域都是一个独立的地理区域。每个 Amazon 区域都有多个被称为可用区的隔离位置。

注意

有关查找某个 Amazon 区域的信息,请参阅 Amazon EC2 用户指南中的区域和区域

适用于 InfluxDB 的 Amazon Timestream 允许您将数据库实例和数据等资源放在多个位置。

Amazon 运营着 state-of-the-art高度可用的数据中心。数据中心有时会发生影响托管于同一位置的所有数据库实例的可用性的故障,虽然这种故障极少发生。如果您将所有数据库实例都托管在受此类故障影响的同一个位置,则您的所有数据库实例都将不可用。

Diagram showing a region with three availability zones and InfluxDB in zone C.

请务必记住,每个 Amazon 区域都是完全独立的。您启动的任何 Amazon Timestream for InfluxDB 活动(例如,创建数据库实例或列出可用的数据库实例)都只能在您当前的默认区域中运行。 Amazon 可以在控制台中或通过设置 AWS_DEFAULT_REGION 环境变量更改原定设置 Amazon 区域。或者可以通过使用带有 Amazon Command Line Interface ()Amazon CLI的--region参数来覆盖它。有关更多信息,请参阅配置 Amazon Command Line Interface,特别是有关环境变量和命令行选项的部分。

要在特定 Amazon 区域创建或使用适用于 InfluxDB 的 Amazon Timestream 数据库实例,请使用相应的区域服务终端节点。

Amazon 地区可用性

下表显示了目前提供适用于 InfluxDB 的 Amazon Timestream 的 Amazon 区域以及每个区域的终端节点。

Amazon 地区名称 区域 端点 协议
美国东部 (弗吉尼亚北部) us-east-1 timestream-influxdb.us-east-1.amazonaws.com HTTPS
美国东部(俄亥俄州) us-east-2 timestream-influxdb.us-east-2.amazonaws.com HTTPS
美国西部(俄勒冈州) us-west-2 timestream-influxdb.us-west-2.amazonaws.com HTTPS
亚太地区(孟买) ap-south-1 timestream-influxdb.ap-south-1.amazonaws.com HTTPS
亚太地区(新加坡) ap-southeast-1 timestream-influxdb.ap-southeast-1.amazonaws.com HTTPS
亚太地区(悉尼) ap-southeast-2 timestream-influxdb.ap-southeast-2.amazonaws.com HTTPS
Asia Pacific (Tokyo) ap-northeast-1 timestream-influxdb.ap-northeast-1.amazonaws.com HTTPS
欧洲(法兰克福) eu-central-1 timestream-influxdb.eu-central-1.amazonaws.com HTTPS
欧洲地区(爱尔兰) eu-west-1 timestream-influxdb.eu-west-1.amazonaws.com HTTPS
欧洲地区(斯德哥尔摩) eu-north-1 timestream-influxdb.eu-north-1.amazonaws.com HTTPS
加拿大(中部) ca-central-1 timestream-influxdb.ca-central-1.amazonaws.com HTTPS
欧洲(伦敦) eu-west-2 timestream-influxdb.eu-west-2.amazonaws.com HTTPS
欧洲(巴黎) eu-west-3 timestream-influxdb.eu-west-3.amazonaws.com HTTPS

有关目前提供适用于 InfluxDB 的 Amazon Timestream 的 Amazon 区域以及每个区域的终端节点的更多信息,请参阅 Amazon Timestream 终端节点和额。

Amazon 区域设计

每个 Amazon 区域都被设计为与其他 Amazon 区域隔离。此设计可实现最大程度的容错能力和稳定性。

当您查看您的资源时,您只能看到与您指定的 Amazon 区域相关的资源。这是因为 Amazon 区域彼此隔离,而且我们不会自动跨 Amazon 区域复制资源。

Amazon 可用区

创建数据库实例时,适用于 InfluxDB 的 Amazon Timestream 会根据您的子网配置随机选择一个实例。可用区由 Amazon 区域代码和字母标识符(例如us-east-1a)表示。

使用如下所示的 describe-availability-zones Amazon EC2 命令来描述指定区域内为您的账户启用的内容。

aws ec2 describe-availability-zones --region region-name

例如,要描述为您的账户启用的美国东部(弗吉尼亚北部)区域 (us-east-1),请运行以下命令:

aws ec2 describe-availability-zones --region us-east-1

多可用区数据库部署中,您不能为主数据库实例和辅助数据库实例选择。适用于 InfluxDB 的亚马逊 Timestream 会随机为你选择它们。有关多可用区部署的更多信息,请参阅配置和管理多可用区部署

适用于 InfluxDB 的 Amazon Timestream 的数据库实例账单

InfluxDB 实例的 Amazon Timestream 按以下组成部分计费:

  • 数据库实例小时数(每小时)-基于数据库实例的数据库实例类别,例如 db.influx.large。定价以每小时为单位列出,但账单向下计算至秒,并以十进制形式显示时间。InfluxDB 使用量的 Amazon Timestream 以 1 秒为增量计费,最少为 10 分钟。有关更多信息,请参阅数据库实例类数据库实例类。

  • 存储(每月每 GiB)— 您为数据库实例预配置的存储容量。有关更多信息,请参阅 InfluxDB 实例存储

  • 数据传输(每 GB)-从您的数据库实例传入和传出互联网和其他 Amazon 地区的数据。

有关 InfluxDB 的亚马逊 Timestream 定价信息,请参阅亚马逊 Timestream for InfluxDB 定价页面

为 InfluxDB 设置亚马逊 Timestream

在首次使用适用于 InfluxDB 的 Amazon Timestream 之前,请完成以下任务:

如果你已经有一个 Amazon 账户,请了解你的 Amazon Timestream for InfluxDB 要求,并且更喜欢使用和亚马逊的默认设置。IAM VPC InfluxDB 的 Timestream 入门

注册一个 Amazon 账户

如果您没有 Amazon 帐户,请完成以下步骤来创建一个帐户。

要注册一个 Amazon 账户

  • 前往Amazon 登录页面。

  • 选择 “创建新帐户”,然后按照说明进行操作。

    注意

    在注册时,将接到一通电话,要求使用电话键盘输入一个验证码。

当你注册一个 Amazon 账户时,会创建一个 Amazon 账户 root 用户。root 用户有权访问账户中的所有 Amazon 服务和资源。作为安全最佳实践,请为管理用户分配管理访问权限,并且只使用根用户执行需要根用户访问权限的任务。

Amazon 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 https://aws.amazon.com/并选择 “我的账户”,查看您当前的账户活动并管理您的账户

用户管理

创建管理用户

创建管理用户

注册 Amazon 帐户后,请创建一个管理用户,这样您就不会使用 root 用户来执行日常任务。

保护您的 Amazon 账户 root 用户

选择 Root 用户并输入您的账户电子邮件地址,以 Amazon 账户所有者的身份登录。 Amazon Web Services Management Console 在下一页上,输入您的密码。有关使用 root 用户登录的帮助,请参阅《登录用户指南》中的 “以 root 用户身份Amazon登录”

为您的 root 用户开启多重身份验证 (MFA)。有关说明,请参阅《用户指南》中的为您的 Amazon 账户 root 用户(控制台)启用虚拟MFA设备。IAM

授予编程访问权限

如果用户想在 Amazon 外部进行交互,则需要编程访问权限 Amazon Web Services Management Console。授予编程式访问权限的方法取决于访问 Amazon的用户类型。

要向用户授予编程访问权限,请选择以下选项之一:

哪个用户需要编程式访问权限? 目的 方式
员工身份(在IAM身份中心管理的用户) 使用临时证书签署向 Amazon CLI Amazon SDKs、或发出的编程请求 Amazon APIs。 按照您要使用的接口的说明进行操作。* 有关,请参阅 Amazon CLI

配置 Amazon CLI为使用IAM身份中心

Amazon CLI 用户指南

.* 有关 Amazon SDKs工具和 Amazon APIs,请参阅

IAM身份中心身份验证

Amazon SDKs和《工具参考指南》

IAM 使用临时证书签署对 Amazon CLISDKs、和的编程请求APIs。 按照IAM用户指南中的将临时证书与 Amazon 资源配合使用中的说明进行操作。
IAM (不推荐)使用长期凭证签署对 Amazon CLISDKs、和的编程请求APIs。 按照您希望使用的界面的说明进行操作。有关 Amazon CLI,请参阅

使用IAM用户凭证进行身份验证

在《 Amazon Command Line Interface 用户指南》中。有关 Amazon SDKs和工具,请参阅

使用长期凭证进行身份验证

Amazon SDKs和《工具参考指南》

。对于 Amazon APIs,请参阅

管理IAM用户的访问密钥

IAM用户指南

确定要求

适用于 InfluxDB 的 Amazon Timestream 的基本构建块是数据库实例。在数据库实例中,您可以创建自己的存储桶。数据库实例提供了称为终端节点 的网络地址。您的应用程序使用此终端节点连接到您的数据库实例。您还将使用浏览器中的相同端点访问您的InfluxUI。创建数据库实例时,需要指定存储、内存、数据库引擎和版本、网络配置和安全性等详细信息。您通过安全组控制对数据库实例的网络访问。

在创建数据库实例和安全组之前,您必须知道数据库实例和网络需求。下面是要考虑的一些重要事项:

  • 资源需求-您的应用程序或服务的内存和处理器要求是什么? 您使用这些设置来帮助您确定要使用哪个数据库实例类。有关数据库实例类的规范,请参阅数据库实例类

  • VPC和安全组 — 您的数据库实例很可能位于虚拟私有云中 (VPC)。要连接到数据库实例,您需要设置安全组规则。根据VPC您使用的类型和使用方式,这些规则的设置会有所不同。例如,你可以使用:默认值VPC或用户定义的VPC。

    以下列表描述了每个VPC选项的规则:

    • 默认 VPC-如果您的 Amazon 账户VPC在当前 Amazon 区域有默认值,VPC则该账户配置为支持数据库实例。如果您在创建数据库实例VPC时指定了默认值,请务必创建一个VPC安全组来授权从应用程序或服务连接到 Amazon Timestream for InfluxDB 数据库实例。使用VPC控制台上的安全组选项或创建VPC安全组。 Amazon CLI有关更多信息,请参阅步骤 3:创建VPC安全组

  • 用户定义 VPC-如果您想在创建数据库实例VPC时指定用户定义的实例,请注意以下几点:

    • 请务必创建一个VPC安全组,以授权从应用程序或服务连接到 Amazon Timestream for InfluxDB 数据库实例。使用VPC控制台上的安全组选项或创建VPC安全组。 Amazon CLI有关信息,请参阅步骤 3:创建VPC安全组

    • VPC必须满足某些要求才能托管数据库实例,例如至少有两个子网,每个子网位于单独的可用区。有关信息,请参阅适用于 InfluxD VPCB 的亚马逊和亚马逊 Timestream。

  • 高可用性-您需要故障转移支持吗? 在适用于 InfluxDB 的 Amazon Timestream 上,多可用区部署在另一个可用区中创建一个主数据库实例和一个辅助备用数据库实例,以支持故障转移。我们建议将多可用区部署用于生产工作负载以保持高可用性。对于开发和测试用途,您可以使用不是多可用区的部署。有关更多信息,请参阅 多可用区数据库实例部署

  • IAM政策 — 您的 Amazon 账户是否有授予执行 Amazon Timestream 对 InfluxDB 操作所需的权限的策略? 如果您 Amazon 使用IAM凭证进行连接,则您的IAM账户必须具有授予执行 Amazon Timestream for InfluxDB 控制平面操作所需的权限的IAM策略。有关更多信息,请参阅 适用于 InfluxDB 的亚马逊 Timestream 的身份和访问管理

  • 开放端口-您的数据库监听哪TCP个 /IP 端口? 有些公司的防火墙可能会阻止与您的数据库引擎的原定设置端口进行连接。InfluxDB 的 Timestream 的默认值为 8086。

  • Amazon 区域-您希望您的数据库位于哪个 Amazon 区域? 通过让数据库紧邻应用程序或 Web 服务,可以减小网络延迟。有关更多信息,请参阅 Amazon Web Services 区域 和可用区

  • 数据库磁盘子系统-您的存储要求是什么? 适用于 InfluxDB 的 Amazon Timestream 为其提供了三种配置 Influx IOPS 包含的存储类型::

    • 包括 Influx Io 3k () IOPS SSD

    • 包括 Influx Io 12k () IOPS SSD

    • 包括 Influx Io 16k () IOPS SSD

    有关适用于 InfluxDB 存储的 Amazon Timestream 的更多信息,请参阅适用于 InfluxDB 数据库实例存储的亚马逊 Timestream。在了解创建安全组和数据库实例所需的信息之后,请继续执行下一步。

VPC通过创建安全组来提供对您中数据库实例的访问权限

VPC安全组提供对中数据库实例的访问权限VPC。它们充当关联数据库实例的防火墙,在数据库实例级别控制入站和出站流量。默认情况下,系统将创建带防火墙和默认安全组 (用于保护数据库实例) 的数据库实例。

在连接到数据库实例之前,必须先向允许连接的安全组添加规则。使用网络和配置信息来创建允许访问数据库实例的规则。

例如,假设您有一个应用程序可以访问中数据库实例上的数据库。VPC在这种情况下,必须添加自定义TCP规则,指定应用程序用于访问数据库的端口范围和 IP 地址。如果您在 Amazon EC2 实例上有应用程序,则可以使用为该亚马逊EC2实例设置的安全组。

创建用于VPC访问的安全组

要创建VPC安全组,请登录 Amazon Web Services Management Console 并选择VPC。

注意

确保你在VPC控制台中,而不是使用适用于 InfluxDB 的 Amazon Timesteam 控制台。

  • 在的右上角 Amazon Web Services Management Console,选择要在其中创建VPC安全组和数据库实例的Amazon 区域。在该 Amazon 区域的 Amazon VPC 资源列表中,您应该至少看到一个VPC和多个子网。如果不这样做,则该 Amazon 区域就没有默认值VPC。

  • 在导航窗格中,选择安全组

  • 选择Create security group(创建安全组)。

  • 在安全组页面的基本详细信息部分,输入安全组名称描述。对于 VPC,请VPC选择要在其中创建数据库实例的。

  • Inbound rules (入站规则) 中,请选择 Add rule (添加规则)

    • 对于 “类型”,选择 “自定义” TCP。

    • 对于 S ourc e,选择安全组名称或输入访问数据库实例的 IP 地址范围(CIDR值)。如果您选择我的 IP,这会允许从浏览器中检测到的 IP 地址访问数据库实例。

    对于 Source,选择安全组名称或键入访问数据库实例的 IP 地址范围(CIDR值)。如果您选择我的 IP,这会允许从浏览器中检测到的 IP 地址访问数据库实例。

  • (可选)在 Outbound rules (出站规则) 中,为出站流量添加规则。默认情况下,允许所有出站流量。

  • 选择创建安全组

在创建数据库实例时,您可以将此VPC安全组用作数据库实例的安全组。

注意

如果您使用默认子网组VPC,则会为您创建一个跨越所有子网VPC的默认子网组。创建数据库实例时,可以选择默认 eifccntf,然后为数据库子网VPC组选择默认值

完成所需的设置后,可以使用您的要求和安全组来创建数据库实例。为此,请遵循创建数据库实例中的说明。

InfluxDB Timestream 安全最佳实践

优化对 InfluxDB 的写入

与其他任何时间序列数据库一样,InfluxDB旨在能够实时摄取和处理数据。为了使系统保持最佳性能,我们建议在向InfluxDB写入数据时进行以下优化:

  • 批量写入:向InfluxDB写入数据时,请分批写入数据,以最大限度地减少与每个写入请求相关的网络开销。最佳批量大小为每个写入请求使用 5000 行线路协议。要在一个请求中写入多行,每行协议必须用新行 (\ n) 分隔。

  • 按键对标签进行排序:在将数据指向InfluxDB写入数据之前,请按字典顺序按键对标签进行排序。

    measurement,tagC=therefore,tagE=am,tagA=i,tagD=i,tagB=think fieldKey=fieldValue 1562020262 # Optimized line protocol example with tags sorted by key measurement,tagA=i,tagB=think,tagC=therefore,tagD=i,tagE=am fieldKey=fieldValue 1562020262
  • 尽可能使用最粗略的时间精度:— InfluxDB 以纳秒精度写入数据,但是,如果您的数据不是以纳秒为单位收集的,则无需以该精度写入。为了获得更好的性能,请对时间戳使用尽可能粗略的精度。在以下情况下,您可以指定写入精度:

    • 使用时,SDK您可以指定 WritePrecision 何时设置点的时间属性。有关 InfluxDB 客户端库的更多信息,请参阅 In f luxDB 文档。

    • 使用 Telegraf 时,您可以在 Telegraf 代理配置中配置时间精度。精度指定为以整数 + 为单位的间隔(例如 0s,10ms,2us,4s)。有效的时间单位为 “ns”、“us”、“ms” 和 “s”。

      [agent] interval ="10s" metric_batch_size="5000" precision = "0s"
  • 使用 gzip 压缩:— 使用 gzip 压缩来加快写入 InfluxDB 的速度并减少网络带宽。基准测试显示,压缩数据后,速度提高了5倍。

    • 使用 Telegraf 时,在 telegraf.conf 的 Influxdb_v2 输出插件配置中,将 content_encoding 选项设置为 gzip:

      [[outputs.influxdb_v2]] urls = ["http://localhost:8086"] # ... content_encoding = "gzip"
    • 使用客户端库时,每个 InfluxDB 客户端库都提供用于压缩写入请求或默认强制压缩的选项。每个库的启用压缩的方法各不相同。有关具体说明,请参阅 InfluxDB 文档

    • 使用 InfluxDB API /api/v2/write 端点写入数据时,使用 gzip 压缩数据并将内容编码标头设置为 gzip。

为性能而设计

设计架构以实现更简单、性能更高的查询。以下准则将确保您的架构易于查询并最大限度地提高查询性能:

  • 为查询而设计:选择易于查询的测量值标签键和字段键。要实现此目标,请遵循以下原则:

    • 使用名称简单且能准确描述架构的度量。

    • 避免在同一个架构中对标签键字段键使用相同的名称。

    • 避免在标签和字段键中使用保留的 Flux 关键字和特殊字符。

    • 标签存储描述字段的元数据,这些元数据在许多数据点中都很常见。

    • 字段存储唯一或高度可变的数据,通常是数字数据点。

    • 测量值和密钥不应包含数据,而应用于聚合或描述数据。数据将存储在标签和字段值中。

  • 控制时间序列基数高序列基数是InfluxDB中写入和读取性能下降的主要原因之一。在InfluxDB的上下文中,高基数是指存在大量的唯一标签值。在 InfluxDB 中对标签值进行索引,这意味着大量的唯一值将生成更大的索引,从而降低数据摄取和查询性能。

    为了更好地理解和解决潜在的高基数相关问题,可以按照以下步骤操作:

    • 了解高基数的原因

    • 测量存储桶的基数

    • 采取行动解决高基数问题

  • 高序列基数的原因 Influx DB 根据测量值和标签对数据进行索引,以加快数据读取速度。每组已编入索引的数据元素构成一个序列键。包含高度可变的信息(例如唯一值IDs、哈希值和随机字符串)的@@ 标签会导致大量序列,也称为高序列基数。高系列基数是 InfluxDB 中高内存使用率的主要驱动因素。

  • 测量序列基数如果您遇到性能下降或在 Timestream for InfluxDB 实例中看到内存使用量不断增加,我们建议您测量存储桶的系列基数

    InfluxDB 提供的函数允许你在 FluxQL 和 InfluxQL 中测量序列基数。

    • 在 Flux 中使用该函数 influxdb.cardinality()

    • 在 FluxQL 中使用以下命令 SHOW SERIES CARDINALITY

    在这两种情况下,引擎都将返回数据中唯一序列密钥的数量。请记住,不建议在任何 Timestream 上使用超过 1000 万个 InfluxDB 实例的系列密钥。

  • 高序列基数的原因如果你遇到任何一个存储桶的基数都很高,你可以采取一些更正步骤来修复这个问题:

    • 查看您的标签:确保您的工作负载不会生成大多数条目标签具有唯一值的情况。如果唯一标签值的数量总是会随着时间的推移而增加,或者日志类型的消息被写入数据库,其中每条消息都有时间戳、标签等的唯一组合,则可能会发生这种情况。你可以使用以下 Flux 代码来帮助你找出哪些标签对你的高基数问题影响最大:

      // Count unique values for each tag in a bucketimport "influxdata/influxdb/schema" cardinalityByTag = (bucket) => schema.tagKeys(bucket: bucket) |> map( fn: (r) => ({ tag: r._value, _value: if contains(set: ["_stop", "_start"], value: r._value) then 0 else (schema.tagValues(bucket: bucket, tag: r._value) |> count() |> findRecord(fn: (key) => true, idx: 0))._value, }), ) |> group(columns: ["tag"]) |> sum() cardinalityByTag(bucket: "example-bucket")

      如果您遇到非常高的基数,则上面的查询可能会超时。如果您遇到超时,请逐一运行以下查询。

      生成标签列表:

      // Generate a list of tagsimport "influxdata/influxdb/schema" schema.tagKeys(bucket: "example-bucket")

      计算每个标签的唯一标签值:

      // Run the following for each tag to count the number of unique tag valuesimport "influxdata/influxdb/schema" tag = "example-tag-key" schema.tagValues(bucket: "my-bucket", tag: tag) |> count()

      我们建议您在不同的时间点运行这些代码,以确定哪个标签的增长速度更快。

    • 改进您的架构:遵循我们中讨论的建模建议InfluxDB Timestream 安全最佳实践

    • 移除或聚合较旧的数据以减少基数:考虑您的用例是否需要所有导致高基数问题的数据。如果不再需要这些数据或不经常访问这些数据,则可以对其进行聚合、删除或将其导出到其他引擎(例如 Timestream for Live Analytics)进行长期存储和分析。