在Node-RED中可以处理的数据库节点的完整汇总(包括MySQL / PostgreSQL / MongoDB / DB2 / Cloudant / dashDB / LevelDB / InfluxDB / DynamoDB / RedShift / Aurora / MariaDB)

首先

Node-RED拥有许多不同类型的数据库节点,因此可以从数据库中检索数据或将数据处理结果保存到数据库中。然而,由于数据库节点的使用方法各不相同,在本文中我们将整理Node-RED中可用的数据库及其操作的区别。
*本文是基于2015年12月18日的Node-RED进行验证,由于每天都有更新,所以信息可能存在差异。

验证环境

・苹果电脑 MacBook Pro 使用的操作系统是 OS X El Capitan,版本为 10.11.2。
・Bluemix Node-RED Starter 是一个软件,可供使用者下载和使用。

(Note: The translation provided is in Simplified Chinese. The translation may vary slightly depending on the context and target audience.)

搜索可用的数据库节点截至2015年12月。

151218-0001.png

好多东西啊。

因为其中混有与数据库无关的内容,所以将其排除在确认范围之外。(RBE、LedBorg、MODBUS)

151218-0005.png

因此,我们将确认以下节点的规格。数量比我想象的多。
* Cloudant(最后更新日期:7个月前)
* mongodb1(最后更新日期:8天前)
* mongodb2(最后更新日期:11天前)
* Influxdb(最后更新日期:3周前)
* LevelDB(最后更新日期:7个月前)
* LevelDB-TTL(最后更新日期:2个月前)
* DynamoDB(最后更新日期:10个月前)
* MySQL(最后更新日期:1个月前)
* SQLite(最后更新日期:7个月前)
* PostgreSQL(最后更新日期:8个月前)
* DB2/dashDB(最后更新日期:1个月前)
* Oracledb(最后更新日期:1天前)
* ODBC(最后更新日期:10个月前)

※更新频率的差异也是一个重要因素。

安装所有可用的数据库节点。

将要导入的DB节点写入package.json,并根据OSS版使用npm install,根据Bluemix版使用cf push或git push。
→ OracleDB和ODBC在Mac X/Bluemix上都遇到了错误。
→ ODBC需要支持unixODBC的驱动程序。在Bluemix版中似乎无法使用。
→ OracleDB需要预先安装Oracle Instant Client。在Bluemix版中似乎也无法使用。
※本次不包括操作确认。

无论是OSS版还是Bluemix版,可运行的package.json如下所示。
我们使用的是2015年12/18的最新版本。请注意,未来每个节点的更新可能会导致规格变更。

{
    "dependencies": {
        "node-red-node-cf-cloudant":"0.2.14",
        "node-red-node-mongodb":"0.0.4",
        "node-red-contrib-mongodb2":"0.2.2",
        "node-red-contrib-influxdb":"0.0.4",
        "node-red-node-leveldb":"0.0.5",
        "node-red-contrib-leveldb-ttl":"0.0.3",
        "node-red-node-ddb":"0.1.0",
        "node-red-node-mysql":"0.0.7",
        "node-red-node-sqlite":"0.0.7",
        "node-red-contrib-postgres":"0.4.0",
        "node-red-nodes-cf-sqldb-dashdb":"0.2.11"
    },
    "engines": {
        "node": "0.10.x"
    }
}

试着将其放置于Node-RED上。

151218-0017.png

我相信你可以想象出在节点类型上有不同规格的情况。

DBノードの仕様はバラバラで、DBノードごとに使い方を把握する必要がある

Input専用
Input/Output兼用 (mongodb、LevelDB、MySQL、SQLite、PostgreSQL)
Output専用

データロード用のノードが存在せず、保存しかできないノードがある

DynamoDB
→DynamoDBのLibraryを見てみると開発途中であり、10か月以上更新がないことを確認できる。
→非常に不便であるためDynamoDBをNode-REDで利用するのは現時点ではお勧めしません。
(自身でノードをカスタムしてPull Requestしてくださるとありがたいですが…!)

各个数据库节点的认证方式有所不同。

可以通过在Bluemix上绑定Bluemix版DB服务来省略认证过程。
如果使用的是OSS版或Bluemix没有的DB,则需要手动输入认证信息。
我已经确认了每个DB节点的认证方法。

DB名Bluemix認証可否手動認証可否備考Cloudant○○
mongodb1○○
mongodb2○○
Influxdb×○
LevelDB×○
LevelDB-TTL×○
DynamoDB×○
MySQL×○
SQLite×○
PostgreSQL×○
DB2○×OSS版利用不可dashDB○×OSS版利用不可

DB2和dashDB没有手动进行身份验证的设置选项,似乎需要在Bluemix端预先绑定服务。
因此,虽然可以在OSS版本中添加数据库节点,但无法使用DB2或dashDB。
(如果有人知道任何解决方案,请指教。)

查询发行方法的差异

    1. 选择查询类型【Cloudant、mongodb1、mongodb2、LevelDB】

 

    1. 预先确定可用查询的节点规范类型。*Cloudant、mongodb2也可以接收msg输入

 

    1. 即使不了解查询的写法也可以使用,适合初学者。

 

    LevelDB在连接输入端时执行“get”操作,在连接输出端时执行“save”操作。
151218-0011.png

2. (DB2、dashDB)的查询描述类型(从节点内部输入)
在节点的编辑界面中有一个用于查询的输入表单,可以直接在节点本身上编写查询。
通过查看节点可以确认正在发布的查询内容,具有可读性的优点。
如果将输入表单保留为空白,也可以将msg.payload作为查询语句输入。

151218-0012.png

大多数的数据库节点可以通过在msg中编写查询语句并传递给数据库节点来执行处理。
然而,需要注意的是,由于查询语句的编写位置不同,所以需要小心。

151218-0015.png
DB名クエリ選択型クエリ記述型(ノード内)クエリ記述型(msg)msg記述先Cloudant○×○msg.payloadmongodb1○××
mongodb2◎×○msg.operationInfluxdb××○msg.queryLevelDB○××
LevelDB-TTL○××
DynamoDB××?
MySQL××○msg.topicSQLite××○msg.topicPostgreSQL××○msg.payloadDB2×○○msg.payloaddashDB×○○msg.payload

总结

这次我研究了可以在Node-RED中使用的数据库节点。
目前有一些节点仍在开发中,但也有一些节点的开发已经停止了。
不应仅因为节点在库中存在就轻易地使用它,有些情况下最好不要这样判断。

在这种情况下,我发现MongoDB2和MySQL非常易于使用。
MongoDB可以使用mongoLab、Compose-mongo等服务,
而MySQL也可以使用Amazon RDS、Aurora、MariaDB等服务,
这意味着根据需求,我们可以选择不同的DBaaS,这也是非常有吸引力的地方。

关于Amazon Redshift,尽管它兼容PosgreSQL,但由于其为列指向型数据库,因此需要在从Node-RED中输入数据的方法上进行一些调整。
未来,我也想验证一下关于DB节点利用方面的性能考虑。

LevelDB和InfluxDB这两个数据库平时很少被使用,但它们具有数据处理的轻量性和高速性,因此在处理大量的物联网流媒体通信时与Node-RED非常匹配。相较于其他数据库,它们似乎有更多优势,所以我想考虑将它们集成到Node-RED中试试看。