使用外部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,
};
说明
基于外部存储的模式性能提升是很明显的,我们的接口查看基本就可以在秒级响应了
参考资料
https://cube.dev/docs/caching/using-pre-aggregations#read-only-data-source
https://github.com/cube-js/cube.js/pull/2443
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-03-26 envdir 环境变量管理工具
2020-03-26 几个方便处理wal log 的工具
2019-03-26 Writing and playing with custom Terraform Providers
2019-03-26 Write your own Terraform provider: Part 1
2019-03-26 Creating Modules
2018-03-26 使用openresty && minio && thumbor 构建稳定高效的图片服务器