Skip to main content

在 Node.js 应用程序中使用 RisingWave

由于 RisingWave 与 PostgreSQL 兼容,您可以使用第三方 PostgreSQL 驱动程序从 Node.js 应用程序与 RisingWave 交互。

在本指南中,我们使用 Node.js pg 驱动程序连接到 RisingWave。

运行 RisingWave

要了解如何运行 RisingWave,请参阅运行 RisingWave

安装 npm

npm install pg

连接到 RisingWave

note

可以使用客户端或连接池来连接到 RisingWave。如果正在开发的网络应用程序需要频繁查询,建议使用连接池。此 topic 中的代码示例使用了连接池。

连接到 RisingWave 和运行查询通常是同时进行的。因此,代码中有一个基本查询。可将其替换为您要运行的查询。

const { Pool } = require('pg')

const credentials = {
user: 'root',
host: '127.0.0.1',
database: 'dev',
password: 'secret',
port: 4566,
}

const start = async () => {
const pool = new Pool(credentials);
const res = await pool.query("SELECT 1+2"); /*基本查询,确保连接成功。
将其替换为您自己的查询。 */
console.log(res); //打印结果。
await pool.end();
}

start().catch(console.error);

创建 source

下面的代码可创建一个带有 datagen 连接器的 source walkdatagen 连接器可用于生成模拟数据。walk source 由 distanceduration 两列组成,分别表示步行的距离和持续时间。该 source 是智能手表所跟踪数据的简化版本。

const { Pool } = require('pg')

const credentials = {
user: 'root',
host: '127.0.0.1',
database: 'dev',
password: 'secret',
port: 4566,
}

const createsource = `CREATE TABLE walk(distance INT, duration INT)
WITH ( connector = 'datagen',
fields.distance.kind = 'sequence',
fields.distance.start = '1',
fields.distance.end = '60',
fields.duration.kind = 'sequence',
fields.duration.start = '1',
fields.duration.end = '30',
datagen.rows.per.second='15',
datagen.split.num = '1'
) FORMAT PLAIN ENCODE JSON`;

const start = async () => {
const pool = new Pool(credentials);
const res = await pool.query(createsource);
console.log(res);
await pool.end();
}
start().catch(console.error);
note

本指南中的所有代码示例都包含连接到 RisingWave 章节的内容。如果在一个连接会话中运行多个查询,则无需重复连接代码。

创建物化视图

本节的代码可创建一个物化视图 counter,获取最新的总距离和持续时间。

const { Pool } = require('pg')

const credentials = {
user: 'root',
host: '127.0.0.1',
database: 'dev',
password: 'secret',
port: 4566,
}

const createmv = `CREATE MATERIALIZED VIEW counter
AS SELECT
SUM(distance) as total_distance,
SUM(duration) as total_duration
FROM walk`;

const start = async () => {
const pool = new Pool(credentials);
const res = await pool.query(createmv);
console.log(res);
await pool.end();
}
start().catch(console.error);

查询物化视图

本节的代码可查询物化视图 counter,获取实时数据。

const { Pool } = require('pg');

const credentials = {
user: 'root',
host: '127.0.0.1',
database: 'dev',
password: 'secret',
port: 4566,
}

const start = async () => {
const pool = new Pool(credentials);
const res = await pool.query("SELECT * from counter;");
console.log(res.rows); // 只打印出实际数据。
await pool.end();
}
start().catch(console.error);