Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将实时数据存储到数据库?_Node.js_Postgresql_Websocket_Buffer - Fatal编程技术网

Node.js 如何将实时数据存储到数据库?

Node.js 如何将实时数据存储到数据库?,node.js,postgresql,websocket,buffer,Node.js,Postgresql,Websocket,Buffer,我有一个服务器,它正在观察物联网数据,我需要将其存储到数据库中,以便我可以构建某种度量 正在通过websocket连接接收数据,一段数据可能如下所示: { id: 23, type: "light" status: "on" timestamp: 1607975079 } 可以观察到大量数据,我认为实时将每个事件添加到数据库中可能不是一个好主意,因为它可能会导致瓶颈 在这种情况下,是否有策略可以使用某种内存缓冲区,然后每隔30分钟将一块数

我有一个服务器,它正在观察物联网数据,我需要将其存储到数据库中,以便我可以构建某种度量

正在通过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 = [];
  }
});
或者您可以使用:


您可以创建一个缓冲区并在那里添加事件。当累积一定数量的事件时,将缓冲区上载到数据库

伪代码:

const buffer = [];

event.on('event', data => {
  buffer.push(event);

  if (buffer.length === 10) {
    DataBase
      .bulkCreate(buffer);

    buffer = [];
  }
});
或者您可以使用:


您可以使用Redis作为缓冲区,并创建一个单独的工作程序,将数据从缓冲区批量保存到数据库中

Docker投票应用程序中显示了该想法:


您可以在node.js中构建所有组件,考虑到上面示例中的语言混合是为了显示Dockers的功能。

您可以使用Redis作为缓冲区,并创建一个单独的工作程序,将数据从缓冲区批量保存到数据库中

Docker投票应用程序中显示了该想法:

您可以在node.js中构建所有组件,考虑到上面示例中的语言混合是为了展示Dockers的功能