[fly-iot] (11) : La première étape de la conversion de la base de données Postgres en une base de données MySQL consiste à convertir d'abord le SQL, puis à modifier le lien de la base de données. Vous pouvez changer de code et initialiser les données.

15587397 :

avant-propos


Le lien vers le texte original de cet article est :
https://blog.csdn.net/freewebsys/article/details/130673631
colonne fly-iot :
https://blog.csdn.net/freewebsys/category_12219758.html

Ne pas reproduire sans l'autorisation du blogueur.
L'adresse CSDN du blogueur est : https://blog.csdn.net/freewebsys
L'adresse de la pépite du blogueur est : https://juejin.cn/user/585379920479288
L'adresse Zhihu du blogueur est : https://www.zhihu. com/ personnes/freewebsystem

0, À propos du projet actorcloud


Concernant le projet actorcloud, réorganiser le code du projet open source
Original project : https://github.com/actorcloud/ActorCloud

Les projets sont tous open source utilisant le protocole Apache.
Les projets précédents sont également open source sous le protocole Apache.

ActorCloud est une plate-forme IoT pour les réseaux IoT à faible consommation qui fournit des services de plate-forme à guichet unique aux entreprises. Sur la base de la sécurité et de la fiabilité, ActorCloud fournit aux appareils des capacités de communication pour l'accès à plusieurs protocoles, les données de l'appareil et les fonctions de gestion du flux de messages.

La plate-forme fournit des fonctions de base de gestion des appareils pour connecter et gérer un grand nombre d'appareils, réaliser la communication des messages de l'appareil et la persistance de la collecte de données ; intégrer le moteur de règles et la gestion de la visualisation des données, ouvrir de manière flexible les API de gestion et de contrôle de différents niveaux d'autorité et développer rapidement la partie supérieure couche via l'application API pour réaliser un accès multi-terminal et un contrôle à distance de l'équipement.

IoT Hub : établir un canal de connexion bidirectionnel fiable pour les terminaux sur le cloud, effectuer l'authentification, l'analyse de protocole et le routage des messages ;
gestion des appareils : enregistrement des terminaux et gestion du cycle de vie, fournissant une surveillance continue de l'état, des pannes et du trafic ;
moteur de données : sur la persistance à grande vitesse, l'analyse en temps réel, le traitement des transactions de règles et l'affichage visuel des messages de terminal acquis ; activation de l'
application : fournir un SDK de terminal, un SDK d'application, une interface d'API REST ouverte et riche et intégrer une interface de poussée de message.

À propos de l'adresse du projet IOT :
Adresse du projet :

Adresse du projet front-end :
https://gitee.com/fly-iot/fly-iot-frontend
Adresse du projet back-end :
https://gitee.com/fly-iot/fly-iot-backend-python
docker- composer l'adresse du projet :
https://gitee.com/fly-iot/docker-compose

1. À propos de la base de données Postgres


Les performances de la base de données sont vraiment bonnes, mais elles ne semblent pas trop populaires.
Dans le même temps, la base de données dans le cloud a TIDB qui peut prendre en charge le pilote Mysql. Il est également très pratique d'étendre.
La raison principale est que trop de gens utilisent Mysql.

PostgreSQL est un système de gestion de bases de données relationnelles objet (ORDBMS) basé sur POSTGRES, version 4.2 développé par le Département d'informatique de l'Université de Californie à Berkeley. De nombreux concepts lancés par POSTGRES sont apparus beaucoup plus tard dans certains systèmes de bases de données commerciaux.

PostgreSQL est le successeur open source du code original de Berkeley. Il prend en charge la plupart des standards SQL et offre de nombreuses fonctionnalités modernes :

Requêtes complexes Déclencheurs
de clés étrangères Vues pouvant être mises à jour Intégrité transactionnelle Contrôle de concurrence multiversion De même, PostgreSQL peut être étendu de plusieurs manières, par exemple en ajoutant de nouveaux :




Types de données
Fonctions
Opérateurs Fonctions
d'agrégation
Méthodes d'indexation
Langages procéduraux
Et, grâce à la licence permissive, PostgreSQL est libre d'utilisation, de modification et de distribution pour n'importe qui, que ce soit à des fins de recherche privée, commerciale ou universitaire.
http://www.postgres.cn/docs/14/intro-whatis.html

2. Méthode de migration


En fait, SQL est standard, mais chaque fournisseur de bases de données l'implémente d'une manière différente.
Postgres a une méthode similaire à oracle pour générer l'ID de clé primaire par séquence.
et quelques champs spéciaux. Effectuez simplement le remplacement de chaîne directement.

Le premier est l'exportation du fichier de base de données Postgres :

-- 只是将数据表结构和索引导出:
pg_dump -U actorcloud -l actorcloud > all.sql

Supprimer sans fuseau horaire,
problème de guillemets
Supprimer le caractère variant() et le remplacer par varchar()

horodatage , remplacé par : horodatage NOT NULL DEFAULT CURRENT_TIMESTAMP,

Supprimez ::smallint,
modifiez jsonb en json,

Ensuite, modifiez de la même manière le SQL pour :

PostgreSQL

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
);

Modifier en 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) 
);

Vous pouvez voir qu'il existe toujours une méthode json dans MySQL version 5.7.

Références SQL supplémentaires :

Adresse du projet docker-compose :
https://gitee.com/fly-iot/docker-compose/blob/master/mysql-table-schema.sql

insérez la description de l'image ici
Il y a 54 tables au total.

insérez la description de l'image ici

Il y a 54 tables au total :

`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. Configuration des liens de la base de données


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)
    

Vous pouvez voir que le pool de connexion de la base de données postgres est utilisé. Le pilote est configuré dans la configuration yaml.

4. Résumé


Il reste encore beaucoup à faire. Initialisation de la base de données.
Configurez en même temps le fichier docker-compse pour initialiser la base de données.

insérez la description de l'image ici

################## 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'
    ]

Configurez simplement le script dans ce répertoire pour initialiser automatiquement la base de données :
/docker-entrypoint-initdb.d/init.sql
et ensuite vous pouvez vous connecter, et le code est changé en un lien mysql dans la configuration.
Ajoutez en même temps le pilote mysql :

apt install -y gcc  default-libmysqlclient-dev
pip3 install mysqlclient

Ensuite, vous pouvez vous inscrire/vous connecter avec succès, mais vous n'avez pas la permission.

insérez la description de l'image ici

Continuez à étudier le code.

Le lien original de cet article est :
https://blog.csdn.net/freewebsys/article/details/130673631

insérez la description de l'image ici

Acho que você gosta

Origin blog.csdn.net/freewebsys/article/details/130673631
Recomendado
Clasificación