用于 NodeJS 的 OLAP 服务器
Posted
技术标签:
【中文标题】用于 NodeJS 的 OLAP 服务器【英文标题】:OLAP Server for NodeJS 【发布时间】:2014-08-05 07:19:21 【问题描述】:我一直在寻找为应用程序提供分析的方法,该应用程序由用 NodeJs 和 mysql 编写的 REST 服务器提供支持。发现了 OLAP,它实际上可以使这变得更容易。
并找到了一个 python 库,它提供了一个名为“Slicer”的 OLAP HTTP 服务器
http://cubes.databrewery.org/
有人能解释一下这是如何工作的吗?这是否意味着我必须更新我的架构。并创建所谓的事实表?
这可以与我的 NodeJS 应用程序一起使用吗?有什么例子吗?因为我只创建了单个服务器应用程序。 python会驻留在同一个nodejs服务器上。它将如何开始? ('forever app.js' 是我的默认脚本)
如果我因为没有 exp 而不能使用 python,那么在 Nodejs 中做它的基础是什么?
我的模型基本上是单词列表,所以我的 olap 查询是以天、周、月为单位的单词,长度为 2、5、10 个字母,语言为英语、法语、德语等
非常感谢您的想法、提示和指导!
【问题讨论】:
【参考方案1】:如您所见,CUbes 提供了一个 HTTPS OLAP 服务器(slicer
工具)。
有人能解释一下这是如何工作的吗?
作为 OLAP 服务器,您可以向服务器发出 OLAP 查询。该 API 是基于 REST/JSON 的,因此您可以通过 HTTP 从 javascript、nodejs、Python 或您选择的任何其他语言轻松查询服务器。
服务器可以回答 OLAP 查询。 OLAP 查询基于“事实”和“维度”模型。例如,您可以查询“给定国家和产品的总销售额,按月份逐项列出”。
这是否意味着我必须更新我的架构。并创建所谓的事实表?
OLAP 查询是围绕事实和维度概念构建的。
面向 OLAP 的数据仓库策略通常涉及创建这些 Fact 和 Dimension 表,构建所谓的 Star Schema 或 Snowflake Schema。这些模式为关系数据库上的 OLAP 类型查询提供了更好的性能。数据通常由所谓的ETL 进程(它可以是一个简单的脚本)加载,该进程以适当的形式加载数据。
但是,Python Cubes 框架不会强制您更改架构或创建替代架构。它有一个 SQL 后端,允许您定义模型(根据事实和维度),而无需更改实际的数据库模型。这是模型定义的文档:https://pythonhosted.org/cubes/model.html。
但是,在某些情况下,您可能仍希望为数据挖掘定义架构并使用转换过程来定期加载数据。这取决于您的需求、您拥有的数据量、性能考虑等...
借助 Cubes,您还可以使用其他非 RDBMS 后端(例如 MongoDB),其中一些提供内置聚合功能,像 Cubes 这样的 OLAP 服务器可以利用。
这可以与我的 NodeJS 应用程序一起使用吗?
您可以从 NodeJS 向您的 Cubes Slicer 服务器发出查询。
有什么例子吗?
有一个 Javascript 客户端库来查询多维数据集。你可能想用这个:https://github.com/Stiivi/cubes.js/
我不知道任何使用 NodeJS 的示例。您可以尝试从 Cubes (https://github.com/Stiivi/cubes/tree/master/incubator) 中包含的 AngularJS 应用程序中获得一些灵感。另一个客户端工具是 CubesViewer,在构建模型时可能会对您有用:http://jjmontesl.github.io/cubesviewer/。
因为我只创建了单服务器应用程序。 python会驻留在同一个nodejs服务器上。它将如何开始? ('forever app.js' 是我的默认脚本)
您可以将 Cubes Slicer 服务器作为 Web 应用程序(直接从您的 Web 服务器,即 Apache)运行。例如,对于 Apache,您可以使用 apache-wsgi mod,它允许为 python 应用程序提供服务。
Slicer 还可以在独立进程中作为小型 Web 服务器运行,这在开发过程中非常方便(但我不建议在生产环境中使用)。在这种情况下,它将侦听不同的端口(通常为:http://localhost:5000
)。
如果我因为没有 exp 而不能使用 python,那么在 Nodejs 中做它的基础是什么?
您根本不需要使用 Python。您可以配置和使用 Python Cubes 作为 OLAP 服务器,并从 Javascript 代码(即直接从浏览器)运行查询。从客户端的角度来看,它就像一个数据库系统,您可以通过 HTTP 查询并获得 JSON 格式的响应。
【讨论】:
似乎我必须创建事实和维度,但 mysql 到目前为止还没有允许这样做吗? 你确定我不必在 SQLAlchemy 中为多维数据集定义模型吗? 顺便说一句,我的数据并不复杂也不大。我只想要时间和语言(每周、每月、每年的聚合)。现在我已经为单维聚合创建了手动表,即愚蠢的时间! 你不需要定义 SQLAlchemy 模型,通常你不需要修改你的 MySQL 数据库(也许在复杂的情况下映射可能很困难)。您只需要使用 Cubes 模型定义映射:pythonhosted.org/cubes/model.html。以上是关于用于 NodeJS 的 OLAP 服务器的主要内容,如果未能解决你的问题,请参考以下文章
基于 Web 的商业智能工具,使用 dc.js 或 olap 用于 Web 应用程序仪表板