方案总览
方案概述
泛时序数据广泛应用于车联网、工业物联网、金融交易、股票分析等多个业务场景。随着业务规模的增长,数据量急剧增加,如何高效获取和分析这些数据成为业务洞察和决策的关键挑战。以车联网场景为例,传统的数据处理通常涉及多个数据组件的整合,运维难度高、数据存储及开发成本高。Lindorm作为阿里云自研的云原生多模数据库,不仅具备低成本存储、弹性高可用的特点,还集数据存储和分析功能于一体,支持存储车辆行驶轨迹、车辆状态、精准定位等车联网关键数据,并提供实时或批量数据处理能力。
本方案以车辆网场景为例,引导您使用云原生多模数据库 Lindorm的多种引擎,实现泛时序数据的高并发实时查询和写入,帮助您高效构建车机数据上报、物流轨迹跟踪、实时定位调度等场景服务。
方案架构
方案优势
一体化:一体化操作,开发效率高,多种数据一个入口,统一SQL操作。相比于传统的多个产品支撑一个场景的方案,架构更加简单,易于开发。
低成本:低成本存储,支持百PB级存储,支持自适应压缩和表级别的冷热分离,您可以根据数据处理需求自由选择行存储或列存储,最多可节省约50%的成本。
高性能:高并发读写,支持千万级并发和毫秒级延迟,可满足车联网大规模数据的在线存储与查询需求。丰富的检索能力,通过宽表引擎和搜索引擎组合,使用SQL一键在所需数据列上建立搜索(倒排)索引,提供在线搜索服务。搜索引擎支持多维检索、全文检索、地理位置检索等多种高级检索能力。
弹性:云原生弹性,灵活扩展,Lindorm计算引擎具备Serverless特性,可按需分配计算资源,进行高效的交互式分析和批处理。
部署流程
适用场景
车联网:使用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 | 免费 |
步骤一:准备账号
步骤二:申请使用权限
在部署资源之前,请先加入钉钉群(群号:78080001631),申请流引擎购买权限。
部署资源
1. 创建专有网络VPC和交换机
登录专有网络管理控制台,创建1个专有网络和1台交换机。
填写相关配置,具体说明如下:
项目
说明
示例值
专有网络
地域
选择专有网络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
3.创建云原生多模数据库Lindorm
登录Lindorm实例创建页。
在购买页面,按以下规划配置Lindorm相关配置项。
1、商品属性及网络配置
选项
说明
商品类型、付费方式、部署方案(分别对应图示①、②、③)
请按照图中选项配置。
地域(对应图示④)
选择华东1(杭州)。
网络相关(对应图示⑤)
选择之前规划的VPC、交换机及交换区所在可用区。
2、数据引擎配置
请按照下图所示进行配置。
单击立即购买跳转至订单页,勾选服务协议并单击立即开通。
配置资源
配置ECS
请根据以下步骤在ECS实例上部署相关开发环境和Lindorm客户端。
步骤一:部署开发环境
流引擎客户端的运行依赖Java,同时,本方案将使用Python脚本文件模拟生成车机原始数据,因此您需要在ECS实例上部署Java和Python环境。
登录ECS实例。
登录云服务器ECS管理控制台,在目标实例的操作列单击远程连接,使用root权限通过Workbench远程登录。
执行以下命令,安装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
环境验证。
# 验证Java环境是否安装成功 java -version # 验证Python环境是否安装成功 python3 --version
步骤二:安装Lindorm客户端
Lindorm-cli和Lindorm-sqlline是Lindorm提供的简易命令行工具,在本方案中分别用于连接Lindorm宽表引擎和流引擎。
下载客户端安装包(Linux操作系统安装包)。
Lindorm-cli:下载地址,请参见安装Lindorm-cli。
Lindorm-sqlline:
wget https://hbaseuepublic.oss-cn-beijing.aliyuncs.com/lindorm-sqlline-2.0.2.tar.gz
解压安装包。
# 解压Lindorm-cli安装包 tar zxvf lindorm-cli-linux-latest.tar.gz # 解压Lindorm-sqlline安装包 tar zxvf lindorm-sqlline-2.0.2.tar.gz
配置Lindorm
登录Lindorm管理控制台(杭州地域),单击目标实例ID,进入实例详情页。
设置Lindorm白名单,将ECS实例的主私网IP添加至组内白名单,保证ECS与Lindorm之间的连通性。
说明如何查看ECS实例的主私网IP地址,请参见查看IP地址。
开通搜索索引。搜索索引是宽表引擎与搜索引擎深度融合的特性,更适合复杂的多维查询场景。
LTS规格请按照下表进行配置:
配置项
说明
LTS数据同步Core规格
选择4核8 GB。
LTS节点数量
配置为1个。
请加入钉钉群(群号:78080001631),申请开通列存索引。
说明列存索引可以增强宽表中海量数据的分析计算能力,更适合车联网与物联网的设备信息统计、电商领域的数据分析、物流行业的订单统计等场景。
如果在部署准备阶段已开通该权限,可跳过此步骤。
数据导入
在实际的业务场景中,车机上传的字段有上百甚至上千种,本部署方案筛选了其中一部分作为测试数据:
1.创建Lindorm宽表
登录云服务器ECS管理控制台,在目标实例的操作列单击远程连接,使用root权限通过Workbench远程登录。
跳转至
Lindorm-cli.exe
所在目录,连接Lindorm宽表引擎。./lindorm-cli -url <jdbc url> -username <username> -password <password>
参数说明
参数
获取方法
jdbc url
宽表引擎的Lindorm宽表SQL地址。获取方法请参见访问实例。
username
连接宽表引擎的默认用户名和默认初始密码。获取方式请参见访问实例。
password
创建表
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) );
(可选)验证表
dwd_vehicle_tbox
结构是否正确。DESCRIBE TABLE dwd_vehicle_tbox;
返回结果:
2.创建流表
使用组合键
Ctrl+D
断开宽表引擎的连接,跳转至lindorm-sqlline-2.0.2
目录,执行以下命令连接流引擎。./bin/lindorm-sqlline -url <jdbc url>
参数说明
参数
获取方法
jdbc url
流引擎的Lindorm Stream SQL地址。获取方法:在Lindorm管理控制台左侧导航栏,选择
。创建流表
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 );
(可选)执行以下语句,验证表结构。
DESCRIBE dwd_vehicle_tbox_stream;
返回结果:
3.创建数据入库任务
执行以下语句创建数据入库任务,使流表不断传输数据到宽表。
-- 创建数据入库任务,后续可以通过该CQ名称查询任务的状态. CREATE CQ dwd_vehicle_tbox_stream_job ; -- 建立关联,如果您只需要抽取一部分数据,可以根据需求调整SQL语句. INSERT INTO lindorm_table.`default`.dwd_vehicle_tbox SELECT * FROM dwd_vehicle_tbox_stream;
(可选)查看入库任务状态。
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.导入数据
使用组合键
Ctrl+D
断开流引擎的连接,执行以下命令安装Python依赖。python3 -m pip install kafka-python
创建Python脚本文件
demo.py
,执行以下命令编辑文件。vim demo.py
编写完整代码,使用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名+“.”+流表名。执行以下命令运行脚本文件,将模拟车机原始报文数据批量导入。
python3 demo.py
(可选)验证数据导入结果。
再次使用Lindorm-cli连接宽表引擎。
./lindorm-cli -url <jdbc url> -username <默认用户名> -password <默认初始密码>
执行以下命令验证导入结果。
SELECT * FROM dwd_vehicle_tbox LIMIT 10;
通过计算引擎进行复杂查询
创建列存索引
在进行复杂查询之前,您需要创建列存索引来增强数据分析计算能力,从而实现高效的数据查询。
通过Lindorm-cli连接宽表引擎。
./lindorm-cli -url <jdbc url> -username <username> -password <password>
创建列存索引
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');
(可选)验证索引信息和状态。
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_STATE由
BUILDING
变为ACTIVE
时,表示索引已创建完成,此过程大概需等待3分钟。
复杂查询
(可选)车辆的电池健康数据按照一定时间频率上传至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;
返回结果:
查询每辆车最后一次上报的记录,并根据电池健康程度排序,查询电池健康度最低的前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;
返回结果:
通过搜索引擎进行多维检索
通过搜索索引执行多维检索耗时更短,效率更高。您可以根据以下步骤,对比针对同一查询条件时使用搜索索引和无搜索索引的查询效率。
未创建搜索索引
基于电池健康和胎压两个维度,查询过去一年中电池健康程度低(小于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);
返回结果:
该查询为全表扫描,总耗时为94912 ms。
使用搜索索引
再次通过Lindorm-cli连接宽表引擎。
./lindorm-cli -url <jdbc url> -username <username> -password <password>
创建搜索索引。
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);
(可选)查询搜索索引的状态。
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_STATE由
BUILDING
变为ACTIVE
时,表示索引已创建完成。说明如果索引状态一直没有变为ACTIVE状态,可以通过LTS控制台查看搜索索引实时同步以及全量同步的执行情况。
查看方式:在LTS控制台左侧导航栏选择登录LTS。
,单击目标任务名。如何登录LTS,请参见使用相同查询语句查询数据。
基于电池健康和胎压两个维度,查询过去一年电池健康程度低(小于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);
返回结果:
可以从返回结果看出,在相同查询条件下未创建搜索索引时全表查询耗时94912 ms,使用了搜索索引后查询耗时14321 ms,时延大幅降低。
说明搜索引擎在复杂多条件的查询下延迟更低,更适用于涉及在线查询业务较多的场景,而计算引擎更适合做更加复杂的查询,例如有离线分析需求的场景。