是否有(开源)基于 MDX 的内存中 OLAP 服务器? [关闭]
Posted
技术标签:
【中文标题】是否有(开源)基于 MDX 的内存中 OLAP 服务器? [关闭]【英文标题】:Is there a (open-source) MDX-based in-memory OLAP server? [closed] 【发布时间】:2014-11-12 22:10:55 【问题描述】:我想知道是否有可以处理 MDX 的 内存中 OLAP 服务器。
我找到了Wikipedia article。 但它没有说明内存中的功能......
我所知道的只有 Mondrian,它也是上面 wiki 文章中提到的两个开源解决方案之一。
到目前为止,我只是与 Mondrian 一起工作过......我不认为 Mondrian 是一个真正的内存中 OLAP 服务器。 原因如下: 它有一个内存缓存,其中包含查询结果。但是它们的第一次执行需要很长时间,并且必须从 RDBMS 加载。 (http://mondrian.pentaho.com/documentation/faq.php#Scalability) 我认为更好的方法是: 将所有事实和维度表加载到缓存中,然后对该内存中的数据执行每个查询。
据我所知,Oracle 今年将在 12c 企业版中发布在内存中拥有部分(或全部)表的可能性。这将加速 OLAP 服务器,后者仅使用 SQL 查询 RDBMS 事实表。 ...但是企业版很贵...
我想听听对此的一些其他意见。
最好的问候, 丹尼斯。
【问题讨论】:
您可以通过在 ETL 完成时运行您希望保留在内存中的查询来预热 Mondrian 的缓存。但是,当您在内存中说...显然您的事实表不是数十亿行的事实,否则将不可能将所有内容存储在 RAM 中。这就是为什么蒙德里安甚至不尝试加载所有内容,它应该处理多 Tb 立方体,试图将其全部保存在内存中是没有意义的。达到一定的细节水平......这是一个完全不同的游戏。 预热想法听起来像是一个很好且易于实施的解决方法,谢谢。关于多维数据集大小的一些建议:我认为每月大约 5GB 数据,过去 3 年的数据将是 180GB 内存表,用于 olap 系统。多维数据集的数据大部分时间都是预先汇总的,例如一天/一个月的客户收入。因此,即使 DWH 是多 TB 的,数据集市和多维数据集也不必那么大......顺便说一句,如果您的多维数据集是多 TB 大的,您如何加速 mondrian? 提高性能的方法太多了,这本身就是一本书。几个总体思路: 1)切换到高性能的面向列的数据库(vertica、infinidb、monetdb 等等); 2) 索引、索引、索引(vertica 中的投影;infinidb 中没有任何内容;莫奈中的索引); 3) 聚合表(mondrian 选择具有我们要求的详细程度的最小聚合表); 4)缓存,很多,在多个级别(DB缓存,蒙德里安缓存,查询结果缓存等); 5) 到数据库的网络路径; 6) 更简单的 MDX 查询,如果它们太大,则按位分解。等等…… @nsousa 的好建议。我再给你推荐一个:IO瓶颈。在一个项目中,我们使用 512GB 的 RAM 作为 DWH 存储。在所有其他 DWH 项目中,我都坚持使用 SSD 磁盘。 目前没有 MDX 接口和相当陈旧的开发,但它确实有效,而且速度非常快。不仅仅是因为它在内存中,还因为底层 C 引擎处理 data.table 包中的查询:github.com/jangorecki/data.cube 我希望有一天能重新激活这个项目,并最终添加 MDX 接口支持。 【参考方案1】:在 ActiveViam,我们开发了 Sparkube,这是 Apache Spark 的一个扩展,它将任何 Apache Spark 数据集公开为一个 OLAP 多维数据集,您可以使用 MDX 从 Excel 数据透视表、Tableau 软件或 ActiveUI(一个直接嵌入在 Sparkube 中的 Web 前端)。聚合分布在 Spark 集群中,并在内存中动态执行。
http://activeviam.com/sparkube
Sparkube 中的 MDX 引擎是我们在商业 ActiveViam 分析平台中开发的引擎,因此被许多人使用和测试。
例如,下面是您如何将 CSV 文件的内容挂载到内存中并将其公开为多维立方体:
// Load a file into a Spark dataset.
// Here we load a CSV file, get the column names from
// the CSV headers, and use Spark automatic type inference.
var ds = spark.read
.format("csv")
.option("header","true")
.option("inferSchema","true")
.load("path/to/file.csv")
// Import the sparkube library (the sparkube jar must be in the classpath)
import com.activeviam.sparkube._
// Expose the dataset as a multidimensional cube.
// You can start visualizing the cube right away at http://localhost:9090/ui
// or connect from Excel with the XMLA protocol at http://localhost:9090/xmla
new Sparkube().fromDataset(ds)
.withName("My first cube")
.expose()
【讨论】:
您似乎已链接到您自己的项目/应用程序/服务。如果您这样做,您需要披露它是您自己的。如果您不披露,它通常被视为垃圾邮件。请参阅:What signifies "Good" self promotion? 和 How to not be a spammer。 哇,好主意!所以它就像 Spark isnit 的驱动程序 OLAP? 是的,说得好。 Sparkube 就像 Apache Spark 的 OLAP 驱动程序 ;-) 它实现了 MDX 查询语言和 XMLA 协议(多维 OLAP 的两个标准),并将所有数据处理委托给 Spark。以上是关于是否有(开源)基于 MDX 的内存中 OLAP 服务器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章