暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Halo数据库 TAC架构概述

Halo Tech 2026-01-30
118
    经过多轮技术迭代 —— 不断更新、推翻、优化,打磨出这套更高效、更稳定、更好用的TAC版本!
一、架构概述
    TAC架构基于公司自研的分布式共享存储HSM。采用存算分离,并且所有计算节点共用同一份数据。TAC架构具有如下特性:
TAC架构原理图
存算分离、共享存储
  • 所有节点共用一份数据,节省了存储空间;
  • 扩容节点无需拷贝数据,扩容更快速、高效。

缓存融合、数据强一致
  • 采用缓存融合技术,保证数据强一致

RW(主节点):核心写节点+本地读节点
  • 读操作(数据查询):直接在本地节点处理,流程简洁高效(①→④);
  • 写操作(插入 / 更新 / 删除):本地执行(①→④)。

RO(只读节点):高效读节点+智能写路由
    • 读操作(数据查询):同样本地节点处理,分担主节点读压力(①→④);
    • 写操作:不直接执行,而是通过专属流程(①→②→③→④)转发给主节点执行,执行完成后将结果返回给客户端。

        划重点!📌对上游系统来说,RW 主节点和 RO 只读节点均可接收并执行读写操作,无需区分主从节点。从底层逻辑来看,主节点负责核心写操作,只读节点专注分担读压力,通过这样的实现方式,既实现了负载分发,又由于写操作集中于一个节点,避免了分布式锁的高成本开销,非常适合TP、AP或者TP/AP混合的场景

    二、关键功能特性与场景适配
    核心功能:所有的读操作都在本地执行,所有的写都在主节点处理。可观察日志监控从节点写操作的实际行为。
    1. 函数 / 存储过程:只读标记与灵活配置
    • 系统属性:系统表pg_proc
      proreadonly
      字段,用于标记函数 / 存储过程的只读属性,默认值为false
    • 语法新增:支持ALTER FUNCTION/PROCEDURE funcname (NOT) READONLY
      语法,灵活修改函数 / 存储过程的读写属性;
    • 执行逻辑:标记为readonly
      的函数 / 存储过程,在 RO 只读节点可本地执行,无需转发主节点,提升执行效率;非只读函数 / 存储过程,自动转发至 RW 主节点执行。例如:
      CREATE OR REPLACE FUNCTION add_numbers(
          a INT,
          b INT
      RETURN INT
      IS
      BEGIN
          RETURN a + b;
      END add_numbers;
      /
      SELECT proname, proconfig, prosecdef, proreadonly FROM pg_proc WHERE proname = 'add_numbers';
      --该函数为读函数,设置为只读
      ALTER FUNCTION add_numbers(a INT, b INT) READONLY;
      SELECT proname, proconfig, prosecdef, proreadonly FROM pg_proc WHERE proname = 'add_numbers';
      select add_numbers(2,9);
      只读节点执行结果如下:
      2. 视图:只读标志,自动判断读写
          系统表pg_viewdef的属性字段viewreadonly为视图只读标志(默认为false)。自定义视图自动判断读写,并根据读写来考虑本地处理或者转发处理。例如:
      3. 预处理语句:支持重连,稳定性拉满
          PREPARE/EXECUTE等语句转发主节点执行,支持主节点网络中断重连不影响只读节点会话。例如:
      4. 数据导入导出:主节点统一执行,保障数据一致

          数据导入导出是业务中常见的操作,所有COPY
      命令均由主节点统一执行,避免了多节点导入导出导致的数据不一致问题。例如:

        CREATE TABLE copy_stdin (
            id   int,
            name text,
            score numeric(5,2)
        );
        \copy copy_stdin FROM STDIN CSV HEADER
        id,name,score
        1,Alice,98.5
        2,Bob,87
        3,Cathy,99.9
        \.
        SELECT * FROM copy_stdin;
        \copy (SELECT * FROM copy_stdin) TO '/home/wangjiajia/Workspace/Halo_Database/.build/data/Nac790/copycsv.csv' CSV HEADER;


        create table t_copy(id int,name varchar(20));
        create table t_copy2(id int,name varchar(20));
        insert into t_copy select generate_series(1,100000),
        substring('abcdefghijiklmnopqrstuvwxyz',(random()*5)::int,(random()*20)::intas name;
        copy t_copy to '/home/wangjiajia/Workspace/Halo_Database/.build/data/Nac790/cpyy';


        copy t_copy2 from '/home/wangjiajia/Workspace/Halo_Database/.build/data/Nac790/cpyy';
        5. 匿名块和事务块:主节点统一执行
        主节点日志:
        三、总结

            本次 TAC架构的升级,不是简单的 “修修补补”,而是从底层逻辑到细节场景的全面优化:

        ✅ 通过智能 SQL 路由,实现了负载的合理分发,大幅提升系统性能;

        ✅ 通过缓存融合、核心操作主节点统一执行,保障了数据一致性;

        ✅ 通过多场景适配,降低了使用门槛,提升了架构的易用性。

            这套架构,为大规模数据处理与高并发访问提供了坚实的技术基础,也为后续的产品优化打下了良好的铺垫。未来,我们还将持续打磨 Halo 数据库产品,不断攻克行业技术难题,为客户提供更优质、更高效的产品及服务~

        文章转载自Halo Tech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论