在 Apache Doris 中,并没有原生的 TEXT 类型(这是 MySQL 的概念),但在创建表时为了兼容 MySQL 协议,可以使用 TEXT 关键字,Doris 内部会将其映射为 STRING 类型。

关于存储容量,核心结论如下:

1. 理论存储上限

  • 类型映射TEXT / LONGTEXT 在 Doris 中对应 STRING 类型。
  • 单字段上限STRING 类型单个字段最大支持 2GB 数据。
  • VARCHAR 对比VARCHAR 类型最大支持 65533 字节(约 64KB)。

2. 实际限制(重要)

虽然 STRING 理论支持 2GB,但实际使用中受限于 单行大小限制(Row Size Limit)

  • 默认限制:Doris 默认单行数据大小不能超过 100KB
    • 如果单行数据(所有列加起来)超过 100KB,导入时会报错 Error: row size too large
  • 如何调整:可以通过 Session 变量调整 max_row_size
    
    
    -- 查看当前限制
    SHOW VARIABLES LIKE 'max_row_size';
    
    -- 临时调整(当前会话有效),例如调整为 10MB
    SET max_row_size = 10485760; 
    注意:调大此值会影响内存使用和查询性能,需谨慎。

3. 建表示例


CREATE TABLE my_table (
    id INT,
    -- MySQL 兼容写法,内部转为 STRING
    content TEXT,              
    -- 或者直接使用 Doris 原生类型
    description STRING         
) ENGINE=OLAP
DUPLICATE KEY(id);

4. 性能与建议

尽管能存 2GB,但 强烈不建议 在 Doris 中存储超大文本,原因如下:

问题说明
内存压力查询时需要将数据加载到内存,大文本会迅速消耗内存,导致 OOM。
查询性能列存数据库对大字段压缩率较低,且扫描大字段会显著降低 I/O 效率。
导入限制max_row_size 限制,导入大文本容易失败。
索引失效大文本字段通常无法有效建立索引,查询效率低。

✅ 最佳实践

  1. 小文本(< 64KB):使用 VARCHAR
  2. 中等文本(< 100KB):使用 STRING,但注意监控行大小。
  3. 大文本(> 100KB)
    • 方案:将文本内容存储在 HDFS / S3 / OSS 等对象存储中。
    • Doris 中:仅存储文件的 URL 链接 或 路径(使用 VARCHAR 即可)。
    • 查询时:通过应用层根据 URL 去对象存储获取内容。

总结

  • 类型TEXT 等同于 STRING
  • 上限:单字段 2GB,但受单行 100KB(默认)限制。
  • 建议:超过 100KB 的文本,请存对象存储,Doris 只存链接。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐