改造mondrian的构想

本文探讨了mondrian作为ROLAP引擎的局限,提出了将其缓存迁移到外部存储如redis、hbase以解决内存问题和实现服务化。同时,文章分析了mondrian的SQL生成效率问题,并提出优化建议。预计算和缓存一致性是优化关键,讨论了增量计算的可能性。后续计划是研究mondrian和kylin,以构建支持MDX和SQL查询的高效OLAP引擎。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     项目中最近需要使用mondrian,于是开始首先阅读以下mondrian的源代码,总体看来mondrian是一个ROLAP引擎,但是它的定位还是一个以库形式 提供的组件,而不是作为服务,例如它将所有的缓存都放在进程内部,当我在一个进程中创建多个cube并且一直保持着他们的connection会导致OOM,所以对mondrian作为服务化的首要改造还是在于如何将mondrian的缓存挪出本进程,放到第三方的存储系统例如redis、hbase等NOSQL存储系统中,这样一方面可以解决上面提到的进程内缓存问题,另一方面可以将数据独立出去可以将服务器做成无状态的,可以水平扩展,保证高可用性。除了缓存这一步之外,另外需要对mondrian做优化的地方还有生成SQL这一部分,mondrian生成的SQL主要包括查看一个level下所有的member和查看一个cell结果这两类,前者无非就是select distinct xxx或者select xxx group by xxx,mondrian一般使用select distinct的方式,这种没有什么可以优化的地方,另外还有一种查询是查询多个维度聚合之后的某一个度量的值,一般是多个维度group by之后计算某一列的sum、avg等值,但是如果在group by之前需要过滤掉一些元素的话,mondrian会将剩余的语句翻译成where xxx IN (xxx1, xxx2,...)(通过执行日志可以看到),这种SQL执行效率是比较低的,即使xxx这一列有主键,改造的方案是尽可能得将IN语句改成多个between或者大于小于这样的SQL,这个的优先级可以低一些。

     上面提到的是对mondrian本身不足需
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值