如何将实时数据存储到数据库?
How to store real time data to a database?
我有一台观察物联网数据的服务器,我需要将其存储到数据库中,以便我可以构建某种指标。
正在通过 websocket 连接接收数据,一条数据可能如下所示:
{
id: 23,
type: "light"
status: "on"
timestamp: 1607975079
}
可能会观察到大量数据,我认为将每个事件实时添加到数据库可能不是一个好主意,因为它可能会导致瓶颈。
是否有针对此类场景的策略,我可以使用某种内存缓冲区,然后每 30 分钟将一大块数据保存到数据库中?
这是一个明智的方法还是应该有其他方法来处理这个问题?
如有任何建议,我们将不胜感激。
谢谢
您可以创建缓冲区并在其中添加事件。当事件累积到一定数量时上传缓冲区到数据库。
伪代码:
const buffer = [];
event.on('event', data => {
buffer.push(event);
if (buffer.length === 10) {
DataBase
.bulkCreate(buffer);
buffer = [];
}
});
或者您可以使用 Cron:
const buffer = [];
event.on('event', data => {
buffer.push(event);
};
const job = () => {
DataBase
.bulkCreate(buffer);
buffer = [];
};
cron.schedule('*/30 * * * *', () => {
job();
}).start();
您可以使用Redis作为缓冲区,并创建一个单独的worker来将缓冲区中的数据批量保存到您的数据库中。
这个想法显示在 Docker 投票应用程序中:
https://github.com/dockersamples/example-voting-app
您可以构建 node.js 中的所有组件,考虑到上面示例中的语言组合是为了显示 Docker 的能力。
我有一台观察物联网数据的服务器,我需要将其存储到数据库中,以便我可以构建某种指标。
正在通过 websocket 连接接收数据,一条数据可能如下所示:
{
id: 23,
type: "light"
status: "on"
timestamp: 1607975079
}
可能会观察到大量数据,我认为将每个事件实时添加到数据库可能不是一个好主意,因为它可能会导致瓶颈。
是否有针对此类场景的策略,我可以使用某种内存缓冲区,然后每 30 分钟将一大块数据保存到数据库中?
这是一个明智的方法还是应该有其他方法来处理这个问题?
如有任何建议,我们将不胜感激。
谢谢
您可以创建缓冲区并在其中添加事件。当事件累积到一定数量时上传缓冲区到数据库。
伪代码:
const buffer = [];
event.on('event', data => {
buffer.push(event);
if (buffer.length === 10) {
DataBase
.bulkCreate(buffer);
buffer = [];
}
});
或者您可以使用 Cron:
const buffer = [];
event.on('event', data => {
buffer.push(event);
};
const job = () => {
DataBase
.bulkCreate(buffer);
buffer = [];
};
cron.schedule('*/30 * * * *', () => {
job();
}).start();
您可以使用Redis作为缓冲区,并创建一个单独的worker来将缓冲区中的数据批量保存到您的数据库中。
这个想法显示在 Docker 投票应用程序中: https://github.com/dockersamples/example-voting-app
您可以构建 node.js 中的所有组件,考虑到上面示例中的语言组合是为了显示 Docker 的能力。