• 使用外部db 加速dremio 查询


    官方默认的实现是基于rest api 的,尽管可以开启数据反射提升查询速度,但是因为基于http连接有开销性能一般

    可选的解决方法

    • etl dremio -> db 实现一个加速
      问题也很明显,失去了使用dremio 的价值了
    • 基于cube.js 预聚合处理(使用外部预聚合)

    基于外部预聚合的解决方法

    • 参考配置
      cube.js
     
    // Cube.js configuration options: https://cube.dev/docs/config
    const DremioDriver = require("@cubejs-backend/dremio-driver")
    const MysqlDriver = require("@cubejs-backend/mysql-driver")
     
    module.exports = {
        externalDbType: 'mysql',
        externalDriverFactory: () =>
          new MysqlDriver({
            host: 'localhost',
            database: 'demoapp',
            port: 3306,
            user: 'root',
            password: 'jjjjj'
          }),
        dbType: ({ dataSource } = {}) => {
            return "dremio"
        },
        driverFactory: ({ dataSource } = {}) => {
            let dremioDriver = new DremioDriver({
              readOnly: true
            })
            return dremioDriver
        },
        telemetry: false
    };

    schema 使用

    cube(`HrSeaApproveStatistics`, {
      sql: `SELECT * FROM "Hr".hr_sea_approve_statistics`,
     
      joins: {
     
      },
      preAggregations: {
        main: {
          sqlAlias: `original`,
          type: `originalSql`,
          external: true
        }
      },
      measures: {
        count: {
          type: `count`,
          drillMembers: [approverid, startDate, endDate]
        },
     
        instanceCount: {
          sql: `instance_count`,
          type: `sum`
        }
      },
     
      dimensions: {
        approverid: {
          sql: `approverid`,
          type: `string`
        },
     
        startDate: {
          sql: `start_date`,
          type: `time`
        },
     
        endDate: {
          sql: `end_date`,
          type: `time`
        }
      },
     
      dataSource: `default`
    });

    一个问题

    因为官方dremio driver 在处理readOnly的时候有一个bug,我已经提交官方issue 同时pr 解决了,但是还没有发布npm官方
    临时的解决方法(修改driver 的构造函数)

     
        this.config = {
          host: config.host || process.env.CUBEJS_DB_HOST || 'localhost',
          port: config.port || process.env.CUBEJS_DB_PORT || 9047,
          user: config.user || process.env.CUBEJS_DB_USER,
          password: config.password || process.env.CUBEJS_DB_PASS,
          database: config.database || process.env.CUBEJS_DB_NAME,
          ssl: config.ssl || process.env.CUBEJS_DB_SSL,
          ...config // 此处是核心
        };

    说明

    基于外部存储的模式性能提升是很明显的,我们的接口查看基本就可以在秒级响应了

    参考资料

    https://cube.dev/docs/caching/using-pre-aggregations#read-only-data-source
    https://github.com/cube-js/cube.js/pull/2443

  • 相关阅读:
    Codeforces Round #308 (Div. 2) A B C 水 数学
    2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869
    Mysql5.7 安装
    NTP服务器时间同步
    postgres-xl 集体搭建(2)
    postgres-xl 集体搭建(1)
    postgres-xl 集体搭建
    单词本
    docker machine
    桥接 NAT HOST-ONLY
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14584621.html
Copyright © 2020-2023  润新知