在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](https://cdn.silicloud.com/blog-img/blog/img/657d035e37434c4406bd3631/5-0.png)
好多东西啊。
因为其中混有与数据库无关的内容,所以将其排除在确认范围之外。(RBE、LedBorg、MODBUS)
![151218-0005.png](https://cdn.silicloud.com/blog-img/blog/img/657d035e37434c4406bd3631/8-0.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](https://cdn.silicloud.com/blog-img/blog/img/657d035e37434c4406bd3631/16-0.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节点的认证方法。
mongodb1○○
mongodb2○○
Influxdb×○
LevelDB×○
LevelDB-TTL×○
DynamoDB×○
MySQL×○
SQLite×○
PostgreSQL×○
DB2○×OSS版利用不可dashDB○×OSS版利用不可
DB2和dashDB没有手动进行身份验证的设置选项,似乎需要在Bluemix端预先绑定服务。
因此,虽然可以在OSS版本中添加数据库节点,但无法使用DB2或dashDB。
(如果有人知道任何解决方案,请指教。)
查询发行方法的差异
-
- 选择查询类型【Cloudant、mongodb1、mongodb2、LevelDB】
-
- 预先确定可用查询的节点规范类型。*Cloudant、mongodb2也可以接收msg输入
-
- 即使不了解查询的写法也可以使用,适合初学者。
- LevelDB在连接输入端时执行“get”操作,在连接输出端时执行“save”操作。
![151218-0011.png](https://cdn.silicloud.com/blog-img/blog/img/657d035e37434c4406bd3631/25-0.png)
2. (DB2、dashDB)的查询描述类型(从节点内部输入)
在节点的编辑界面中有一个用于查询的输入表单,可以直接在节点本身上编写查询。
通过查看节点可以确认正在发布的查询内容,具有可读性的优点。
如果将输入表单保留为空白,也可以将msg.payload作为查询语句输入。
![151218-0012.png](https://cdn.silicloud.com/blog-img/blog/img/657d035e37434c4406bd3631/27-0.png)
大多数的数据库节点可以通过在msg中编写查询语句并传递给数据库节点来执行处理。
然而,需要注意的是,由于查询语句的编写位置不同,所以需要小心。
![151218-0015.png](https://cdn.silicloud.com/blog-img/blog/img/657d035e37434c4406bd3631/29-0.png)
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中试试看。