Php 多数据库迁移可提高性能

Php 多数据库迁移可提高性能,php,mysql,Php,Mysql,我有一个应用程序,每个用户都有自己的数据库,其中每个数据库都有相同的模式 我有一个以这种方式执行迁移的脚本: 显示数据库 遍历数据库 执行sql语句 当复杂的查询需要花费大量时间(3秒或更长时间)时,这可能需要很长时间 是否有一种方法可以从一个脚本同时运行每个数据库的sql语句?这样做是否危险/资源过于密集 我之所以要这样做,是为了尽可能避免停机 下面是我的脚本: <?php ini_set('display_errors', 1); set_time_limit(0); $sql = f

我有一个应用程序,每个用户都有自己的数据库,其中每个数据库都有相同的模式

我有一个以这种方式执行迁移的脚本:

  • 显示数据库
  • 遍历数据库
  • 执行sql语句
  • 当复杂的查询需要花费大量时间(3秒或更长时间)时,这可能需要很长时间

    是否有一种方法可以从一个脚本同时运行每个数据库的sql语句?这样做是否危险/资源过于密集

    我之所以要这样做,是为了尽可能避免停机

    下面是我的脚本:

    <?php
    ini_set('display_errors', 1);
    set_time_limit(0);
    $sql = file_get_contents('../update.sql');
    $sql_queries = explode(";", $sql);
    $exclude_dbs = array('horde','phppoint_forums','phppoint_site','roundcube', 'pos', 'bntennis_site', 'mysql', 'information_schema', 'performance_schema');
    
    $conn = mysqli_connect("localhost", "root", "PASSWORD");
    $show_db_query = mysqli_query($conn, 'SHOW databases');
    $databases = array();
    while ($row = mysqli_fetch_assoc($show_db_query)) 
    { 
        if (!in_array($row['Database'], $exclude_dbs))
        {
            $databases[] = $row['Database'];
        }
    }
    
    foreach($databases as $database)
    {
        mysqli_select_db($conn, $database);
        echo "Running queries on $database\n***********************************\n";
        foreach($sql_queries as $query)
        {
            if (!empty($query))
            {
                echo "$query;";
                if (!mysqli_query($conn, $query))
                {
                    echo "\n\nERROR: ".mysqli_error($conn)."\n\n";
                }
            }
        }
        echo "\n\n";
    }
    ?>
    

    我不知道数据库是否能承受该负载,但基本上我会根据语言将该过程分叉或生成到后台


    对于php,您可以为每个数据库分叉进程,基本上并行运行迁移。

    是的,我开始认为同时对200个数据库执行昂贵的查询可能不是一个好主意。在一个操作中为每个数据库运行查询是非常危险的,而且会占用大量资源。最好将查询或操作分开,然后调用每个查询或操作。或者,您可以调用一个方法将主数据复制到一个数据库,然后对该数据库运行查询,并且在需要更多信息时只查询其他数据库。但是,在考虑安全性和响应时间时,一次向多个数据库发送复杂查询从来都不是一个好主意。