在 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 walk
。datagen
连接器可用于生成模拟数据。walk
source 由 distance
和 duration
两列组成,分别表示步行的距离和持续时间。该 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);