Lindorm泛时序数据一站式分析与洞察

方案总览

方案概述

泛时序数据广泛应用于车联网、工业物联网、金融交易、股票分析等多个业务场景。随着业务规模的增长,数据量急剧增加,如何高效获取和分析这些数据成为业务洞察和决策的关键挑战。以车联网场景为例,传统的数据处理通常涉及多个数据组件的整合,运维难度高、数据存储及开发成本高。Lindorm作为阿里云自研的云原生多模数据库,不仅具备低成本存储、弹性高可用的特点,还集数据存储和分析功能于一体,支持存储车辆行驶轨迹、车辆状态、精准定位等车联网关键数据,并提供实时或批量数据处理能力。

本方案以车辆网场景为例,引导您使用云原生多模数据库 Lindorm的多种引擎,实现泛时序数据的高并发实时查询和写入,帮助您高效构建车机数据上报、物流轨迹跟踪、实时定位调度等场景服务。

方案架构

解决方案完整版本

方案优势

  • 一体化:一体化操作,开发效率高,多种数据一个入口,统一SQL操作。相比于传统的多个产品支撑一个场景的方案,架构更加简单,易于开发。

  • 低成本:低成本存储,支持百PB级存储,支持自适应压缩和表级别的冷热分离,您可以根据数据处理需求自由选择行存储或列存储,最多可节省约50%的成本

  • 高性能:高并发读写,支持千万级并发和毫秒级延迟,可满足车联网大规模数据的在线存储与查询需求。丰富的检索能力,通过宽表引擎和搜索引擎组合,使用SQL一键在所需数据列上建立搜索(倒排)索引,提供在线搜索服务。搜索引擎支持多维检索、全文检索、地理位置检索等多种高级检索能力。

  • 弹性:云原生弹性,灵活扩展,Lindorm计算引擎具备Serverless特性,可按需分配计算资源,进行高效的交互式分析和批处理。

部署流程

image

适用场景

  • 车联网:使用Lindorm存储车联网中的行驶轨迹、车辆状况、精准定位等重要数据,提供低成本、弹性、灵活可靠的能力,帮助您构建高效的网约车、物流运输、新能源车检测等场景服务;集成Ganos时空数据库引擎,高效支撑车联网轨迹数据时空分析与挖掘等相关应用场景。

  • 物联网:使用Lindorm存储来自工业物联网场景下的海量异构IT&OT数据,将数据进行同构、汇聚、融合,打破工业场景IT数据和OT数据割裂的“信息孤岛”;通过Lindorm计算引擎提供的低成本、高性能、稳定可靠的分布式计算能力,满足您在数智化生产、交互式数据探索分析、AI/ML数据处理和大规模图计算等场景中的计算需求。

  • 交易账单:使用Lindorm存储金融交易中的海量订单记录,金融风控中的用户事件、画像特征、规则模型、设备指纹等重要数据,提供低成本、高并发、灵活可靠的能力,帮助您构建高效的金融交易与风控服务。

部署准备

开始部署前,请按以下指引完成账号申请、账号充值、RAM用户创建和授权。

费用说明

完成本方案的部署及体验,预计产生费用不超过30元。该费用仅为购买本方案示例的资源规格,且使用时长不超过1小时的预估费用。如果您调整了资源规格,或执行了本方案以外的其他操作,可能会导致费用有所变化。请以控制台显示的实际价格和最终账单为准。

本方案以华东1(杭州)地域为例,以下为本方案涉及资源的华东1(杭州)地域单价,仅供参考。

产品

计费项

规格配置

预估费用参考

云原生多模数据库 Lindorm

宽表节点规格

规格:4核16 GB

宽表节点数量:2

2.500元/小时

搜索节点规格

规格:4核16 GB

搜索节点数量:2

2.500元/小时

LTS节点规格

规格:4核8 GB

LTS节点数量:1

1.053元/小时

流节点规格

规格:4核16 GB

流节点数量:2

2.500元/小时

弹性计算资源

不涉及

2.436元

存储空间

160 GB

0.157元/小时

集群固定费用

不涉及

1.875元/小时

云服务器ECS

实例

规格:ecs.e-c1m4.2xlarge

1.35元/小时

系统盘

存储空间:40 GiB(ESSD Entry)

0.02916元/时

专有网络VPC

免费

步骤一:准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值。本方案默认采用按量付费的方式创建资源,请确保账户余额大于等于100元。

  3. 创建用于方案部署的RAM用户。

    1. 创建1个RAM用户。具体操作,请参见创建RAM用户

    2. 为RAM用户授予以下云服务的访问权限以完成方案部署。具体操作,请参见为RAM用户授权

      云服务

      需要的权限

      描述

      云原生多模数据库 Lindorm

      AliyunLindormFullAccess

      管理云原生多模数据库 Lindorm的权限。

      云服务器ECS

      AliyunECSFullAccess

      管理云服务器服务ECS的权限。

      专有网络VPC

      AliyunVPCFullAccess

      管理专有网络VPC的权限。

步骤二:申请使用权限

在部署资源之前,请先加入钉钉群(群号:78080001631),申请流引擎购买权限。

部署资源

1. 创建专有网络VPC和交换机

  1. 登录专有网络管理控制台,创建1个专有网络和1台交换机。

  2. 填写相关配置,具体说明如下:

    项目

    说明

    示例值

    专有网络

    地域

    选择专有网络VPC所在地域,请选择华东1(杭州)地域。

    华东1(杭州)

    名称

    专有网络VPC的名称。命名规则:长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和短划线(-)。

    vpc_lindormk3uu

    IPv4网段

    在创建VPC时,您必须按照无类域间路由块(CIDR block)的格式为您的专有网络划分私网网段。阿里云VPC支持的网段信息请参见专有网络组成部分

    在网络规划时可以按照管理网段-开发网段-测试网段-生产网段等规则做好规划。网段一旦投入使用,调整过程复杂,因此规划十分重要。

    192.168.0.0/16

    交换机

    名称

    虚拟交换机名称。命名规则:长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和短划线(-)。

    vsw_lindomk3uu

    可用区

    在规划的地域内选择1个可用区。

    说明

    请确保交换机所属的可用区的ECS和Lindorm等资源处于可用状态。

    可用区 G

2.创建云服务器ECS

  1. 登录ECS实例创建页

  2. 按以下规划配置ECS相关配置项。

    配置项

    说明

    付费类型

    选择按量付费

    地域

    选择华东1(杭州)

    网络及可用区

    选择之前规划的专有网络VPC和专有网络交换机。

    实例

    选择规格ecs.e-c1m4.2xlarge(8 vCPU 32 GiB)。

    镜像

    选择CentOS 7.7 64位

    系统盘

    选择ESSD Entry类型,容量配置为40 GiB

    安全组

    选择已有安全组或根据页面提示创建新的安全组。安全组规则说明请参见安全组规则

    登录凭证

    选择自定义密码,方便后续登录机器安装服务环境。

  3. 勾选服务协议,单击确认下单

3.创建云原生多模数据库Lindorm

  1. 登录Lindorm实例创建页

  2. 在购买页面,按以下规划配置Lindorm相关配置项。

    1、商品属性及网络配置

    image

    选项

    说明

    商品类型、付费方式、部署方案(分别对应图示①、②、③)

    请按照图中选项配置。

    地域(对应图示④)

    选择华东1(杭州)

    网络相关(对应图示⑤)

    选择之前规划的VPC、交换机及交换区所在可用区。

    2、数据引擎配置

    请按照下图所示进行配置。

    image

  3. 单击立即购买跳转至订单页,勾选服务协议并单击立即开通

配置资源

配置ECS

请根据以下步骤在ECS实例上部署相关开发环境和Lindorm客户端。

步骤一:部署开发环境

流引擎客户端的运行依赖Java,同时,本方案将使用Python脚本文件模拟生成车机原始数据,因此您需要在ECS实例上部署Java和Python环境。

  1. 登录ECS实例。

    登录云服务器ECS管理控制台,在目标实例的操作列单击远程连接,使用root权限通过Workbench远程登录。image

  2. 执行以下命令,安装JDK 1.8和Python环境。

    # 安装JDK 1.8
    yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
    
    # 安装Python
    yum install python3 -y
    
    # 安装Python运行时依赖的库
    pip3 install cryptography==3.4.8
  3. 环境验证。

    # 验证Java环境是否安装成功
    java -version
    
    # 验证Python环境是否安装成功
    python3 --version

步骤二:安装Lindorm客户端

Lindorm-cli和Lindorm-sqlline是Lindorm提供的简易命令行工具,在本方案中分别用于连接Lindorm宽表引擎和流引擎。

  1. 下载客户端安装包(Linux操作系统安装包)。

    • Lindorm-cli:下载地址,请参见安装Lindorm-cli

    • Lindorm-sqlline:

      wget https://hbaseuepublic.oss-cn-beijing.aliyuncs.com/lindorm-sqlline-2.0.2.tar.gz
  2. 解压安装包。

    # 解压Lindorm-cli安装包
    tar zxvf lindorm-cli-linux-latest.tar.gz
    
    # 解压Lindorm-sqlline安装包
    tar zxvf lindorm-sqlline-2.0.2.tar.gz

配置Lindorm

  1. 登录Lindorm管理控制台(杭州地域),单击目标实例ID,进入实例详情页。

  2. 设置Lindorm白名单,将ECS实例的主私网IP添加至组内白名单,保证ECS与Lindorm之间的连通性。image

    说明

    如何查看ECS实例的主私网IP地址,请参见查看IP地址

  3. 开通搜索索引。搜索索引是宽表引擎与搜索引擎深度融合的特性,更适合复杂的多维查询场景。

    imageLTS规格请按照下表进行配置:

    配置项

    说明

    LTS数据同步Core规格

    选择4核8 GB

    LTS节点数量

    配置为1个。

  4. 请加入钉钉群(群号:78080001631),申请开通列存索引。

    说明
    • 列存索引可以增强宽表中海量数据的分析计算能力,更适合车联网与物联网的设备信息统计、电商领域的数据分析、物流行业的订单统计等场景。

    • 如果在部署准备阶段已开通该权限,可跳过此步骤。

数据导入

在实际的业务场景中,车机上传的字段有上百甚至上千种,本部署方案筛选了其中一部分作为测试数据:

单击展开字段说明

字段名

类型

备注

vin

STRING

车辆识别号(Vehicle Identification Number),是每一辆车的唯一标识。

sampletime

BIGINT

数据采样的时间点,通常为一个时间戳,表示数据记录的具体时刻。

DriverStateLinkStatus

INT

驾驶员状态监控设备的连接状态。0表示已连接,1表示已断开。

AirBagSystemStatus

INT

安全气囊系统状态。0表示关闭,1表示开启。

HODHandoffmonitorValid

INT

手部脱离方向盘监测系统的合法性状态。0表示合法,1表示非法。

BodyCtrlModRollCounter

INT

车身控制模块的滚动计数器。

VehicleSpeed_kmph

INT

车辆当前行驶速度,单位为千米/小时(km/h)。

SteeringAngle_Deg

DOUBLE

方向盘当前的角度,单位为度(°)。

BatterySOC_Percent

DOUBLE

电池剩余电量,以百分比表示,即电池的SOC(State of Charge)。

BrakePedalStatus

INT

制动踏板的状态,表示是否有制动操作。0表示不制动,1制动。

RegenBrakingLevel

INT

能量回收制动的级别,表示再生制动的强度。

AcceleratorPedalPos_Percent

DOUBLE

加速踏板的位置,以百分比表示。

CoolantTemperature_C

INT

冷却液温度,单位为摄氏度(­°C)。

AEB_Activation

INT

自动紧急制动的激活状态,表示是否触发了AEB功能。 0表示未启动,1表示已启动。

LaneAssistanceStatus

INT

车道保持辅助系统的状态,表示该功能是否有效。0表示无效,1表示有效。

CruiseControlSpeedSet_kmph

INT

设定的巡航控制速度,单位为千米/小时(km/h)。

ParkingAssistEngaged

INT

泊车辅助系统激活状态,表示是否启用了自动泊车功能。0表示无效,1表示有效。

RainSensorStatus

INT

雨量传感器状态,表示是否检测到雨水。0表示未检测到,1表示检测到了雨水。

TirePressure_FL_psi

DOUBLE

前左轮胎压力,单位为磅每平方英寸(psi)。

TirePressure_FR_psi

DOUBLE

前右轮胎压力,单位为磅每平方英寸(psi)。

TirePressure_RL_psi

DOUBLE

后左轮胎压力,单位为磅每平方英寸(psi)。

TirePressure_RR_psi

DOUBLE

后右轮胎压力,单位为磅每平方英寸(psi)。

LaneDepartureWarningActive

INT

车道偏离警告系统激活状态,表示系统是否在监控和警告驾驶员关于无意识的车道变换。0表示关闭,1表示激活 。

BatteryStateOfHealth_Percent

DOUBLE

电池的健康状态。即当前电池相对于全新电池的容量百分比,该数值越接近100%,表示电池越健康。

BatteryTemperature_Avg_C

INT

电池组中所有电池单元的平均温度,单位为摄氏度(­°C)。温度监控对电池的管理和寿命至关重要。

BatteryMaxCellVoltage_V

DOUBLE

电池组中单个电池单元的最大电压,单位为伏特(V)。高电压可能表明电池充电状态良好或单体电压不均。

BatteryMinCellVoltage_V

DOUBLE

电池组中单个电池单元的最小电压,单位为伏特(V)。低电压可能表明电池放电状态过深或出现电池老化。

EvBatteryTemperature_C

DOUBLE

电动车电池的温度,单位为摄氏度(­°C)。

1.创建Lindorm宽表

  1. 登录云服务器ECS管理控制台,在目标实例的操作列单击远程连接,使用root权限通过Workbench远程登录。image

  2. 跳转至Lindorm-cli.exe所在目录,连接Lindorm宽表引擎。

    ./lindorm-cli -url <jdbc url> -username <username> -password <password>

    参数说明

    参数

    获取方法

    jdbc url

    宽表引擎的Lindorm宽表SQL地址。获取方法请参见访问实例

    username

    连接宽表引擎的默认用户名和默认初始密码。获取方式请参见访问实例

    password

  3. 创建表dwd_vehicle_tbox,用于存储车机数据。

    CREATE TABLE dwd_vehicle_tbox (
      `vin` VARCHAR,
      `sampletime` bigint,
      `DriverStateLinkStatus` INT,
      `AirBagSystemStatus` INT,
      `HODHandoffmonitorValid` INT,
      `BodyCtrlModRollCounter` INT,
      `VehicleSpeed_kmph` INT,
      `SteeringAngle_Deg` DOUBLE,
      `BatterySOC_Percent` DOUBLE,
      `BrakePedalStatus` INT,
      `AcceleratorPedalPos_Percent` DOUBLE,
      `RegenBrakingLevel` INT,
      `CoolantTemperature_C` INT,
      `AEB_Activation` INT,
      `LaneAssistanceStatus` INT,
      `CruiseControlSpeedSet_kmph` INT,
      `ParkingAssistEngaged` INT,
      `RainSensorStatus` INT,
      `TirePressure_FL_psi` DOUBLE,
      `TirePressure_FR_psi` DOUBLE,
      `TirePressure_RL_psi` DOUBLE,
      `TirePressure_RR_psi` DOUBLE,
      `LaneDepartureWarningActive` INT,
      `BatteryStateOfHealth_Percent` DOUBLE,
      `BatteryTemperature_Avg_C` INT,
      `BatteryMaxCellVoltage_V` DOUBLE,
      `BatteryMinCellVoltage_V` DOUBLE,
      `EvBatteryTemperature_C` DOUBLE,
       PRIMARY KEY (vin,sampletime)
      );
  4. 可选)验证表dwd_vehicle_tbox结构是否正确。

    DESCRIBE TABLE dwd_vehicle_tbox;

    返回结果:

    单击展开返回结果

    +--------------+------------------+------------------------------+---------+----------------+------------+-------------------+-----------------+
    | TABLE_SCHEMA |    TABLE_NAME    |         COLUMN_NAME          |  TYPE   | IS_PRIMARY_KEY | SORT_ORDER | IS_AUTO_INCREMENT | IS_LOCAL_UNIQUE |
    +--------------+------------------+------------------------------+---------+----------------+------------+-------------------+-----------------+
    | default      | dwd_vehicle_tbox | vin                          | VARCHAR | true           | ASC        | false             | false           |
    | default      | dwd_vehicle_tbox | sampletime                   | BIGINT  | true           | ASC        | false             | false           |
    | default      | dwd_vehicle_tbox | DriverStateLinkStatus        | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | AirBagSystemStatus           | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | HODHandoffmonitorValid       | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BodyCtrlModRollCounter       | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | VehicleSpeed_kmph            | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | SteeringAngle_Deg            | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BatterySOC_Percent           | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BrakePedalStatus             | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | AcceleratorPedalPos_Percent  | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | RegenBrakingLevel            | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | CoolantTemperature_C         | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | AEB_Activation               | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | LaneAssistanceStatus         | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | CruiseControlSpeedSet_kmph   | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | ParkingAssistEngaged         | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | RainSensorStatus             | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | TirePressure_FL_psi          | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | TirePressure_FR_psi          | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | TirePressure_RL_psi          | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | TirePressure_RR_psi          | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | LaneDepartureWarningActive   | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BatteryStateOfHealth_Percent | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BatteryTemperature_Avg_C     | INT     | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BatteryMaxCellVoltage_V      | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | BatteryMinCellVoltage_V      | DOUBLE  | false          | none       | false             | false           |
    | default      | dwd_vehicle_tbox | EvBatteryTemperature_C       | DOUBLE  | false          | none       | false             | false           |
    +--------------+------------------+------------------------------+---------+----------------+------------+-------------------+-----------------+

2.创建流表

  1. 使用组合键Ctrl+D断开宽表引擎的连接,跳转至lindorm-sqlline-2.0.2目录,执行以下命令连接流引擎。

    ./bin/lindorm-sqlline -url <jdbc url>

    参数说明

    参数

    获取方法

    jdbc url

    流引擎的Lindorm Stream SQL地址。获取方法:在Lindorm管理控制台左侧导航栏,选择数据库连接 > 流引擎

  2. 创建流表dwd_vehicle_tbox_stream,用于处理上游的报文数据。

    CREATE STREAM dwd_vehicle_tbox_stream (
      `vin` VARCHAR,
      `sampletime` BIGINT,
      `DriverStateLinkStatus` INT,
      `AirBagSystemStatus` INT,
      `HODHandoffmonitorValid` INT,
      `BodyCtrlModRollCounter` INT,
      `VehicleSpeed_kmph` INT,
      `SteeringAngle_Deg` DOUBLE,
      `BatterySOC_Percent` DOUBLE,
      `BrakePedalStatus` INT,
      `AcceleratorPedalPos_Percent` DOUBLE,
      `RegenBrakingLevel` INT,
      `CoolantTemperature_C` INT,
      `AEB_Activation` INT,
      `LaneAssistanceStatus` INT,
      `CruiseControlSpeedSet_kmph` INT,
      `ParkingAssistEngaged` INT,
      `RainSensorStatus` INT,
      `TirePressure_FL_psi` DOUBLE,
      `TirePressure_FR_psi` DOUBLE,
      `TirePressure_RL_psi` DOUBLE,
      `TirePressure_RR_psi` DOUBLE,
      `LaneDepartureWarningActive` INT,
      `BatteryStateOfHealth_Percent` DOUBLE,
      `BatteryTemperature_Avg_C` INT,
      `BatteryMaxCellVoltage_V` DOUBLE,
      `BatteryMinCellVoltage_V` DOUBLE,
      `EvBatteryTemperature_C` DOUBLE
      );
  3. (可选)执行以下语句,验证表结构。

    DESCRIBE dwd_vehicle_tbox_stream;

    返回结果:

    单击展开返回结果

    +---------------------------------------------------------------------------+
    |                                  Result                                   |
    +---------------------------------------------------------------------------+
    |  name                       | type   | null | key    | extras | watermark |
    ----------------------------------------------------------------------------+
    |vin                          | STRING | TRUE | <NULL> | <NULL> |   <NULL>  |
    |sampletime                   | BIGINT | TRUE | <NULL> | <NULL> |   <NULL>  |
    |DriverStateLinkStatus        | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |AirBagSystemStatus           | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |HODHandoffmonitorValid       | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BodyCtrlModRollCounter       | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |VehicleSpeed_kmph            | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |SteeringAngle_Deg            | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BatterySOC_Percent           | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BrakePedalStatus             | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |AcceleratorPedalPos_Percent  | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |RegenBrakingLevel            | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |CoolantTemperature_C         | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |AEB_Activation               | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |LaneAssistanceStatus         | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |CruiseControlSpeedSet_kmph   | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |ParkingAssistEngaged         | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |RainSensorStatus             | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |TirePressure_FL_psi          | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |TirePressure_FR_psi          | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |TirePressure_RL_psi          | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |TirePressure_RR_psi          | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |LaneDepartureWarningActive   | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BatteryStateOfHealth_Percent | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BatteryTemperature_Avg_C     | INT    | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BatteryMaxCellVoltage_V      | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |BatteryMinCellVoltage_V      | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    |EvBatteryTemperature_C       | DOUBLE | TRUE | <NULL> | <NULL> |   <NULL>  |
    +---------------------------------------------------------------------------+

3.创建数据入库任务

  1. 执行以下语句创建数据入库任务,使流表不断传输数据到宽表。

    -- 创建数据入库任务,后续可以通过该CQ名称查询任务的状态.
    CREATE CQ dwd_vehicle_tbox_stream_job ;
    
    -- 建立关联,如果您只需要抽取一部分数据,可以根据需求调整SQL语句.
    INSERT INTO lindorm_table.`default`.dwd_vehicle_tbox
    SELECT * FROM dwd_vehicle_tbox_stream;
  2. (可选)查看入库任务状态。

    DESCRIBE dwd_vehicle_tbox_stream_job;

    返回结果:

    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    |                                                                              Result                                                                                 |
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    |  Query ID                    | Job ID                           | Status  | Is Stoppable | Start time    | End time | Duration | Max Parallelism | DelayMs   |  Sql |
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    |  dwd_vehicle_tbox_stream_job | 2112c72ef3c3aeab587438f95013135c | RUNNING | false        | 1720174064325 | -1       | 57912    | -1              | 3321553.0 | IA== |
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------+

4.导入数据

  1. 使用组合键Ctrl+D断开流引擎的连接,执行以下命令安装Python依赖。

    python3 -m pip install kafka-python
  2. 创建Python脚本文件demo.py,执行以下命令编辑文件。

    vim demo.py
  3. 编写完整代码,使用Python脚本模拟生成车机原始数据导入流表dwd_vehicle_tbox_stream

    # -*- coding: UTF-8 -*-
    import csv
    import random
    import datetime
    import json
    from kafka import KafkaProducer
    
    
    def random_string(length=32):
        return ''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', k=length))
    
    
    def random_int(min_val, max_val):
        return random.randint(min_val, max_val)
    
    
    def random_double(min_val, max_val):
        return random.uniform(min_val, max_val)
    
    
    def generate_vehicle_tbox_row(vin=None, current_time=None):
        """给定一个 VIN 和当前时间,生成一行车辆 T-Box 数据。"""
        vehicle_tbox_row_dict = {
            "vin": vin,
            "sampletime": (current_time - random.randint(0, 365 * 24 * 60 * 60 * 1000)),
            "DriverStateLinkStatus": random_int(0, 1),
            "AirBagSystemStatus": random_int(0, 1),
            "HODHandoffmonitorValid": random_int(0, 1),
            "BodyCtrlModRollCounter": random_int(8, 60),
            "VehicleSpeed_kmph": random_int(0, 300),
            "SteeringAngle_Deg": random_double(-720, 720),
            "BatterySOC_Percent": random_double(0, 100),
            "BrakePedalStatus": random_int(0, 1),
            "AcceleratorPedalPos_Percent": random_double(0, 100),
            "RegenBrakingLevel": random_int(0, 5),
            "CoolantTemperature_C": random_int(0, 100),
            "AEB_Activation": random_int(0, 1),
            "LaneAssistanceStatus": random_int(0, 1),
            "CruiseControlSpeedSet_kmph": random_int(0, 300),
            "ParkingAssistEngaged": random_int(0, 1),
            "RainSensorStatus": random_int(0, 1),
            "TirePressure_FL_psi": random_double(0, 3),
            "TirePressure_FR_psi": random_double(0, 3),
            "TirePressure_RL_psi": random_double(0, 3),
            "TirePressure_RR_psi": random_double(0, 3),
            "LaneDepartureWarningActive": random_int(0, 1),
            "BatteryStateOfHealth_Percent": random_double(0, 100),
            "BatteryTemperature_Avg_C": random_int(10, 70),
            "BatteryMaxCellVoltage_V": random_double(3, 8),
            "BatteryMinCellVoltage_V": random_double(3, 8),
            "EvBatteryTemperature_C": random_double(10, 70)
        }
        return vehicle_tbox_row_dict
    
    
    def create_kafka_producer(bootstrap_servers='localhost:9092'):
        """创建并返回 Kafka 生产者实例"""
        producer_config = {
            'bootstrap_servers': bootstrap_servers,  # Kafka集群地址
            'value_serializer': lambda v: json.dumps(v).encode('utf-8'),  # 设置值的序列化器为JSON
            'batch_size': 16384,  # 批处理大小限制(字节数),到达这个大小后会发送批量数据
            'linger_ms': 10,  # 毫秒,数据滞留时间(即使batch.size未满,linger.ms时间到了也会发送数据)
            'acks': 'all'  # 确认设置,等待所有副本节点的确认
        }
        producer = KafkaProducer(**producer_config)
        return producer
    
    
    if __name__ == "__main__":
        count = 200000  # 记录行数
        vin_count = 10  # 车辆数量
        bootstrap_servers = "ld-bp1n18l34fefk****-proxy-stream.lindorm.rds.aliyuncs.com:30080"  # 中间件连接地址
        topicName = "-LINSTREAM-default.dwd-vehicle-tbox-stream"  # 根据实际情况设置
        vins = [random_string() for _ in range(vin_count)]
        producer = create_kafka_producer(bootstrap_servers=bootstrap_servers)
        insert_number = 0
        start_time = datetime.datetime.now().timestamp()
        insert_vins = set()
        for _ in range(count):
            vin = random.choice(vins)
            insert_vins.add(vin)
            row_json = generate_vehicle_tbox_row(vin, datetime.datetime.now().timestamp() * 1000)
            producer.send(topicName, row_json)
            insert_number = insert_number + 1
            if insert_number == 10000:
                print("insert row 10000")
                producer.flush()
                insert_number = 0
        producer.flush()
        producer.close()
        print("insert " + str(count) + ", cost " + str(datetime.datetime.now().timestamp() - start_time) + " s.\n")
        print("insert vins is " , insert_vins)

    参数说明

    参数

    说明

    bootstrap_servers

    Lindorm中间件连接地址。获取方式:在Lindorm管理控制台左侧导航栏,选择数据库连接 > 消息引擎

    topicName

    topic名称,格式为-LINSTREAM-+ Database名+“.”+流表名。

  4. 执行以下命令运行脚本文件,将模拟车机原始报文数据批量导入。

    python3 demo.py
  5. 可选)验证数据导入结果。

    1. 再次使用Lindorm-cli连接宽表引擎。

      ./lindorm-cli -url <jdbc url> -username <默认用户名> -password <默认初始密码>
    2. 执行以下命令验证导入结果。

      SELECT * FROM dwd_vehicle_tbox LIMIT 10;

通过计算引擎进行复杂查询

创建列存索引

在进行复杂查询之前,您需要创建列存索引来增强数据分析计算能力,从而实现高效的数据查询。

  1. 通过Lindorm-cli连接宽表引擎。

    ./lindorm-cli -url <jdbc url> -username <username> -password <password>
  2. 创建列存索引column_index_dwd_vehi

    CREATE INDEX column_index_dwd_vehicle_tbox USING COLUMNAR
    ON dwd_vehicle_tbox(*)
    PARTITION BY ENUMERABLE (bucket(128, vin))
    WITH (`lindorm_columnar.user.index.database` = 'vehicle_db', `lindorm_columnar.user.index.table` = 'dwd_vehicle_tbox_column_idx');
  3. 可选)验证索引信息和状态。

    SHOW INDEX FROM dwd_vehicle_tbox;

    返回结果:

    +--------------+------------------+-------------------------------+-------------+----------------+------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+-----------------------------------------+
    | TABLE_SCHEMA |    DATA_TABLE    |          INDEX_NAME           | INDEX_STATE | INDEX_PROGRESS | INDEX_TYPE | INDEX_COVERED |                                                                                                                                                                                                                                                                                         INDEX_COLUMN                                                                                                                                                                                                                                                                                          | INDEX_TTL |            INDEX_DESCRIPTION            |
    +--------------+------------------+-------------------------------+-------------+----------------+------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+-----------------------------------------+
    | default      | dwd_vehicle_tbox | column_index_dwd_vehicle_tbox | ACTIVE      |                | COLUMNAR   | NA            | vin,sampletime,DriverStateLinkStatus,AirBagSystemStatus,HODHandoffmonitorValid,BodyCtrlModRollCounter,VehicleSpeed_kmph,SteeringAngle_Deg,BatterySOC_Percent,BrakePedalStatus,AcceleratorPedalPos_Percent,RegenBrakingLevel,CoolantTemperature_C,AEB_Activation,LaneAssistanceStatus,CruiseControlSpeedSet_kmph,ParkingAssistEngaged,RainSensorStatus,TirePressure_FL_psi,TirePressure_FR_psi,TirePressure_RL_psi,TirePressure_RR_psi,LaneDepartureWarningActive,BatteryStateOfHealth_Percent,BatteryTemperature_Avg_C,BatteryMaxCellVoltage_V,BatteryMinCellVoltage_V,EvBatteryTemperature_C |           | index table:                            |
    |              |                  |                               |             |                |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | vehicle_db.dwd_vehicle_tbox_column_idx; |
    |              |                  |                               |             |                |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | task id:                                |
    |              |                  |                               |             |                |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | 8e60fb75-f01d-4a17-b1fc-9fb50ddc25a8;   |
    |              |                  |                               |             |                |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | partition by: [hash(128,vin)];          |
    |              |                  |                               |             |                |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | attributes: []                          |
    +--------------+------------------+-------------------------------+-------------+----------------+------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+-----------------------------------------+

    INDEX_STATEBUILDING变为ACTIVE时,表示索引已创建完成,此过程大概需等待3分钟。

复杂查询

  1. 可选)车辆的电池健康数据按照一定时间频率上传至Lindorm,在执行复杂查询之前您可以先使用简单的查询语句查看表中数据。

    例如,查询某一时间段内的10条电池数据。

    SELECT  vin,BatteryStateOfHealth_Percent FROM  lindorm_columnar.vehicle_db.dwd_vehicle_tbox_column_idx WHERE sampletime >= 1686585600000 AND BatteryStateOfHealth_Percent <= 80 LIMIT 10;

    返回结果:

    单击展开返回结果

    +----------------------------------+------------------------------+
    |               vin                | BatteryStateOfHealth_Percent |
    +----------------------------------+------------------------------+
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 23.764850669436843           |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 6.215661473439549            |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 12.852751497229441           |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 8.332735748118846            |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 19.596259310247877           |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 17.621117691572984           |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 66.77781508961095            |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 77.56923806011324            |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 25.969897299920774           |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 | 71.45633174979432            |
    +----------------------------------+------------------------------+
  2. 查询每辆车最后一次上报的记录,并根据电池健康程度排序,查询电池健康度最低的前10辆汽车和电池信息。

    SELECT vin,BatteryStateOfHealth_Percent FROM (SELECT *,ROW_NUMBER() OVER (PARTITION BY vin ORDER BY sampletime DESC) AS rn FROM lindorm_table.`default`.dwd_vehicle_tbox WHERE sampletime >= 1686585600000) AS tmp WHERE rn=1 ORDER BY BatteryStateOfHealth_Percent ASC LIMIT 10;

    返回结果:

    单击展开返回结果

    +----------------------------------+------------------------------+
    |               vin                | BatteryStateOfHealth_Percent |
    +----------------------------------+------------------------------+
    | j878HLSbLco8jSVVyTY8CMUZqfkUs28v | 20.652739801362372           |
    | echVK3CaoAYBSPoKxbaCrMEW8y4BTpmg | 21.518064804363355           |
    | SLJ1mkIbwBaiSLZO9xc1gy0cbUK69ULc | 23.388871500485052           |
    | DgBXmx0idrLeSVq08RobnYPxl45sYchb | 27.994995362735676           |
    | 4pJpua6dn1jzTevlI0NsruBe91rVVix9 | 30.321789199354043           |
    | CgO3PchAjoKprtBrFbyCG5kK3UGkBcpQ | 31.9348912927222             |
    | 3gP6BebgBxACvguf0de6juIiwdoCWvWB | 33.72344917241882            |
    | iMJY8rDr08tFe4BHFQtkalhQ5KSdyOMD | 36.89775232730048            |
    | Dsn9Wzr65FVZWaq1ajeV6uH7rFLYOH8h | 44.50827494756204            |
    | Yxoi4mTxvWJB7hKmlPkCnbgK9nUY7Ba2 | 66.27943854842643            |
    +----------------------------------+------------------------------+

通过搜索引擎进行多维检索

通过搜索索引执行多维检索耗时更短效率更高。您可以根据以下步骤,对比针对同一查询条件时使用搜索索引和无搜索索引的查询效率。

未创建搜索索引

基于电池健康和胎压两个维度,查询过去一年中电池健康程度低(小于50)并且胎压过低(胎压指标小于2) 的车辆。

-- 1686585600000 = 2023-06-13 0:0:00
SELECT DISTINCT(vin) FROM dwd_vehicle_tbox WHERE  sampletime >= 1686585600000 AND BatteryStateOfHealth_Percent < 50 AND (TirePressure_FL_psi < 2 OR TirePressure_FR_psi < 2 OR TirePressure_RL_psi < 2 OR TirePressure_RR_psi < 2);

返回结果:

单击展开返回结果

+----------------------------------+
|               vin                |
+----------------------------------+
| 0JImIThOLvmYbKmhCP1Mact83E7XvF6s |
| 4spNfR8OhEsDXXaZADS3jivPQUGPXUQo |
| 59ydPuK3xdCvBV8wB1Y5UHsmWfO2aNQj |
| 5Kq9BkgTzNSexZ3fd3XL7AaF56NNVXHu |
| EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 |
| EwB2929l43ttvFNudMZDogppzbXfzYJ1 |
| FaXdxPwK0An7LbaeUV0r8PmqPoBz7Tn9 |
| KDx9AF9qrr4zhJR3sXsuEmVIANjTj8wg |
| LsvywOyn1lLjbrzEghQlHk3aXHfVr8Py |
| SivBFi3uzuUQT9bjO4jrIO7NEd9PYd55 |
| YC6zOBs7h57aqjIGZddDtzZ2YXfREnG2 |
| hkCS5GQ5sHBy2uyPEj7ifGXs21L4EUHu |
| k0kXqJMvx4gyOWfFUIHG6d4N2K8GFdDP |
| mHFfXFIGeItuZM4G9WYyqrEwyMrumsrZ |
| mXtpBVucRZVdKC2FH9MfP0i3MJCOsXXn |
| nH5YV2MAh3EDA14r2efpIHtIMp3AdsH4 |
| rXVDXz7JZ0PpvBgWu79bsKBWmcykxbnJ |
| rfsvhAgRbikInQ6O7gHDztLNWwQnZjVl |
| xU6qTtaDesFrSlQVLkZDe0vQE15gd5VE |
| yWuGjDH9fyRNAlF7k7HUe4GQFHHzSh9Y |
+----------------------------------+
20 rows in set (94912 ms)

该查询为全表扫描,总耗时为94912 ms。

使用搜索索引

  1. 再次通过Lindorm-cli连接宽表引擎。

    ./lindorm-cli -url <jdbc url> -username <username> -password <password>
  2. 创建搜索索引。

    CREATE INDEX IF NOT EXISTS dwd_vehicle_tbox_search_idx USING SEARCH ON dwd_vehicle_tbox (BatteryStateOfHealth_Percent,TirePressure_FL_psi,TirePressure_FR_psi,TirePressure_RL_psi,TirePressure_RR_psi);
  3. (可选)查询搜索索引的状态。

    SHOW INDEX FROM dwd_vehicle_tbox;

    返回结果:

    +--------------+------------------+-------------------------------+-------------+-------------------------------+------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+-----------------------------------------+
    | TABLE_SCHEMA |    DATA_TABLE    |          INDEX_NAME           | INDEX_STATE |        INDEX_PROGRESS         | INDEX_TYPE | INDEX_COVERED |                                                                                                                                                                                                                                                                                         INDEX_COLUMN                                                                                                                                                                                                                                                                                          | INDEX_TTL |            INDEX_DESCRIPTION            |
    +--------------+------------------+-------------------------------+-------------+-------------------------------+------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+-----------------------------------------+
    | default      | dwd_vehicle_tbox | dwd_vehicle_tbox_search_idx   | ACTIVE      | N/A                           | SEARCH     | NA            | BatteryStateOfHealth_Percent,TirePressure_FL_psi,TirePressure_FR_psi,TirePressure_RL_psi,TirePressure_RR_psi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | -1        |                                         |
    | default      | dwd_vehicle_tbox | column_index_dwd_vehicle_tbox | ACTIVE      | 2024-07-08 10:40:09.388 +0800 | COLUMNAR   | NA            | vin,sampletime,DriverStateLinkStatus,AirBagSystemStatus,HODHandoffmonitorValid,BodyCtrlModRollCounter,VehicleSpeed_kmph,SteeringAngle_Deg,BatterySOC_Percent,BrakePedalStatus,AcceleratorPedalPos_Percent,RegenBrakingLevel,CoolantTemperature_C,AEB_Activation,LaneAssistanceStatus,CruiseControlSpeedSet_kmph,ParkingAssistEngaged,RainSensorStatus,TirePressure_FL_psi,TirePressure_FR_psi,TirePressure_RL_psi,TirePressure_RR_psi,LaneDepartureWarningActive,BatteryStateOfHealth_Percent,BatteryTemperature_Avg_C,BatteryMaxCellVoltage_V,BatteryMinCellVoltage_V,EvBatteryTemperature_C |           | index table:                            |
    |              |                  |                               |             |                               |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | vehicle_db.dwd_vehicle_tbox_column_idx; |
    |              |                  |                               |             |                               |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | task id:                                |
    |              |                  |                               |             |                               |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | 8e60fb75-f01d-4a17-b1fc-9fb50ddc25a8;   |
    |              |                  |                               |             |                               |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | partition by: [hash(128,vin)];          |
    |              |                  |                               |             |                               |            |               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |           | attributes: []                          |
    +--------------+------------------+-------------------------------+-------------+-------------------------------+------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------+-----------------------------------------+

    INDEX_STATEBUILDING变为ACTIVE时,表示索引已创建完成。

    说明

    如果索引状态一直没有变为ACTIVE状态,可以通过LTS控制台查看搜索索引实时同步以及全量同步的执行情况。

    查看方式:在LTS控制台左侧导航栏选择Lindorm Search > 全量同步,单击目标任务名。如何登录LTS,请参见登录LTS

  4. 使用相同查询语句查询数据。

    基于电池健康和胎压两个维度,查询过去一年电池健康程度低(小于50)且胎压过低(胎压指标小于2) 的车辆。

    -- 1686585600000 = 2023-06-13 0:0:00
    SELECT DISTINCT(vin) FROM dwd_vehicle_tbox WHERE  sampletime >= 1686585600000 AND BatteryStateOfHealth_Percent < 50 AND (TirePressure_FL_psi < 2 OR TirePressure_FR_psi < 2 OR TirePressure_RL_psi < 2 OR TirePressure_RR_psi < 2);

    返回结果:

    单击展开返回结果

    +----------------------------------+
    |               vin                |
    +----------------------------------+
    | 0JImIThOLvmYbKmhCP1Mact83E7XvF6s |
    | 4spNfR8OhEsDXXaZADS3jivPQUGPXUQo |
    | 59ydPuK3xdCvBV8wB1Y5UHsmWfO2aNQj |
    | 5Kq9BkgTzNSexZ3fd3XL7AaF56NNVXHu |
    | EEL5dgXYFjra8jF3tNOUuZPFL0Imh906 |
    | EwB2929l43ttvFNudMZDogppzbXfzYJ1 |
    | FaXdxPwK0An7LbaeUV0r8PmqPoBz7Tn9 |
    | KDx9AF9qrr4zhJR3sXsuEmVIANjTj8wg |
    | LsvywOyn1lLjbrzEghQlHk3aXHfVr8Py |
    | SivBFi3uzuUQT9bjO4jrIO7NEd9PYd55 |
    | YC6zOBs7h57aqjIGZddDtzZ2YXfREnG2 |
    | hkCS5GQ5sHBy2uyPEj7ifGXs21L4EUHu |
    | k0kXqJMvx4gyOWfFUIHG6d4N2K8GFdDP |
    | mHFfXFIGeItuZM4G9WYyqrEwyMrumsrZ |
    | mXtpBVucRZVdKC2FH9MfP0i3MJCOsXXn |
    | nH5YV2MAh3EDA14r2efpIHtIMp3AdsH4 |
    | rXVDXz7JZ0PpvBgWu79bsKBWmcykxbnJ |
    | rfsvhAgRbikInQ6O7gHDztLNWwQnZjVl |
    | xU6qTtaDesFrSlQVLkZDe0vQE15gd5VE |
    | yWuGjDH9fyRNAlF7k7HUe4GQFHHzSh9Y |
    +----------------------------------+
    20 rows in set (14321 ms)

    可以从返回结果看出,在相同查询条件下未创建搜索索引时全表查询耗时94912 ms,使用了搜索索引后查询耗时14321 ms,时延大幅降低。

    说明

    搜索引擎在复杂多条件的查询下延迟更低,更适用于涉及在线查询业务较多的场景,而计算引擎更适合做更加复杂的查询,例如有离线分析需求的场景。