百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

优秀的用于构建分析 web 应用程序的开源框架——Cube.js

bigegpt 2024-08-10 12:17 12 浏览

介绍

Cube.js是一个用于构建分析Web应用程序的开源模块化框架。它主要用于构建内部商务智能工具(也就是商业智能BI)或将面向客户的分析添加到现有应用程序中。Cube.js旨在与AWS Athena和Google BigQuery等无服务器查询引擎一起使用。多阶段查询方法使其适合处理数万亿个数据点。大多数现代RDBMS都可以与Cube.js一起使用,并且可以进行调整以获得足够的性能。



官方网站

https://cube.dev/

https://github.com/cube-js/cube.js

下面是其在Github上的Star走势(近期势头正猛):


Cube.js特点

与其他应用程序不同,它不是一个整体应用程序,而是一组模块,可以很好地完成一件事情。Cube.js提供了用于在数据仓库中运行转换和建模,查询和缓存,管理API网关以及在其之上构建UI的模块。

  • Cube.js后端

1、Cube.js模式:它充当分析的ORM,并允许对从简单计数到队列保留和渠道分析的所有模型进行建模。

2、Cube.js查询编排和缓存。它通过将查询分解为小块,快速,可重用和具体化的部分来优化查询执行。

3、Cube.js API网关。它提供幂等的长轮询API,该API保证分析查询结果的传递不受请求时间的限制,并且可以承受连接问题。

  • Cube.js前端

Cube.js Javascript客户端。一组用于访问Cube.js API网关并与查询结果集一起使用的方法。Cube.js React,Angular和Vue。Cube.js API的特定于框架的包。



为什么选择Cube.js?

如果你要构建自己的商务智能BI或面向客户的分析,则很可能会遇到以下问题

性能:现代分析软件开发中的大部分工作时间都花在提供足够的洞察力上。在每个公司数据都是大数据的世界中,仅编写SQL查询来获取洞察力已经不够了。

SQL代码组织:早期使用纯SQL查询对具有十二个维度的十二个指标进行建模成为维护的噩梦,最终导致构建建模框架。

基础设施:每个生产就绪的分析解决方案都需要关键组件:分析SQL生成,查询结果缓存和执行流程,数据预聚合,安全性,用于获取查询结果的API和可视化。

Cube.js为每个严重依赖其缓存和预聚合层的分析应用程序提供必要的基础架构,以提供几分钟的原始数据来提供洞察延迟和数万亿数据点规模的亚秒级API响应时间。



快速入门

  • 1. 可以使用npm或者yarn安装
$ npm install -g cubejs-cli
# or
$ yarn global add cubejs-cli
  • 2、连接到您的数据库运行以下命令以开始使用Cube.js
$ cubejs创建<项目名称> -d <数据库类型>

使用-d标志指定项目名称和数据库。可用选项:

以下都是受支持的

  • postgres
  • mysql
  • mssql
  • athena
  • mongobi
  • bigquery
  • redshift
  • clickhouse
  • hive
  • snowflake
  • prestodb
  • oracle

例如你可以这样

cubejs create hello-world -d postgres

运行后,create命令将创建一个新项目目录,其中包含新Cube.js项目的脚手架。这包括启动Cube.js后端所需的所有文件,用于在React应用程序中显示Cube.js查询结果的示例前端代码,以及一些示例模型文件以突出显示Cube.js数据模式层的格式。此项目目录中的.env文件包含有关数据库凭据的占位符。对于MySQL和PostgreSQL,需要填写目标主机,数据库名称,用户和密码。对于Athena,您需要指定AWS访问和密钥以及运行Athena查询所需的访问权限,以及存储查询结果的目标AWS区域和S3输出位置。

  • 3、定义数据架构

Cube.js使用数据架构来生成和执行SQL。它充当数据库的ORM,并且具有足够的灵活性来建模,从简单计数到队列保留和渠道分析的所有内容。您、可以使用开发人员Playground生成架构文件。为此,请从项目目录启动开发服务器:

npm run dev

或者手动创建数据结构文件

// schema/users.js
cube(`Users`, {
 measures: {
 type: `count`
 },
 dimensions: {
 age: {
 type: `number`,
 sql: `age`
 },
 createdAt: {
 type: `time`,
 sql: `createdAt`
 },
 country: {
 type: `string`,
 sql: `country`
 }
 }
});

  • 可视化数据

Cube.js客户端连接到Cube.js后端,并允许你可视化数据。下面说明如何使用Cube.js Javascript客户端。(首先启动服务)

npm i --save @cubejs-client/core

React:

$ npm i --save @cubejs-client/core
$ npm i --save @cubejs-client/react

原生的方式:

import cubejs from '@cubejs-client/core';
import Chart from 'chart.js';
import chartjsConfig from './toChartjsData';
const cubejsApi = cubejs('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpIjozODU5NH0.5wEbQo-VG2DEjR2nBpRpoJeIcE_oJqnrm78yUo9lasw');
const resultSet = await cubejsApi.load({
 measures: ['Stories.count'],
 timeDimensions: [{
 dimension: 'Stories.time',
 dateRange: ['2015-01-01', '2015-12-31'],
 granularity: 'month'
 }]
})
const context = document.getElementById('myChart');
new Chart(context, chartjsConfig(resultSet));

React方式:

导入cubejs和QueryRenderer组件,并使用它们来获取数据。

import React from 'react';
import { LineChart, Line, XAxis, YAxis } from 'recharts';
import cubejs from '@cubejs-client/core';
import { QueryRenderer } from '@cubejs-client/react';
const cubejsApi = cubejs('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpIjozODU5NH0.5wEbQo-VG2DEjR2nBpRpoJeIcE_oJqnrm78yUo9lasw');
export default () => {
 return (
 <QueryRenderer
 query={{
 measures: ['Stories.count'],
 dimensions: ['Stories.time.month']
 }}
 cubejsApi={cubejsApi}
 render={({ resultSet }) => {
 if (!resultSet) {
 return 'Loading...';
 }
 return (
 <LineChart data={resultSet.rawData()}>
 <XAxis dataKey="Stories.time"/>
 <YAxis/>
 <Line type="monotone" dataKey="Stories.count" stroke="#8884d8"/>
 </LineChart>
 );
 }}
 />
 )
}

案例截图分享

下面展示一些示例:

总结

Cube.js确实是一个非常值得使用的Web应用的智能BI模块,用它可以快速而简单的构建出符合自己需求的商业智能分析Web应用程序,比传统普通繁琐的开发方式更加便捷,更加模块化,更加容易维护!

相关推荐

C#.NET Autofac 详解(c# autoit)

简介Autofac是一个成熟的、功能丰富的.NET依赖注入(DI)容器。相比于内置容器,它额外提供:模块化注册、装饰器(Decorator)、拦截器(Interceptor)、强o的属性/方法注...

webapi 全流程(webapi怎么部署)

C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...

.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式

一:背景1.讲故事上一篇我们讲到了注解特性,harmony在内部提供了20个HarmonyPatch重载方法尽可能的让大家满足业务开发,那时候我也说了,特性虽然简单粗暴,但只能解决95%...

C# 使用SemanticKernel调用本地大模型deepseek

一、先使用ollama部署好deepseek大模型。具体部署请看前面的头条使用ollama进行本地化部署deepseek大模型二、创建一个空的控制台dotnetnewconsole//添加依赖...

C#.NET 中间件详解(.net core中间件use和run)

简介中间件(Middleware)是ASP.NETCore的核心组件,用于处理HTTP请求和响应的管道机制。它是基于管道模型的轻量级、模块化设计,允许开发者在请求处理过程中插入自定义逻辑。...

IoC 自动注入:让依赖注册不再重复劳动

在ASP.NETCore中,IoC(控制反转)功能通过依赖注入(DI)实现。ASP.NETCore有一个内置的依赖注入容器,可以自动完成依赖注入。我们可以结合反射、特性或程序集扫描来实现自动...

C#.NET 依赖注入详解(c#依赖注入的三种方式)

简介在C#.NET中,依赖注入(DependencyInjection,简称DI)是一种设计模式,用于实现控制反转(InversionofControl,IoC),以降低代码耦合、提高可...

C#从零开始实现一个特性的自动注入功能

在现代软件开发中,依赖注入(DependencyInjection,DI)是实现松耦合、模块化和可测试代码的一个重要实践。C#提供了优秀的DI容器,如ASP.NETCore中自带的Micr...

C#.NET 仓储模式详解(c#仓库货物管理系统)

简介仓储模式(RepositoryPattern)是一种数据访问抽象模式,它在领域模型和数据访问层之间创建了一个隔离层,使得领域模型无需直接与数据访问逻辑交互。仓储模式的核心思想是将数据访问逻辑封装...

C#.NET 泛型详解(c# 泛型 滥用)

简介泛型(Generics)是指在类型或方法定义时使用类型参数,以实现类型安全、可重用和高性能的数据结构与算法为什么需要泛型类型安全防止“装箱/拆箱”带来的性能损耗,并在编译时检测类型错误。可重用同一...

数据分析-相关性分析(相关性 分析)

相关性分析是一种统计方法,用于衡量两个或多个变量之间的关系强度和方向。它通过计算相关系数来量化变量间的线性关系,从而帮助理解变量之间的相互影响。相关性分析常用于数据探索和假设检验,是数据分析和统计建模...

geom_smooth()函数-R语言ggplot2快速入门18

在每节,先运行以下这几行程序。library(ggplot2)library(ggpubr)library(ggtext)#用于个性化图表library(dplyr)#用于数据处理p...

规范申报易错要素解析(规范申报易错要素解析)

为什么要规范申报?规范申报是以满足海关监管、征税、统计等工作为目的,纳税义务人及其代理人依法向海关如实申报的行为,也是海关审接单环节依法监管的重要工作。企业申报的内容须符合《中华人民共和国海关进出口货...

「Eurora」海关编码归类 全球海关编码查询 关务服务

  海关编码是什么?  海关编码即HS编码,为编码协调制度的简称。  其全称为《商品名称及编码协调制度的国际公约》(InternationalConventionforHarmonizedCo...

9月1日起,河南省税务部门对豆制品加工业试行新政7类豆制品均适用投入产出法

全媒体记者杨晓川报道9月2日,记者从税务部门获悉,为减轻纳税人税收负担,完善农产品增值税进项税额抵扣机制,根据相关规定,结合我省实际情况,经广泛调查研究和征求意见,从9月1日起,我省税务部门对豆制品...