此快速启动指南将引导您完成安装和使用还原店JavaScript客户端SDK与ReductStore实例进行交互的过程。
安装SDK
要安装还原SDK,您需要在计算机上安装Node.js 16或更高版本。安装了node.js后,您可以使用npm
软件包管理器安装reduct-js
软件包:
npm install reduct-js
作为Docker容器运行还原设备
如果您尚未运行还原的实例,则可以轻松地将一个实例旋转为Docker容器。为此,运行以下命令:
docker run -p 8383:8383 reductstore/reductstore
这将在您本地计算机的端口8383上启动一个还原店实例。
使用SDK
现在,您已经安装了reduct-js
SDK并运行了还原店实例,您可以开始使用SDK与还原店实例进行交互。
这是使用JavaScript SDK在存储桶上执行一些不同操作的示例:
const {Client, QuotaType} = require("reduct-js");
const fs = require("fs");
const main = async () => {
// Create a client
const client = new Client("http://127.0.0.1:8383");
// Get or create a bucket with 1Gb quota
const bucket = await client.getOrCreateBucket("my-bucket",
{quotaType: QuotaType.FIFO, quotaSize: BigInt(1e9)}
);
// The simplest case. Write some data with the current timestamp
let record = await bucket.beginWrite("entry");
await record.write("Hello, world!");
// More complex case. Upload a file as a stream with a custom timestamp unix timestamp in microseconds
const timestamp = Date.now() * 1000;
record = await bucket.beginWrite("entry", timestamp);
const fileStream = await fs.createReadStream(__filename); // let's upload this file
await record.write(fileStream, fs.statSync(__filename).size);
// The simplest case. Read the data by a certain timestamp
record = await bucket.beginRead("entry", timestamp);
console.log(await record.readAsString());
// More complex case. Iterate over all records in the entry and read them as steams
function streamToString (stream) {
const chunks = [];
return new Promise((resolve, reject) => {
stream.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
stream.on("error", (err) => reject(err));
stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
});
}
for await (const record of bucket.query("entry")) {
console.log(`Record timestamp: ${record.timestamp}`);
console.log(`Record size: ${record.size}`);
// Read the record as a stream
await streamToString(record.stream);
}
};
main().catch(e => console.error(e));
让我们分解这个示例在做什么。
创建客户
要开始与数据库进行交互,我们需要创建一个客户端。您可以使用reduct
模块的Client
类。将要连接到的还原实例的URL传递给Client
构造函数:
// Create a client
const client = new Client("http://127.0.0.1:8383");
创建一个水桶
还原商店中的所有数据都存储在存储桶中。要获取一个存储桶,您可以在AClient
上使用getOrCreateBucket
方法。如果尚不存在,则该方法会创建一个存储桶。传递要与存储桶设置一起创建的存储桶的名称。在此示例中,我们正在创建一个具有1GB配额的存储桶。这意味着数据库将
一旦存储桶达到1GB,就开始删除旧数据:
// Get or create a bucket with 1Gb quota
const bucket = await client.getOrCreateBucket("my-bucket",
{quotaType: QuotaType.FIFO, quotaSize: BigInt(1e9)}
);
将数据写入水桶
要将数据写入存储桶,您可以在Bucket
实例上使用beginWrite
method。传递您
条目的名称
想写。 beginWrite
方法返回一个可以用来将数据写入存储桶的WritableRecord
对象。如果未指定该条目,则beginWrite
方法将使用当前时间作为时间戳:
// The simplest case. Write some data with the current timestamp
let record = await bucket.beginWrite("entry");
await record.write("Hello, world!");
WritableRecord.write
方法接受ReadbleStream
对象作为参数,因此您可以使用它来从文件或任何其他来源编写数据:
const timestamp = Date.now() * 1000;
record = await bucket.beginWrite("entry", timestamp);
const fileStream = await fs.createReadStream(__filename); // let's upload this file
await record.write(fileStream, fs.statSync(__filename).size);
请注意write
方法必须提前了解书面数据的大小。
从水桶读取数据
要从存储桶中读取数据,您可以在Bucket
实例上使用beginRead
方法。传递您要阅读的条目的名称和时间戳。 beginRead
方法返回一个ReadableRecord
对象,其中包含有关记录和方法read
的信息来读取内容:
// The simplest case. Read the data by a certain timestamp
record = await bucket.beginRead("entry", timestamp);
console.log(await record.readAsString());
要在存储桶中的所有条目上迭代,您可以在Bucket
实例上使用query
方法:
// More complex case. Iterate over all records in the entry and read them as steams
function streamToString (stream) {
const chunks = [];
return new Promise((resolve, reject) => {
stream.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
stream.on("error", (err) => reject(err));
stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
});
}
for await (const record of bucket.query("entry")) {
console.log(`Record timestamp: ${record.timestamp}`);
console.log(`Record size: ${record.size}`);
// Read the record as a stream
await streamToString(record.stream);
}
在此示例中,我们迭代了存储桶中的所有条目,并将其读为流。但是,您可以使用start
和stop
参数以指定要检索的记录的时间间隔。 start
参数指定时间间隔的开始,而stop
参数指定时间间隔的结束。这两个论点都是Unix微秒中的时间戳:
const startTs = 1609459200000000 // January 1, 2021 at 00:00:00
const stopTs = 1609827200000000 // January 31, 2021 at 23:59:59
for await (const record of bucket.query("entry", startTs, stopTs)) {
console.log(`Record timestamp: ${record.timestamp}`);
console.log(`Record size: ${record.size}`);
console.log(`Record content: ${await record.read()}`);
//...
}
下一步
既然您对还原商店的工作原理有了基本的了解,则可以在项目中开始使用它。你可以找到
有关还原店JavaScript SDK here的更多信息。