前言
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/130673631
fly-iot飞凡物联专栏:
https://blog.csdn.net/freewebsys/category_12219758.html
未经博主允许不得转载。
博主CSDN地址是:https://blog.csdn.net/freewebsys
博主掘金地址是:https://juejin.cn/user/585379920479288
博主知乎地址是:https://www.zhihu.com/people/freewebsystem
0,关于actorcloud项目
关于actorcloud项目,重新整理开源项目代码
原始项目: https://github.com/actorcloud/ActorCloud
项目都是采用 apache协议开源的。
之前的项目也是apache 协议开源的。
ActorCloud 是一个面向低功耗IoT网络,为企业提供一站式平台服务的物联网平台。ActorCloud 在安全可靠的基础上,为设备提供多种协议接入的通信能力,设备数据与消息流管理功能。
平台提供基础设备管理功能以连接、管理海量设备,实现设备的消息通信与数据采集持久化;集成规则引擎与数据可视化管理,灵活开放多种权限级别的管理、控制 API,通过 API 可快速开发上层应用,实现多端接入、设备远程控制。
IoT Hub:为终端上云建立可靠双向连接通道,进行认证鉴权、协议解析与消息路由;
设备管理:终端注册开通与生命周期管理,提供状态、故障、流量的不间断监控;
数据引擎:对获取的终端消息高速持久化、实时解析、规则事务处理与可视化展示;
应用使能:提供终端SDK、APP SDK,开放丰富的 REST API 接口,集成消息推送接口。
关于IOT项目地址:
项目地址:
前端项目地址:
https://gitee.com/fly-iot/fly-iot-frontend
后端项目地址:
https://gitee.com/fly-iot/fly-iot-backend-python
docker-compose 项目地址:
https://gitee.com/fly-iot/docker-compose
1,关于Postgres 数据库
数据库的性能确实非常好,但是感觉上没有太流行起来。
同时在云端的数据库有 TIDB可以支持 Mysql的驱动。扩展起来也很方便。
主要是Mysql用的人实在太多了。
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES, 版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。
PostgreSQL是最初的伯克利代码的开源继承者。它支持大部分 SQL 标准并且提供了许多现代特性:
复杂查询
外键
触发器
可更新视图
事务完整性
多版本并发控制
同样,PostgreSQL可以用许多方法扩展,比如, 通过增加新的:
数据类型
函数
操作符
聚集函数
索引方法
过程语言
并且,因为自由宽松的许可证,任何人都可以以任何目的免费使用、修改和分发PostgreSQL, 不管是私用、商用还是学术研究目的。
http://www.postgres.cn/docs/14/intro-whatis.html
2,迁移方法
其实SQL 是标准的,但是每个数据库厂商实现的方式不太一样。
Postgres 有和 oracle 类似的通过 secquence 生成主键Id。
和一些特殊的字段吧。直接进行字符串替换就性了。
首先是 Postgres 数据库文件导出:
-- 只是将数据表结构和索引导出:
pg_dump -U actorcloud -l actorcloud > all.sql
去掉without time zone,
引号问题
去掉 character varying() 替换成 varchar()
timestamp , 修改成: timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
去掉 ::smallint,
修改 jsonb, 成 json,
然后类似将SQL 修改成:
Postgres SQL
CREATE TABLE public.actions (
id integer NOT NULL,
"createAt" timestamp without time zone,
"updateAt" timestamp without time zone,
"actionName" character varying(50),
"actionType" smallint,
description character varying(300),
config jsonb,
"userIntID" integer,
"tenantID" character varying
);
修改成 MySQL :
CREATE TABLE actions (
`id` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`createAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updateAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`actionName` varchar(50),
`actionType` smallint,
description varchar(300),
config json,
`userIntID` integer,
`tenantID` varchar(200)
);
可以看到 MySQL 的5.7 版本中还是有 json 方法的。
其他的SQL 参考:
docker-compose 项目地址:
https://gitee.com/fly-iot/docker-compose/blob/master/mysql-table-schema.sql
一共有 54 张表。
一共有54 张表:
`actions`, `actor_tasks`, `alembic_version`, `app_api_logs`, `app_api_logs_day`, `app_api_logs_hour`, `app_api_logs_month`,
`applications`, `applications_groups`, `certs`, `certs_devices`, `codec`, `connect_logs`, `current_alerts`,
`data_points`, `data_streams`, `device_count_day`, `device_count_hour`, `device_count_month`, `device_events`,
`device_events_day`, `device_events_hour`, `device_events_latest`, `device_events_month`, `devices`, `dict_code`, `emqx_bills`,
`emqx_bills_day`, `emqx_bills_hour`, `emqx_bills_month`, `end_devices`, `groups`, `groups_devices`, `history_alerts`,
`invitations`, `login_logs`, `lwm2m_items`, `lwm2m_objects`, `messages`, `permissions`, `products`, `publish_logs`, `resources`,
`roles`, `rules`, `rules_actions`, `services`, `streams_points`, `system_info`, `tenants`, `timer_publish`, `upload_info`,
`users`, `users_groups`
3,数据库链接配置
import asyncpg
from actor_libs.database.async_db import db
from actor_libs.tasks.timer import App
from .api_count import api_count_task
from .config import project_config
from .device_count import device_count_task
from .device_events import device_events_aggr_task
from .emqx_bills import emqx_bills_aggr_task
from .timer_publish import timer_publish_task
__all__ = ['app']
app = App(node_id='timer_task')
@app.on_event('startup')
async def open_database_connection_poll():
_pool = await asyncpg.create_pool(
host=project_config.get('POSTGRES_HOST', 'localhost'),
port=project_config.get('POSTGRES_PORT', 5432),
user=project_config.get('POSTGRES_USER', 'actorcloud'),
password=project_config.get('POSTGRES_PASSWORD', 'public'),
database=project_config.get('POSTGRES_DATABASE', 'actorcloud'),
min_size=5, max_size=10
)
await db.open(_pool)
可以看到使用了postgres数据库的连接池。驱动配置在yaml的配置中。
4,总结
需要做的事情还是挺多的呢。数据库的初始化。
同时配置 docker-compse 文件将数据库初始化了。
################## mysql 数据库 5.7 版本 ##################
mysql-iot:
restart: always
image: mysql:5.7
container_name: mysql-iot
ports:
- "3306:3306"
volumes:
- "./data/mysql/data:/var/lib/mysql"
- "./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf"
- "./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql"
- "./mysql/connDB.sh:/connDB.sh"
environment:
MYSQL_ROOT_PASSWORD: mysqliot
MYSQL_DATABASE: fly_iot
TZ: Asia/Shanghai
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_general_ci',
'--max_connections=3000'
]
只要配置 这个目录下的脚本就可也自动进行数据库初始化:
/docker-entrypoint-initdb.d/init.sql
然后就可以连接了,代码在配置中修改成mysql 链接。
同时增加 mysql 驱动:
apt install -y gcc default-libmysqlclient-dev
pip3 install mysqlclient
然后可以注册/登陆成功,但是没有权限。
继续研究代码中。
本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/130673631