Utilice Node-RED para construir una plataforma de código bajo DolphinDB

Prefacio

DolphinDB es una base de datos de series de tiempo distribuida de alto rendimiento desarrollada por Zhejiang Zhiyu Technology Co., Ltd. Integra un potente lenguaje de programación y un sistema de análisis de datos de transmisión de alta capacidad y alta velocidad para proporcionar un almacenamiento, recuperación y análisis rápidos de datos masivos. datos estructurados e informática para proporcionar soluciones integrales. La base de datos DolphinDB admite millones de escrituras de datos por segundo, respuestas a consultas de milisegundos para billones de datos y almacenamiento de datos con una alta relación de compresión. Es adecuada para el Internet de las cosas industrial y las finanzas cuantitativas y otros campos.

Para simplificar aún más el uso de DolphinDB, creamos una plataforma de código bajo DolphinDB en Node-RED. A través de herramientas de programación visual, abstraemos las funciones de DolphinDB en nodos fáciles de entender, lo que hace que el proceso de operación sea más claro. Este método de visualización no solo mejora la conveniencia para los usuarios de usar la plataforma, sino que también reduce en gran medida el umbral de aprendizaje del usuario. Incluso si los usuarios no comprenden el lenguaje de programación de DolphinDB, pueden completar fácilmente varias operaciones.

En nuestra plataforma de código bajo, los usuarios solo necesitan usar operaciones simples de arrastrar y soltar para lograr escritura no modal, limpieza de datos, reducción de resolución, monitoreo de equipos, monitoreo de excepciones y otras funciones, lo que hace que el procesamiento de datos sea más conveniente y eficiente.

El siguiente contenido presentará en detalle las características de la plataforma Node-RED, la situación de la plataforma de código bajo DolphinDB y el método de desarrollo de nodos DolphinDB.

Acerca del nodo-RED

Node-RED es una herramienta de programación visual de código abierto que facilita la conexión, organización y automatización de dispositivos IoT, API y servicios en línea. Permite a los usuarios crear aplicaciones simplemente arrastrando y conectando nodos, donde cada nodo representa una característica o servicio específico. Puedes considerarlo como un rompecabezas: arrastrando y conectando diferentes piezas, puedes crear varias aplicaciones.

A la gente, por ejemplo, le gustaría poder encender el aire acondicionado de camino a casa y disfrutar del frescor al llegar a casa. Este requisito se puede lograr fácilmente con la ayuda de Node-RED. Este proceso se puede lograr simplemente arrastrando el nodo WeChat, el nodo de procesamiento de mensajes y el nodo de control del aire acondicionado, y luego conectándolos y configurándolos. De esta forma, basta con enviar un mensaje en WeChat para controlar el interruptor del aire acondicionado de tu hogar.

Node-RED se basa en Node.js, por lo que es liviano y eficiente. Aprovecha al máximo el modelo sin bloqueo y controlado por eventos de Node.js y funciona bien en hardware de bajo costo en el borde de la red (como Raspberry Pi) y en la nube. Esto convierte a Node-RED en una herramienta muy útil para una variedad de escenarios.

La biblioteca de extensiones de nodos de Node-RED incluye muchos nodos integrados y funciones como acceso a bases de datos, servicios web y notificaciones por correo electrónico que simplifican enormemente el proceso de desarrollo. Proporciona potentes componentes funcionales que permiten a los usuarios crear rápidamente dispositivos de IoT, API y servicios en línea complejos sin escribir código engorroso.

Además, Node-RED utiliza el formato JSON para almacenar procesos, lo que hace que compartir, importar y exportar sea muy conveniente. Los usuarios pueden compartir fácilmente sus procesos con otros y obtener más soluciones e inspiración de la comunidad. Esta apertura y colaboración brindan a los usuarios más posibilidades y flexibilidad.

En general, Node-RED es una herramienta potente y fácil de usar que proporciona un entorno de programación visual que permite a los usuarios conectar, organizar y automatizar fácilmente dispositivos IoT, API y servicios en línea. Ya sea en el campo de IoT, automatización o procesamiento de flujo de datos, Node-RED es una herramienta muy práctica y popular, que brinda gran comodidad y eficiencia a los usuarios.

Plataforma de código bajo DolphinDB

Introducción a la plataforma

La plataforma de código bajo DolphinDB es una plataforma de visualización de funciones DolphinDB basada en Node-RED. Tiene una gran escalabilidad y brinda a los usuarios la posibilidad de desarrollar nodos de funciones personalizadas. Los usuarios pueden desarrollar nodos de funciones adecuados para sus propios escenarios comerciales de acuerdo con sus propias necesidades, mejorando así aún más la funcionalidad y adaptabilidad de la plataforma.

En el capítulo de introducción del caso, presentaremos el método de desarrollo de los nodos DolphinDB para ayudar a los usuarios a hacer un mejor uso de esta plataforma de bajo código y lograr necesidades más personalizadas.

El caso de la plataforma de código bajo DolphinDB proporcionado en este artículo proporciona más de diez nodos, divididos en tres categorías: operación de archivos, limpieza de datos y nodos de funciones DolphinDB. La categoría de operación de archivos proporciona nodos de carga de datos para facilitar a los usuarios cargar archivos locales en la tabla de memoria de DolphinDB. La categoría de limpieza de datos proporciona nodos de funciones como conversión de formato, llenado NULL, deduplicación de datos y normalización de datos para ayudar a los usuarios a implementar diversas operaciones de limpieza de datos. En la categoría de nodos de funciones de DolphinDB, se proporcionan nodos de funciones como almacenamiento de datos, reducción de resolución, escritura sin esquema, creación de tablas de flujo y motor de transmisión de datos, lo que permite a los usuarios utilizar fácilmente las funciones de DolphinDB sin dominar su lenguaje de programación.

Instrucciones de uso

La plataforma de código bajo DolphinDB está construida sobre Node-RED, por lo que primero debe instalar Node-RED. Para obtener el tutorial de instalación oficial de Node-RED, consulte: Introducción: Node- RED  . Después de completar la instalación de Node-RED, siga los pasos a continuación para instalar el nodo DolphinDB.

1. Descargue el nodo DolphinDB. Descargue el paquete de instalación del nodo DolphinDB en el archivo adjunto  node-red-contrib-dolphindb-main . Por ejemplo, en el siguiente ejemplo, descárguelo y extráigalo a  la carpeta D:\Node_Red_Project  . El contenido del archivo es el siguiente:

2. Instale el nodo DolphinDB en Node-RED. Ingrese  al directorio .node-red  (este directorio debe estar  en el directorio C:\Users<username>  ) y luego instálelo con npm  node-red-contrib-dolphindb-main. Las instrucciones específicas son las siguientes:


Entre ellos,  D:\Node_Red_Project\node-red-contrib-dolphindb-main  es la ruta de descarga del paquete de instalación del nodo DolphinDB.

cd C:\Users\<用户名>\.node-red
npm install D:\Node_Red_Project\node-red-contrib-dolphindb-main

Después de una instalación exitosa, aparecerá el siguiente contenido.

3. Utilice el nodo DolphinDB. Ingrese el comando en cmd  node-red para iniciar el servicio Node-RED. El siguiente contenido indica que el servicio Node-RED se inició correctamente.

4. Abra la página web  http://localhost:1880.  El nodo DolphinDB aparecerá en la paleta izquierda. Arrástrelo y úselo.

Plataforma de código bajo DolphinDB

Introducción del caso

Flujo de procesamiento de datos

En el caso de la plataforma de código bajo DolphinDB de este artículo, los usuarios pueden implementar fácilmente el proceso de limpieza de datos arrastrando y soltando. A continuación se presentará cómo cargar los datos en el archivo CSV, realizar la limpieza de datos y finalmente almacenar los datos limpios en la base de datos DolphinDB.

Primero, tenemos los siguientes datos en un archivo CSV:

identificación fecha precio cantidad tmp
1 2018.01.02 70.832104 1719 1.2
1 2018.01.03 12.22557 3.2
3 2018.01.04 8.695886 1656 0,4
4 2018.01.05 24.324535 2860 2
5 2018.01.06 0.443173 6874 3.8
6 2018.01.07 90.302176 3277 -1,8
7 2018.01.08 78.556843 3424 -0,6
8 2018.01.09 45.836447 8636 0,4
9 2018.01.10 57.416425 707 1.6
10 2018.01.11 98.879764 2267 4.2

El proceso operativo específico de limpieza de datos es el siguiente:

  1. Cargue datos del archivo CSV en una tabla en memoria de DolphinDB.
  2. Elimine los valores duplicados de la columna de identificación para garantizar que los datos de cada identificación sean únicos.
  3. Convierte el formato de la columna de precios y unifica los datos a dos decimales.
  4. El valor NULL de la columna cantidad se completa con el valor promedio para garantizar la integridad de los datos.
  5. Realice la normalización Max-Min en la columna tmp para escalar los datos al rango de 0 a 1.
  6. Almacene los datos limpios en la base de datos DolphinDB para su posterior análisis y aplicación.

El siguiente es el proceso de implementación de operaciones de procesamiento de datos de apelación en la plataforma de código bajo DolphinDB.

  • Arrastre los nodos de inyección, carga de archivos, conversión de formato, llenado nulo, deduplicación, normalización de datos y almacenamiento de datos al espacio de trabajo.
  • Conecte los nodos según el orden lógico de limpieza de datos.

  • Haga clic en el nodo para configurar los parámetros correspondientes al nodo.

  • Haga clic en el botón Implementar en la esquina superior derecha del espacio de trabajo   .
  • Haga clic en el nodo de marca de tiempo para iniciar el proceso. Los datos limpios se pueden ver en la base de datos DolphinDB.

Escritura sin modelo

La escritura sin esquemas es un método de escritura de bases de datos que es particularmente adecuado para la recopilación de datos por parte de dispositivos en escenarios de IoT. En las bases de datos relacionales tradicionales, la escritura de datos requiere que la estructura de la tabla de datos se defina de antemano, incluidos los nombres de los campos, los tipos de datos, las restricciones y otra información. Sin embargo, en el mundo real, muchos datos no son adecuados para estructuras de tablas estrictas, como varios tipos de datos de sensores recopilados en diferentes frecuencias.

La escritura sin esquemas resuelve este problema al permitir que los datos se escriban directamente en la base de datos sin definir la estructura de la tabla de antemano. Los datos se pueden almacenar de manera flexible en su formato original sin conversión ni procesamiento de datos adicionales, lo que simplifica enormemente el proceso de escritura de datos.

En la plataforma de código bajo DolphinDB, el proceso de implementación de escritura sin esquema se puede completar fácilmente a través de dos nodos. El siguiente es el proceso específico para lograr una escritura no modelo:

  • Arrastre el nodo Mqtt In y el nodo de escritura no modal al espacio de trabajo
  • Conectar dos nodos
  • Haga clic en el nodo para configurar los parámetros. Configure el servidor y el tema del mensaje en el nodo Mqtt In y establezca el nombre de la base de datos en el nodo de escritura sin esquema.

  • Haga clic en el botón implementar.

Después de eso, puede enviar mensajes a mqtt para lograr una escritura no modelo. En escritura no modelo, al enviar un mensaje a mqtt, el mensaje debe enviarse de acuerdo con ciertos requisitos de formato. Aquí, se envían varios mensajes similares al siguiente a mqtt.

{
  "tags":{
      "deviceCode": "361RP01",
      "logicalPositionId": "1",
      "physicalPositionId": "AI361RP01T"
  },
  "fields":{
      "propertyValue":1505
  },
  "time": "2023-07-22 15:53:08"
}

Si la operación es exitosa, aparecerá una base de datos llamada "Mqtt_DDB" en DolphinDB y la base de datos continuará recibiendo mensajes de "Mqtt".

Método de desarrollo del nodo DolphinDB

Los nodos DolphinDB se basan en Node-RED, por lo que desarrollar nodos DolphinDB requiere dominar los conocimientos básicos del desarrollo de nodos Node-RED. Consulte: Tutorial de desarrollo de nodos Node-RED .

El paquete de instalación de DolphinDB contiene los archivos principales  Dolphindb.html  y  DolphinDB.js . Entre ellos, Dolphindb.html  se usa principalmente para definir las propiedades, editar cuadros de diálogo y texto de ayuda de los nodos DolphinDB, mientras que Dolphindb.js se usa principalmente para definir las funciones de los nodos DolphinDB.

La parte del archivo html del nodo DolphinDB es similar al proceso de desarrollo del nodo Node-RED ordinario, por lo que no entraré en detalles aquí. Nos centramos en   el método de implementación de la función de nodo en DolphinDB.js , puede consultar: API de JavaScript  para desarrollo.

Conexión a DolphinDB en JavaScript

  • Importe DolphinDB en JavaScript, establezca la configuración de conexión y establezca una conexión con DolphinDB.
import { DDB } from 'dolphindb'

// 使用 WebSocket URL 初始化连接到 DolphinDB 的实例(不建立实际的网络连接)
let ddb = new DDB('ws://127.0.0.1:8848', {
    // 是否在建立连接后自动登录,默认 `true`
    autologin: true,
    
    // DolphinDB 登录用户名,默认 `'admin'`
    username: 'admin',
    
    // DolphinDB 登录密码,默认 `'123456'`
    password: '123456',
    
    // 设置 python session flag,默认 `false`
    python: false,
    
    // 设置该选项后,该数据库连接只用于流数据
    streaming: undefined
})

// 建立到 DolphinDB 的连接
await ddb.connect()
  • Cree un nodo de configuración y conéctese a DolphinDB
function DolphinConfigNode(n) {
        RED.nodes.createNode(this, n);
        this.url = n.url
        this.name = n.name
        this.client = new DDB(this.url, {
            autologin: true,
            username: this.credentials.username,
            password: this.credentials.password,
            python: false,
            streaming: undefined
        })
    }
    RED.nodes.registerType("dolphindb", DolphinConfigNode, {
        credentials: {
            username: { type: "text" },
            password: { type: "password" }
        }
    });
  • Construcción del nodo DolphinDB:

a.Constructor de nodos. Los nodos se definen mediante una función constructora, que se puede utilizar para crear nuevas instancias del nodo. A la función se le pasa un objeto que contiene las propiedades establecidas en el editor de secuencias. Lo primero que debe hacer es llamar a esta  RED.nodes.createNode función para inicializar las características compartidas por todos los nodos, y luego se puede ejecutar el código específico del nodo.

  //构造函数
  function DolphinDBNode(config) {
      RED.nodes.createNode(this,config);
      // 获取 DolphinDB 配置结点
      this.dolphindb = n.dolphindb;
      this.dolphindbConfig = RED.nodes.getNode(this.dolphindb);
      var client = this.dolphindbConfig.client;
      
      //功能语句
  }
  //注册节点
  RED.nodes.registerType("DolphinDB",DolphinDBNode);

B. Recibir mensajes. El nodo registra un oyente para esta entrada de evento para recibir mensajes de los nodos ascendentes en la secuencia. Una vez recibido el mensaje se ejecuta la función correspondiente.

this.on('input', function(msg, send, done) {
    //执行功能
});
  • declaración de función. En JavaScript, utilizamos eval()funciones para ejecutar scripts de DolphinDB. En términos generales, dividimos el script DolphinDB en dos partes: función funcy llamada a función funcall, luego los unimos y llamamos eval()a la función para ejecutar el script DolphinDB.
var func=`def foo(a,b){
               return a+b;
          }`
var funcall=`foo(11,11)`
var secipt=func+funcall
const result = await ddb.eval(script)

Caso

Finalmente, tomamos el nodo de normalización de datos como ejemplo para presentar el código de implementación de la función del nodo DolphinDB.

//构造函数
function DolphinDataNormalizationNode(n) {
        RED.nodes.createNode(this, n);

        // 获取 DolphinDB 配置结点
        this.dolphindb = n.dolphindb;
        this.dolphindbConfig = RED.nodes.getNode(this.dolphindb);
        if (!this.dolphindbConfig) { //检查是否成功获取了 DolphinDB 配置节点
            this.error(RED._("dolphindb.errors.missingconfig"));
            return;
        }
        var client = this.dolphindbConfig.client;
        
        //将当前节点的上下文保存在变量 node 中
        this.name=n.name;
        this.tableName=n.tableName;
        this.colName=n.colName;
        this.normalizeType=n.normalizeType;

        var node = this;
        
        //DolphinDB 脚本
        var func=`def minMaxNormalization(tableName,colName){
                      pt=objByName(tableName);
                      minNum=min(pt[colName]);
                      maxNum=max(pt[colName]);
                      pt[colName]=(pt[colName]-minNum)/(maxNum-minNum);
                  }
                  def ZSoreNormalization(tableName,colName){
                      pt=objByName(tableName);
                      meanNum=mean(pt[colName]);
                      stdNum=std(pt[colName]);
                      pt[colName]=(pt[colName]-meanNum)/stdNum;
                  }
                  def dataNormalization(tableName,colName,type){
                      if(type==1){
                          minMaxNormalization(tableName,colName);
                      }else if(type==2){
                          ZSoreNormalization(tableName,colName);
                      }
                  }`;
        var funcall =`dataNormalization("${this.tableName}",\`${this.colName},${this.normalizeType})`;
        var script =func+funcall;
        
        console.log(script) //打印生成的 DolphinDB 脚本,用于调试和查看。
        
        //注册监听器 input,一旦收到消息,则执行 DolphinDB 脚本
        node.on('input', async function (msg, send, done) {
            client.eval(script).then(res => {
                send(msg)
                done()
            }).catch(err => {
                console.log(err)
                done(err)
            })
        });
    }
    
//注册节点
RED.nodes.registerType("数据归一化", DolphinDataNormalizationNode);

Resumir

Este artículo presenta la plataforma Node-RED, que permite a los usuarios crear fácilmente varias aplicaciones simplemente arrastrando y conectando nodos sin escribir código engorroso.

La plataforma de código bajo DolphinDB está construida sobre Node-RED. Las funciones de DolphinDB se visualizan como nodos mediante programación visual, lo que aclara el proceso de operación. Entre ellos, los casos de limpieza de datos y escritura sin esquema demuestran la simplicidad y eficiencia de la plataforma de código bajo DolphinDB.

Más importante aún, la plataforma de código bajo DolphinDB es altamente escalable. Los usuarios pueden desarrollar nodos de funciones personalizados según sus propias necesidades para mejorar aún más la funcionalidad y adaptabilidad de la plataforma. Esta apertura brinda a los usuarios más posibilidades y flexibilidad, permitiéndoles implementar necesidades más personalizadas en la plataforma.

A través de la plataforma Node-RED y la plataforma de código bajo DolphinDB, los usuarios pueden construir fácilmente dispositivos IoT complejos, API y servicios en línea, implementar procesamiento y almacenamiento de datos y acelerar el proceso de innovación y transformación digital.

apéndice

Supongo que te gusta

Origin blog.csdn.net/qq_41996852/article/details/132623368
Recomendado
Clasificación