阿里云云原生多模数据库Lindorm对接使用全流程指南

apphuang2026年06月28日 09:23:513

1. 认识云原生多模数据库Lindorm

云原生多模数据库Lindorm是阿里云面向物联网、互联网、车联网等场景深度设计和优化的一款云原生多模超融合数据库。与传统数据库最大的区别在于,Lindorm打破了不同类型数据必须存储在不同数据库中的技术壁垒,在一个平台上统一支持宽表、时序、文本、对象、流、空间等多种数据模型的统一访问和融合处理。

传统数据存储方案往往需要为结构化数据使用关系型数据库,为半结构化数据使用HBase或Cassandra,为时序数据使用时序数据库,为文本检索使用搜索引擎。这种技术碎片化带来了组件繁杂、选型困难、数据同步链路冗长等一系列问题。当业务需要实现跨可用区高可用或全球同步时,各组件需要独立改造,故障率和维护成本急剧上升。Lindorm正是为了解决这一核心矛盾而设计的。

Lindorm采用存储计算分离、多模共享融合的云原生架构,以云原生分布式文件系统LindormDFS为统一存储底座,支撑宽表引擎、时序引擎、搜索引擎、计算引擎、流引擎、向量引擎、列存引擎等各个垂直专用的多模数据引擎。在多模引擎之上,Lindorm既提供统一的SQL访问实现跨模型联合查询,也提供HBase、OpenTSDB、Spark、HDFS、Solr、Kafka等开源标准接口,保障存量业务无缝迁移。Lindorm兼容SQL、HBase/Cassandra/S3、TSDB、HDFS、Solr、Kafka等多种标准接口。

2. Lindorm产品架构与核心引擎

Lindorm的多模能力主要由以下几个核心数据引擎协同提供,每个引擎针对特定的数据模型和工作负载进行了深度优化,同时又共享底层的统一存储系统,实现数据互融互通。

2.1 宽表引擎

宽表引擎是Lindorm的核心组件之一,兼容HBase API、Cassandra CQL、S3 API等多种开源标准接口,同时支持标准SQL访问。它面向海量半结构化和结构化数据设计,适用于元数据管理、订单处理、账单核算、用户画像、社交关系、Feed流、日志分析等大规模数据存储与查询场景。宽表引擎具备全局二级索引、多维检索、动态列、TTL等能力,支持千万级高并发吞吐和百PB级存储,吞吐性能是开源HBase的3到7倍,P99延迟仅为开源HBase的十分之一。

2.2 时序引擎

时序引擎是专门针对时序数据设计的分布式引擎,兼容OpenTSDB API、InfluxDB行协议,支持Prometheus作为Remote Storage将监控数据写入。时序引擎适用于物联网设备监控、应用性能监控、工业传感器数据采集、车联网轨迹跟踪等场景。它支持SQL查询,采用针对时序数据优化的高效压缩算法,将单个数据点的平均存储空间压缩到1到2个字节,整体存储使用量可降低90%。时序引擎还支持降采样、数据插值、空间聚合等专业时序计算能力。

2.3 搜索引擎

搜索引擎是采用存储和计算分离架构设计的分布式引擎,兼容Solr接口和SQL访问。它可无缝作为宽表引擎和时序引擎的索引存储,加速多维检索查询,具备全文检索、聚合计算、复杂多维查询等能力。搜索引擎适用于海量日志分析、账单检索、画像查询等需要高效全文检索和多维度组合查询的场景。

2.4 计算引擎与流引擎

计算引擎是基于云原生架构提供的分布式计算服务,兼容Spark计算模型和编程接口,深度融合Lindorm存储引擎特性。流引擎则兼容Kafka协议,支持实时数据接入与流式处理。

3. 开通Lindorm实例

3.1 账号准备与权限配置

在使用Lindorm之前,需要先完成云环境的准备工作并开通Lindorm实例。首先需要注册阿里云账号。如果使用RAM用户创建Lindorm实例,需要确认RAM用户具备相应权限。不同付费模式对RAM用户的权限要求有所不同:

  • 包年包月:需具备AliyunLindormFullAccess、AliyunVPCReadOnlyAccess、AliyunBSSOrderAccess权限
  • 按量付费:需具备AliyunLindormFullAccess、AliyunVPCReadOnlyAccess权限

如不具备权限,需要联系阿里云主账号为RAM用户授权。

3.2 选择商品类型

云原生多模数据库Lindorm针对不同的使用场景,提供了Lindorm V1、Lindorm、Lindorm通道服务(LTS)三种商品类型。Lindorm V1是独立集群的标准化部署方式,提供宽表、时序、搜索、文件、计算和流引擎,适用于大中型企业的生产环境。Lindorm支持宽表引擎、时序引擎、LTS等多种引擎,适用于大中型企业生产、个人开发者学习和小型企业的功能验证及开发测试。Lindorm通道服务(LTS)提供数据迁移同步、实时订阅、备份恢复等功能。

3.3 创建实例

创建Lindorm实例时,需要配置以下核心参数:

  • 付费模式:包年包月(预付费,适合长期需求,价格更实惠)或按量付费(后付费,适合短期需求,用完可立即释放)
  • 部署方案:单可用区(主备节点位于同一可用区)、多可用区基础版(主备节点位于不同可用区,具备跨可用区容灾)、多可用区高可用版(当前只支持宽表引擎)
  • 实例名称:设置便于后续业务识别的名称
  • 地域与可用区:选择与业务系统同地域的部署位置,以降低网络延迟

创建实例的具体操作可通过控制台、OpenAPI或SDK完成。控制台和OpenAPI均支持创建和释放Lindorm实例。

需要先登录阿里云控制台,点击:阿里云控制台

4. 网络配置与安全设置

4.1 网络选型

Lindorm实例创建完成后,需要根据业务场景选择合适的网络访问方式。Lindorm支持VPC(虚拟私有云)内网访问和公网访问两种方式。VPC内网访问延迟低、安全性高,推荐生产环境使用。公网访问需要单独开通外网地址。

4.2 配置IP白名单

无论使用内网还是公网访问,都需要将客户端IP地址添加至Lindorm的白名单中。具体操作步骤为:进入Lindorm控制台实例详情页面,点击左侧“访问控制”,然后点击“修改分组白名单”,将需要连接的客户端IP地址添加进去(多个IP用英文逗号隔开)。如果使用公网连接,需要获取公网IP并将其添加至Lindorm白名单。如果使用了VPN等代理,也需要将代理IP添加至白名单。

4.3 端口说明

Lindorm宽表引擎提供了多种协议的访问端口:

  • 30060:SQL端口(Avatica协议)
  • 33060:SQL端口(MySQL协议)
  • 30020:宽表端口(HBase兼容协议、Java访问方式)
  • 9042:CQL端口(Cassandra协议兼容)

连接前需要确认使用的是正确的端口号。

5. 使用Lindorm-cli连接数据库

Lindorm-cli是一个类似于MySQL shell命令行的工具,可用于通过命令行连接和操作Lindorm数据库。

5.1 下载与安装

进入Lindorm控制台实例详情页面,点击左侧“数据库连接”,然后点击“下载Lindorm Shell”。根据操作系统选择对应的版本(Windows、Linux、Mac)下载并安装。

5.2 连接命令

使用以下命令连接Lindorm:

./lindorm-cli -url <host:port> -username <用户名> -password <密码>

其中,<host:port>替换为实例详情页面中的数据库连接地址,<用户名>和<密码>默认为root(或根据实例配置修改)。

5.3 宽表引擎常用操作

连接成功后,可以执行以下SQL操作:

-- 创建数据库
CREATE DATABASE test_db;

-- 使用数据库
USE test_db;

-- 创建表
CREATE TABLE user_info (
    user_id VARCHAR PRIMARY KEY,
    name VARCHAR,
    age INT,
    city VARCHAR
);

-- 插入数据
UPSERT INTO user_info (user_id, name, age, city) VALUES ('u001', '张三', 28, '北京');

-- 查询数据
SELECT * FROM user_info WHERE user_id = 'u001';

-- 批量查询
SELECT * FROM user_info LIMIT 10;

6. 使用Java JDBC连接Lindorm

6.1 添加Maven依赖

在Maven项目的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.aliyun.lindorm</groupId>
    <artifactId>lindorm-all-client</artifactId>
    <version>最新版本</version>
</dependency>

推荐通过8.0及以上版本的MySQL JDBC驱动连接Lindorm宽表引擎。

6.2 JDBC连接示例

以下是通过Java JDBC连接Lindorm宽表引擎并进行数据操作的完整示例:

import java.sql.*;

public class LindormJDBCDemo {
    public static void main(String[] args) {
        // JDBC连接URL格式:jdbc:mysql://host:port/database
        String url = "jdbc:mysql://ld-xxxx-proxy.lindorm.rds.aliyuncs.com:33060/test_db";
        String username = "root";
        String password = "your_password";
        
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // 创建表
            String createTableSQL = "CREATE TABLE IF NOT EXISTS orders (" +
                "order_id VARCHAR PRIMARY KEY, " +
                "product_name VARCHAR, " +
                "quantity INT, " +
                "price DOUBLE" +
                ")";
            try (Statement stmt = conn.createStatement()) {
                stmt.execute(createTableSQL);
                System.out.println("表创建成功");
            }
            
            // 插入数据 - 使用PreparedStatement
            String insertSQL = "UPSERT INTO orders (order_id, product_name, quantity, price) VALUES (?, ?, ?, ?)";
            try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
                pstmt.setString(1, "ord001");
                pstmt.setString(2, "笔记本电脑");
                pstmt.setInt(3, 2);
                pstmt.setDouble(4, 8999.00);
                pstmt.executeUpdate();
                System.out.println("数据插入成功");
            }
            
            // 批量插入
            String batchInsertSQL = "UPSERT INTO orders (order_id, product_name, quantity, price) VALUES (?, ?, ?, ?)";
            try (PreparedStatement pstmt = conn.prepareStatement(batchInsertSQL)) {
                for (int i = 2; i <= 100; i++) {
                    pstmt.setString(1, "ord" + String.format("%03d", i));
                    pstmt.setString(2, "商品_" + i);
                    pstmt.setInt(3, i % 10 + 1);
                    pstmt.setDouble(4, 100.0 * i);
                    pstmt.addBatch();
                }
                pstmt.executeBatch();
                System.out.println("批量插入完成");
            }
            
            // 查询数据
            String querySQL = "SELECT order_id, product_name, quantity, price FROM orders WHERE price > ?";
            try (PreparedStatement pstmt = conn.prepareStatement(querySQL)) {
                pstmt.setDouble(1, 500.0);
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    System.out.println("订单ID: " + rs.getString("order_id") +
                        ", 商品: " + rs.getString("product_name") +
                        ", 数量: " + rs.getInt("quantity") +
                        ", 价格: " + rs.getDouble("price"));
                }
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

6.3 时序引擎JDBC连接

Lindorm时序引擎同样支持通过JDBC Driver进行连接。对于已经使用JDBC标准API访问多种异构数据库的应用,可以无缝切换到Lindorm时序引擎。

7. 使用Python连接Lindorm

7.1 环境准备

使用Python连接Lindorm需要安装Python 3.7及以上版本,并将客户端IP地址添加至Lindorm白名单。

7.2 使用mysql-connector-python连接

以下是通过Python的mysql-connector-python连接Lindorm宽表引擎的示例:

import mysql.connector

# 建立连接
conn = mysql.connector.connect(
    host="ld-xxxx-proxy.lindorm.rds.aliyuncs.com",
    port=33060,
    user="root",
    password="your_password",
    database="test_db"
)

cursor = conn.cursor()

# 创建表
cursor.execute("""
    CREATE TABLE IF NOT EXISTS sensor_data (
        sensor_id VARCHAR PRIMARY KEY,
        temperature DOUBLE,
        humidity DOUBLE,
        timestamp BIGINT
    )
""")

# 插入数据
cursor.execute("""
    UPSERT INTO sensor_data (sensor_id, temperature, humidity, timestamp)
    VALUES ('s001', 25.6, 60.2, 1640995200000)
""")
conn.commit()

# 批量插入
data = [
    ('s002', 26.1, 58.7, 1640995300000),
    ('s003', 24.8, 62.3, 1640995400000),
    ('s004', 27.2, 55.9, 1640995500000)
]
cursor.executemany(
    "UPSERT INTO sensor_data (sensor_id, temperature, humidity, timestamp) VALUES (%s, %s, %s, %s)",
    data
)
conn.commit()

# 查询数据
cursor.execute("SELECT * FROM sensor_data WHERE temperature > 25")
for row in cursor.fetchall():
    print(f"传感器: {row[0]}, 温度: {row[1]}, 湿度: {row[2]}")

# 关闭连接
cursor.close()
conn.close()

7.3 使用Python DB-API开发

Lindorm支持通过Python DB-API进行应用开发。对于使用ORM框架(如SQLAlchemy)的应用,Lindorm也提供了良好的兼容性。

8. 使用HBase Shell连接宽表引擎

由于Lindorm宽表引擎兼容HBase API,因此可以使用HBase Shell来连接和操作宽表引擎。

8.1 下载与配置

进入Lindorm控制台实例详情页面,点击左侧“数据库连接”,然后点击“下载Lindorm Shell”。将下载的压缩包解压到Linux系统下,并配置hbase-site.xml文件中的连接参数:

<configuration>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>ld-xxxx-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30020</value>
    </property>
    <property>
        <name>hbase.client.username</name>
        <value>root</value>
    </property>
    <property>
        <name>hbase.client.password</name>
        <value>root</value>
    </property>
</configuration>

8.2 连接与操作

配置完成后,运行以下命令连接:

./hbase shell

成功连接后,可以使用HBase Shell提供的DDL和数据读写操作命令。

9. 冷热分离与TTL生命周期管理

9.1 冷热分离概述

Lindorm宽表引擎支持冷热分离存储功能,可以将冷热数据分别存储在不同的存储介质上,有效提升热数据查询效率,降低冷数据存储成本。冷热分离与TTL均为分区级别,仅支持枚举时间分区。Lindorm在后台定期执行Compaction操作,在Compaction过程中将符合条件的数据行移动到冷存储。

9.2 配置冷热分离

可以在建表时开启冷热分离并设置冷热分界线:

-- 建表时开启冷热分离,设置冷热分界线为7天
CREATE TABLE log_data (
    log_id VARCHAR PRIMARY KEY,
    log_content VARCHAR,
    log_time BIGINT
) WITH (
    'COLD_BOUNDARY' = '7d'
);

-- 或者使用CHS参数(Lindorm SQL语法)
CREATE TABLE log_data_v2 (
    log_id VARCHAR PRIMARY KEY,
    log_content VARCHAR,
    log_time BIGINT
) WITH (
    'CHS' = '7d'
);

也可以对已有表修改冷热分离配置:

ALTER TABLE log_data SET 'COLD_BOUNDARY' = '30d';

9.3 TTL数据生命周期

TTL(Time To Live)用于自动清理过期数据。可以同时配置冷热分界线和TTL,当已归档的冷数据时间戳超过TTL设定的存活时间时,系统会自动触发清理机制。

-- 设置TTL为90天
ALTER TABLE log_data SET 'TTL' = '90d';

-- 同时设置冷热分界线和TTL
ALTER TABLE log_data SET 'COLD_BOUNDARY' = '7d', 'TTL' = '90d';

冷热分离和数据保留策略的设置都是基于事件时间,不支持基于入库时间设置。整个分区过期后才会删除该分区的全部数据。

10. 监控告警配置

10.1 查看告警规则

登录Lindorm管理控制台,在左上角选择实例所属的地域,在实例列表页单击目标实例ID。在左侧导航栏单击“报警配置”可以查看实例的告警规则。

10.2 创建告警规则

在实例管理页面进入Lindorm告警列表页面,单击“创建Lindorm告警规则”。Lindorm支持为关键实例指标创建告警规则,当指标触发阈值时,系统会自动向指定告警组发送告警通知。

建议针对以下关键指标配置告警:

  • CPU使用率
  • 内存使用率
  • 存储空间使用率
  • 请求延迟
  • QPS/TPS
  • 连接数

11. 数据迁移与同步

11.1 使用DTS进行数据同步

数据传输服务DTS支持将多种数据源的数据同步至Lindorm实例的宽表引擎。目前支持的同步源包括:

  • PolarDB MySQL版
  • RDS MySQL
  • 云数据库MongoDB版
  • PolarDB-X 2.0

11.2 使用LTS进行数据迁移

Lindorm通道服务(LTS)提供数据迁移同步、实时订阅、备份恢复等功能。在LTS操作页面中,可以创建导入任务,选择RDS数据源、DTS数据源以及目标数据源。LTS支持SLS实时数据复制等功能。

12. 最佳实践与性能优化

12.1 使用PreparedStatement提升性能

使用时序引擎时,使用prepareStatement绑参方式可以减少服务端资源占用,提高查询性能。

12.2 合理设置TTL与冷热分离

根据数据的访问频率和重要性,合理设置TTL和冷热分界线。热数据保留在性能更高的存储介质上,冷数据自动迁移到低成本存储,既保证了查询性能又控制了存储成本。

12.3 批量写入优化

对于大批量数据写入场景,建议使用批量写入接口(如JDBC的executeBatch、Python的executemany),减少网络往返次数,提升写入吞吐。

12.4 监控与告警

生产环境务必配置完善的监控告警,及时发现和处理性能瓶颈、存储不足等问题。

12.5 网络优化

尽量将业务应用部署在与Lindorm实例相同的VPC和可用区内,使用内网地址访问,降低网络延迟和流量费用。

13. 常见问题与解答

问1:使用Lindorm-cli连接宽表引擎失败,可能是什么原因?

答:请逐一排查以下方面:是否将客户端IP添加至Lindorm白名单;是否使用了VPN等代理但未将代理IP添加至白名单;服务端口是否可用。可以使用telnet命令检测Lindorm端口连通性。

问2:Lindorm宽表引擎支持哪些访问端口?

答:Lindorm宽表引擎提供以下端口:30060(SQL端口,Avatica协议)、33060(SQL端口,MySQL协议)、30020(宽表端口,HBase兼容协议)、9042(CQL端口,Cassandra协议兼容)。

问3:冷热分离和TTL可以同时配置吗?

答:可以。冷热分离和TTL可以同时配置,当已归档的冷数据时间戳超过TTL设定的存活时间时,系统会自动触发清理机制来清理这部分数据。但需要注意,冷热分离和TTL的设置都是基于事件时间,不支持基于入库时间设置。

问4:如何将其他数据库的数据迁移到Lindorm?

答:可以通过数据传输服务DTS将RDS MySQL、PolarDB MySQL版、MongoDB等数据源的数据同步至Lindorm宽表引擎。也可以使用Lindorm通道服务LTS进行数据迁移同步。

问5:Lindorm时序引擎支持哪些写入方式?

答:Lindorm时序引擎支持多种写入方式:Native SDK(推荐用于Java应用)、JDBC Driver(适用于已使用JDBC标准API的应用)、HTTP API SQL(适用于非Java语言开发的应用)。时序引擎还兼容OpenTSDB API和InfluxDB行协议。

问6:升级Lindorm宽表小版本有什么影响?

答:升级宽表小版本可能导致单个节点短暂断开连接,每个Server滚动重启,升级期间Region会下线再上线。对低负载实例影响较小;对高负载或时延敏感实例可能有一定影响,建议在业务低峰期进行。每个节点约需5到30分钟,具体时间取决于Region数量及负载。

相关文章

高返点高佣金!阿里云返点返佣,赚取更多回报!

高返点高佣金!阿里云返点返佣,赚取更多回报!

阿里云返点 阿里云是一家提供云计算、大数据、人工智能等领域的企业级云服务商,致力于为客户提供全方位的云计算解决方案。而阿里云返点则是阿里云针对其众多客户推出的一项优惠政策。如果你想获取返点,…

阿里云代理返点返佣最新有多少?

阿里云代理返点返佣最新有多少?

如果你是在使用阿里云服务器(ECS)上运行你的业务,那么你需要了解返点这个概念。阿里云返点是指,如果你购买的云服务器对阿里云的贡献越大,你就能获得更多的返点,减轻你使用阿里云的成本。想拿阿里云返点或返…

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…