Maison  >  Article  >  développement back-end  >  Méthode d'optimisation de Swoole et Workerman pour les opérations par lots de données et la soumission d'opérations par lots en PHP et MySQL

Méthode d'optimisation de Swoole et Workerman pour les opérations par lots de données et la soumission d'opérations par lots en PHP et MySQL

王林
王林original
2023-10-15 17:27:11864parcourir

Méthode doptimisation de Swoole et Workerman pour les opérations par lots de données et la soumission dopérations par lots en PHP et MySQL

Méthode d'optimisation de Swoole et Workerman pour les opérations par lots de données et la soumission d'opérations par lots de PHP et MySQL

Dans le développement PHP, l'interaction avec la base de données est une opération très courante. Cependant, lorsque la quantité de données est importante, la soumission simultanée d’une grande quantité de données à la base de données peut entraîner une dégradation des performances. Afin de résoudre ce problème, nous pouvons utiliser Swoole et Workerman pour mettre en œuvre des opérations par lots de données et optimiser la soumission des opérations par lots.

1. Utilisation de Swoole
Swoole est une extension PHP hautes performances qui peut prendre en charge le modèle multi-processus et le modèle de coroutine pour PHP. Ce qui suit est un exemple de code pour utiliser Swoole pour les opérations par lots de données et la soumission d'opérations par lots :

<?php
// 创建Swoole进程
$worker = new SwooleProcess(function () {
    // 连接到数据库
    $db = new mysqli('localhost', 'root', 'password', 'database');
    
    // 批量操作数据
    $sql = 'INSERT INTO `table` (`id`, `name`) VALUES ';
    for ($i = 0; $i < 10000; $i++) {
        $sql .= '(' . ($i + 1) . ', "name' . ($i + 1) . '"),';
    }
    $sql = rtrim($sql, ',');

    // 执行SQL语句
    $db->query($sql);
    
    // 关闭数据库连接
    $db->close();
});

// 启动Swoole进程
$worker->start();

Dans l'exemple de code ci-dessus, nous avons créé un processus Swoole, utilisé mysqli pour nous connecter à la base de données dans le processus, puis épissé ​​SQL instructions Effectuer des opérations par lots sur les données. Après avoir exécuté l'instruction SQL, nous fermons la connexion à la base de données.

2. L'utilisation de Workerman
Workerman est un framework PHP haute performance résidant en mémoire qui peut gérer de longues connexions et un grand nombre de requêtes simultanées. Vous trouverez ci-dessous l'exemple de code pour l'opération par lots de données et la soumission d'opérations par lots à l'aide de Workerman :

<?php
use WorkermanMySQLConnection;
use WorkermanWorker;

// 连接到数据库
$db = new Connection('host', 'port', 'user', 'password', 'database');

// 创建一个Worker监听端口
$worker = new Worker();

// 接收到数据后的回调函数
$worker->onMessage = function ($connection, $data) use ($db) {
    // 批量操作数据
    $sql = 'INSERT INTO `table` (`id`, `name`) VALUES ';
    for ($i = 0; $i < 10000; $i++) {
        $sql .= '(' . ($i + 1) . ', "name' . ($i + 1) . '"),';
    }
    $sql = rtrim($sql, ',');

    // 执行SQL语句
    $db->query($sql);
    
    // 返回结果
    $connection->send('Data inserted successfully');
};

// 运行Worker
Worker::runAll();

Dans l'exemple de code ci-dessus, nous utilisons d'abord la classe de connexion MySQL de Workerman pour nous connecter à la base de données. Créez ensuite une instance Worker et traitez les données reçues via la fonction de rappel onMessage. Dans la fonction de rappel, nous utilisons la même méthode pour effectuer des opérations par lots et soumettre des données, et renvoyons les résultats via la méthode d'envoi.

3. Optimisation des opérations par lots et de la soumission
Dans l'exemple de code ci-dessus, nous utilisons la méthode d'épissage des instructions SQL pour effectuer des opérations par lots et la soumission des données. Cependant, lorsque la quantité de données est très importante, cette approche peut entraîner des problèmes de performances lors de la concaténation de chaînes. Pour optimiser les opérations par lots et les validations, nous pouvons utiliser des instructions et des transactions préparées pour améliorer les performances. Voici un exemple de code pour l'opération et la soumission de données par lots à l'aide d'instructions et de transactions préparées :

<?php
// 连接到数据库
$db = new mysqli('localhost', 'root', 'password', 'database');

// 开启事务
$db->begin_transaction();

// 预处理SQL语句
$stmt = $db->prepare('INSERT INTO `table` (`id`, `name`) VALUES (?, ?)');

// 批量操作数据
for ($i = 0; $i < 10000; $i++) {
    $id = $i + 1;
    $name = 'name' . $id;
    $stmt->bind_param('is', $id, $name);
    $stmt->execute();
}

// 提交事务
$db->commit();

// 关闭数据库连接
$db->close();

Dans l'exemple de code ci-dessus, nous utilisons d'abord mysqli pour nous connecter à la base de données et démarrer la transaction via la méthode start_transaction. Utilisez ensuite la méthode prepare pour prétraiter l'instruction SQL et lier les paramètres via bind_param pour obtenir l'effet des opérations par lots. Enfin, la transaction est soumise via la méthode de validation pour terminer l'opération par lots et la soumission. Une fois l'exécution du code terminée, nous fermons la connexion à la base de données.

Grâce à des opérations par lots et à des méthodes de soumission optimisées, nous pouvons améliorer les performances de PHP et MySQL et être plus efficaces lors du traitement de grandes quantités de données. Dans le même temps, l'utilisation de frameworks hautes performances tels que Swoole et Workerman peut également améliorer considérablement les capacités de concurrence de PHP et améliorer encore les performances du programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn