[Day 26] - 『转职工作的Lessons learned』 - Cube.js(II)

今天讲一下Cube.js在後端是如何设定与资料库连线,以及如何在後端启动Cube.js Server。Cube.js支援多样的资料库连线,比方说Postgres, Oracle, MS SQL, MongoDB, ect. 我们公司使用的Db是Postgres,接下来会用它作为范例。

设置

需要将以下内容添加到.env文件中,以连结Postgres资料库:

CUBEJS_DB_TYPE=postgres                   //DB类型
CUBEJS_DB_HOST=my.postgres.host           //数据库的主机 URL
CUBEJS_DB_NAME=my_postgres_database       //要连接的数据库的名称
CUBEJS_DB_USER=postgres_user              //用於连接数据库的用户名
CUBEJS_DB_PASS=**********                 //用於连接数据库的密码
CUBEJS_DB_SS=true                         //是否启用 SSL 加密

有一个很便利的功能是,Cube.j预计新增可以连线多个资料库的多租户(Multitenancy)功能(官方宣告预计在10月27日上午 9-10:30举行研讨会),只要连线设定好,就可以同时取用多个资料库内的资料!可以用以下方式设定,虽然我们没有有使用到这个功能,但还是想稍微介绍一下,可以这麽使用:

const PostgresDriver = require('@cubejs-backend/postgres-driver');
const AthenaDriver = require('@cubejs-backend/athena-driver');
const BigQueryDriver = require('@cubejs-backend/bigquery-driver');

module.exports = {
  dbType: ({ dataSource } = {}) => {
    if (dataSource === 'web') {
      return 'athena';
    } else if (dataSource === 'googleAnalytics') {
      return 'bigquery';
    } else {
      return 'postgres';
    }
  },
  driverFactory: ({ dataSource } = {}) => {
    if (dataSource === 'web') {
      return new AthenaDriver();
    } else if (dataSource === 'googleAnalytics') {
      return new BigQueryDriver();
    } else if (dataSource === 'financials') {
      return new PostgresDriver({
        database: 'financials',
        host: 'financials-db.acme.com',
        user: process.env.FINANCIALS_DB_USER,
        password: process.env.FINANCIALS_DB_PASS,
      });
    } else {
      return new PostgresDriver();
    }
  },
};

接下来可在後端开启一个index.js的档案

const CubejsServer = require('@cubejs-backend/server');

const server = new CubejsServer();

server.listen().then(({ version, port }) => {
  console.log(`? Cube.js server (${version}) is listening on ${port}`);
});

当建立CubejsSverver()函数里面可以传入Cofig(设置),在Config里面可以设置很多配置,可以透过以下方式:

const options = {
    logger: (msg, params) => {
    ...
  },
  checkAuth: async (req, auth) => {
    ...
  },
  ...
}

const server = new Cube.jsServer(options)

可以参考这里的详细介绍

有一个比较需要注意的是,Cube.js可搭配Redis使用,但有可能会因为connection pool造成Timeout Error的问题,可以参考这篇


<<:  Day25 实作MiddleWare(2)

>>:  EP28 - 使用 Container Insights 监控 EKS 上的容器,并整合 Grafana 作为仪表板

[番外篇]Go Generate & Makefile(Day25)

文章同步更新於https://kevinyay945.com/smart-home-tutorial...

用 Python 畅玩 Line bot - 15:Flex Message(二)

在 bubble 中,每一个区段都可以新增一个 box,可以想像成 html 中的 div,而 bo...

Chapter2 - 用物件看真实世界(II)仍然对物件感到疑惑吗?用你最爱点的豚骨拉面做比喻

本文是第二篇,有些变数的名词会沿用第一篇,建议看过再继续阅读唷! 谈论更深入一层前,先让我们复习一...

《赖田捕手:番外篇》第 36 天:用 Netlify 布署前端网页 (一)

《赖田捕手:番外篇》第 36 天:用 Netlify 布署前端网页 (一) 那麽,你说你要一个完全免...

SSH 进 GCP的3种方式

毕竟是云端服务,不像自己的电脑打开就能进行开发。 把服务部署到云端上,需要先透过SSH连线到服务器。...