Doris 是一个现代化的、高性能的、实时的分析型数据库,由 Apache Doris 项目提供。Apache Doris 是一个开源的、分布式的、列式存储的数据库,旨在提供快速的实时数据分析能力。它结合了 MPP(大规模并行处理)架构和列式存储技术,能够高效地处理大规模数据集和复杂查询。

主要特点

  1. 高性能查询
  2. 通过列式存储和向量化执行优化,Doris 能够在几秒钟内处理 TB 级别的数据。
  3. 支持并行查询处理和分布式查询处理,进一步提高性能。

  4. 实时数据分析

  5. Doris 可以实时处理和返回查询结果,适用于需要快速响应的应用场景,如实时监控、日志分析等。

  6. 可扩展性

  7. 支持水平扩展,可以通过添加更多的节点来增加系统的处理能力。
  8. 支持分布式表,可以在多个节点上分布数据,实现负载均衡和高可用性。

  9. 丰富的数据类型

  10. 支持多种数据类型,包括基本类型(如整数、浮点数、字符串)、数组、嵌套类型等。
  11. 支持复杂的查询操作,如聚合、窗口函数、子查询等。

  12. 易用性

  13. 提供 SQL 接口,支持标准的 SQL 查询语言,易于学习和使用。
  14. 支持多种客户端工具和库,包括命令行客户端、Web 界面、API 和多种编程语言的客户端库。

表类型

Dorris 支持多种表类型,每种表类型都有其特定的用途和优化方向:

  1. 聚合模型表(Aggregation Table)
  2. 适用于需要频繁更新和聚合的场景。
  3. 支持的数据模型包括 SUM、MIN、MAX、REPLACE 等。
  4. 适合用于实时统计和汇总数据。

  5. 唯一模型表(Unique Table)

  6. 适用于需要去重的场景。
  7. 每条记录的主键必须唯一。
  8. 适合用于记录用户的唯一行为数据。

  9. 未聚合模型表(Unaggregated Table)

  10. 适用于需要存储原始数据的场景。
  11. 每条记录都会被完整存储,不会进行聚合或去重。
  12. 适合用于日志分析和详细数据查询。

  13. 双写模型表(Duplicate Table)

  14. 适用于需要在多个副本中存储相同数据的场景。
  15. 每个副本都会存储完整的数据。
  16. 适合用于高可用性和容错性要求高的场景。

创建表

以下是一些创建不同类型表的示例:

创建聚合模型表

CREATE TABLE aggregation_table
(
    k1 INT,
    k2 VARCHAR(20),
    v1 BIGINT SUM,
    v2 DOUBLE MAX,
    v3 DECIMAL(10, 2) REPLACE
)
DISTRIBUTED BY HASH(k1) BUCKETS 10
PROPERTIES ("replication_num" = "3");

创建唯一模型表

CREATE TABLE unique_table
(
    k1 INT,
    k2 VARCHAR(20),
    v1 BIGINT,
    v2 DOUBLE
)
UNIQUE KEY(k1, k2)
DISTRIBUTED BY HASH(k1) BUCKETS 10
PROPERTIES ("replication_num" = "3");

创建未聚合模型表

CREATE TABLE unaggregated_table
(
    k1 INT,
    k2 VARCHAR(20),
    v1 BIGINT,
    v2 DOUBLE
)
DISTRIBUTED BY HASH(k1) BUCKETS 10
PROPERTIES ("replication_num" = "3");

创建双写模型表

CREATE TABLE duplicate_table
(
    k1 INT,
    k2 VARCHAR(20),
    v1 BIGINT,
    v2 DOUBLE
)
DUPLICATE KEY(k1, k2)
DISTRIBUTED BY HASH(k1) BUCKETS 10
PROPERTIES ("replication_num" = "3");

插入数据

INSERT INTO aggregation_table (k1, k2, v1, v2, v3) VALUES (1, 'a', 10, 3.14, 100.01);
INSERT INTO unique_table (k1, k2, v1, v2) VALUES (1, 'a', 10, 3.14);
INSERT INTO unaggregated_table (k1, k2, v1, v2) VALUES (1, 'a', 10, 3.14);
INSERT INTO duplicate_table (k1, k2, v1, v2) VALUES (1, 'a', 10, 3.14);

查询数据

SELECT * FROM aggregation_table;
SELECT * FROM unique_table;
SELECT * FROM unaggregated_table;
SELECT * FROM duplicate_table;

性能优化

  1. 索引
  2. 使用主键和二级索引优化查询性能。

  3. 分区

  4. 对大数据表进行分区,减少查询时需要扫描的数据量。

  5. 缓存

  6. 使用缓存机制减少重复查询的开销。

  7. 分布式架构

  8. 通过分布式表和集群配置提高查询性能和数据可靠性。

社区和支持

Doris 拥有一个活跃的社区,提供了丰富的文档、教程和案例研究。你可以通过以下渠道获取支持:

  • 官方文档:https://doris.apache.org/docs/
  • GitHub 仓库:https://github.com/apache/doris
  • 社区论坛:https://doris.apache.org/community/

希望这些信息对你有所帮助!如果你有任何具体的问题或需要进一步的帮助,请随时提问。