NodeJS的OLAP服务器
我一直在寻找为一个由NodeJs和MySQL驱动的应用提供分析的方法。然后我发现了OLAP,这可以让这个过程简单很多。
我还找到一个Python库,它提供了一个叫'Slicer'的OLAP HTTP服务器。
有没有人能解释一下这个是怎么运作的?这是否意味着我需要更新我的数据库结构,并创建所谓的事实表?
这个可以和我的NodeJS应用一起使用吗?有没有例子?因为我只创建过单服务器的应用。Python会和NodeJS在同一个服务器上吗?它是怎么启动的?(我的默认脚本是'forever app.js')
如果我不能使用Python,因为我没有经验,那么在Nodejs中做这件事的基本步骤是什么?
我的模型基本上是一个单词列表,所以我有的OLAP查询是关于在天、周、月内由2、5、10个字母组成的单词,语言包括英语、法语、德语等等。
非常感谢任何想法、提示和指导!
1 个回答
正如你所发现的,Cubes 提供了一个 HTTPS 的 OLAP 服务器(也就是 slicer
工具)。
有人能解释一下这是怎么回事吗?
作为一个 OLAP 服务器,你可以向服务器发送 OLAP 查询。这个服务器使用的是 REST/JSON 的接口,所以你可以很方便地通过 HTTP 从 Javascript、nodejs、Python 或其他你喜欢的语言来查询服务器。
服务器可以回答 OLAP 查询。OLAP 查询是基于“事实”和“维度”的模型。比如,你可以查询“某个国家和产品的总销售额,按月份列出”。
这是否意味着我需要更新我的数据库结构,并创建所谓的事实表?
OLAP 查询是围绕事实和维度的概念构建的。
OLAP 数据仓库的策略通常涉及创建这些事实表和维度表,形成所谓的 星型模式 或雪花模式。这些模式能让 OLAP 类型的查询在关系数据库中表现得更好。数据通常通过一种叫做 ETL 的过程加载(这可以是一个简单的脚本),将数据以合适的形式加载进来。
不过,Python Cubes 框架并不强制你更改数据库结构或创建一个新的结构。它有一个 SQL 后端,可以让你定义你的模型(以事实和维度的形式),而不需要改变实际的数据库模型。关于模型定义的文档在这里:https://pythonhosted.org/cubes/model.html。
然而,在某些情况下,你可能还是希望为数据挖掘定义一个结构,并使用转换过程定期加载数据。这取决于你的需求、数据量、性能考虑等因素……
使用 Cubes,你还可以使用其他非关系型数据库(比如 MongoDB),其中一些提供了内置的聚合能力,OLAP 服务器像 Cubes 可以利用这些能力。
这可以和我的 NodeJS 应用一起使用吗?
你可以从 NodeJS 向你的 Cubes Slicer 服务器发送查询。
有没有例子?
有一个 Javascript 客户端库可以用来查询 Cubes。你可能想使用这个:https://github.com/Stiivi/cubes.js/
我不知道有没有使用 NodeJS 的例子。你可以从 Cubes 中包含的 AngularJS 应用中获取一些灵感(https://github.com/Stiivi/cubes/tree/master/incubator)。另一个客户端工具是 CubesViewer,可能在你构建模型时会对你有帮助:http://jjmontesl.github.io/cubesviewer/。
因为我只创建过单服务器应用。Python 会和 NodeJS 运行在同一个服务器上吗?它会怎么启动?('forever app.js' 是我的默认脚本)
你会将 Cubes Slicer 服务器作为一个网络应用运行(直接从你的网络服务器,比如 Apache)。例如,使用 Apache 时,你可以使用 apache-wsgi 模块来服务 Python 应用。
Slicer 也可以作为一个小型网络服务器在独立进程中运行,这在开发时非常方便(但我不推荐在生产环境中使用)。在这种情况下,它会监听一个不同的端口(通常是 http://localhost:5000
)。
如果我不能使用 Python,因为我没有经验,使用 NodeJS 的基本步骤是什么?
你其实根本不需要使用 Python。你可以配置并使用 Python Cubes 作为 OLAP 服务器,并从 Javascript 代码(也就是直接从浏览器)发送查询。从客户端的角度来看,这就像一个数据库系统,你可以通过 HTTP 查询并以 JSON 格式获取响应。