Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 并行运行多个数据库查询_Mysql_Node.js - Fatal编程技术网

Mysql 并行运行多个数据库查询

Mysql 并行运行多个数据库查询,mysql,node.js,Mysql,Node.js,下面的脚本用于测试以更快的速度克隆数据库的选项 它使用节点js并行运行多个db查询。到目前为止,结果是一样的。似乎一次打开了与服务器的多个连接,但查询仍按顺序执行 var mysql = require('mysql') async = require('async'); // get list of tables // var uuid = 'def'; var default_db = 'abc'; var makeConnection = function () { retur

下面的脚本用于测试以更快的速度克隆数据库的选项

它使用节点js并行运行多个db查询。到目前为止,结果是一样的。似乎一次打开了与服务器的多个连接,但查询仍按顺序执行

var mysql = require('mysql')
async = require('async');

// get list of tables
//
var uuid = 'def';
var default_db = 'abc';

var makeConnection = function () {
    return mysql.createConnection({
                host: 'localhost',
                user: 'root',
                password: 'password',
                multipleStatements: true
            });
}   

makeConnection().query('SHOW TABLES from ' + uuid, function(err, rows, fields) {
    if (err) throw err;

    var parallel = 5;
    var parallels = [], tables = [];
    var tables_count_from_zero = rows.length - 1;
    var tables_per_parallel = Math.ceil(rows.length / parallel);

    var makeQuery = function makeQuery (tables) { // factory function to create the queries
        return function doQuery (callback) {

            console.log('start');
            makeConnection().query('SET foreign_key_checks = 0;' + tables.join(''), function(err, rows, fields) {
                    if (err) throw err;
                    console.log('done');
                    callback(err, null);
                });
        };
    };

    var counter = 0;    
    for (row in rows) {
        counter++;

        var table_name = rows[row]['Tables_in_nilead'];

        tables.push('CREATE TABLE IF NOT EXISTS ' + uuid + '.' + table_name + ' LIKE ' + default_db + '.' + table_name + ';');
        tables.push('INSERT ' + uuid + '.' + table_name + ' SELECT * FROM ' + default_db + '.' + table_name + ';');


        if (counter >= tables_per_parallel || row >= tables_count_from_zero) {
            counter = 0;            

            parallels.push(makeQuery(tables));

            tables = [];

            console.log('pushed ok');
        }
    }

    var initTimer = Date.now();

    async.parallel(parallels,

        // optional callback

        function(err, results) {
            console.log('Done ' + results + ' at: ' + (Date.now() - initTimer));
            // the results array will equal ['one','two'] even though
            // the second function had a shorter timeout.
        }
    );
});
//编辑:更多测试: 将-trx提交时的innodb刷新日志设置为0或2,将其速度提高至少3倍

//编辑以根据请求添加控制台日志结果

如果不存在def.acl_类,则创建表,如 mydb.acl_类;插入def.acl_类从中选择* mydb.acl_类;如果不存在def.acl_条目,则创建表,如 mydb.acl_条目;插入def.acl_条目从中选择* mydb.acl_条目;创建表(如果不存在)def.acl_object_标识 比如mydb.acl\u object\u标识;插入def.acl_对象_标识 从mydb.acl\u object\u标识中选择*;如果不存在,则创建表 def.acl_对象_标识_祖先喜欢 mydb.acl\u对象\u标识\u祖先;插入 def.acl\u对象\u标识\u祖先选择*自 mydb.acl\u对象\u标识\u祖先;如果不存在,则创建表 def.acl_security_标识,如mydb.acl_security_标识;插入 def.acl_security_identies从中选择* mydb.acl_安全性_身份;如果不存在,则创建表 def.association,比如mydb.association;插入def.association选择* 来自mydb.association;如果不存在定义关联类型,则创建表 如mydb.association_类型;插入def.association_type从中选择* mydb.association_类型;如果不存在def.cart LIKE,则创建表 mydb.cart;从mydb.cart插入def.cart SELECT*;如果不是,则创建表 存在类似mydb.cart\u项目的def.cart\u项目;插入def.cart_项目选择* 来自mydb.cart\u项目;如果不存在,则创建表def.configuration LIKE mydb.configuration;插入def.configuration从中选择* mydb.configuration;如果不存在,则创建表格。联系 如mydb.contact_机制;插入def.contact_机构选择*自 mydb.contact_机制;如果不存在,则创建表 def.contact_mechanism_link,如mydb.contact_mechanism_link;插入 def.contact_mechanism_link选择*自 mydb.contact\u机制\u链接;如果不存在,则创建表 def.触点\机构\用途\类型如 mydb.contact\u mechanism\u purpose\u type;插入 def.contact_mechanism_purpose_type从中选择* mydb.contact\u mechanism\u purpose\u type;如果不存在,则创建表 def.contact_mechanism_类型,如mydb.contact_mechanism_类型;插入 def.contact_mechanism_type从中选择* mydb.contact\u mechanism\u类型;如果def.container不存在,则创建表 比如mydb.container;插入def.container从中选择* mydb.container;如果不存在def.container_类型,则创建表,如 mydb.container_类型;插入def.container_类型从中选择* mydb.container_类型;创建表(如果不存在),如def.credit_卡 mydb.信用卡;插入def.credit_卡从中选择* mydb.信用卡;创建表(如果不存在),如def.currency mydb.currency;从mydb.currency插入def.currency SELECT*

开始

创建表(如果不存在)定义折扣\价格\组件 mydb.折扣价格组件;插入定义折扣价格组件 从mydb.discount\u price\u组件中选择*;如果不存在,则创建表 def.domain类似于mydb.domain;插入def.domain选择*自 mydb.domain;如果不存在,则创建表def.facility LIKE mydb.facility;从mydb.facility插入def.facility SELECT*;创造 表(如果不存在)定义.geo_边界,如mydb.geo_边界;插入 def.geo_边界从mydb.geo_边界中选择*;如果不是,则创建表 存在def.geo_boundary_关联,如 mydb.geo_边界协会;插入def.geo_boundary_关联 从mydb.geo_boundary_关联中选择*;如果不存在,则创建表 像mydb.group这样的def.group;插入def.group从中选择* mydb.group;如果不存在像mydb.guide这样的def.guide,则创建表;插入 def.guide从mydb.guide中选择*;如果不存在,则创建表 def.guide_项,如mydb.guide_项;插入def.guide_项目选择* 来自mydb.guide_项目;如果不存在def.image LIKE,则创建表 mydb.image;插入def.image从mydb.image中选择*;如果需要,请创建表 不存在与mydb.inventory\u项目类似的def.inventory\u项目;插入 def.inventory_item从mydb.inventory_item中选择*;如果需要,请创建表 不存在定义库存项目调整,如 mydb.库存\项目\调整;插入定义库存项目调整 从mydb.inventory\u item\u adjustment中选择*;如果不是,则创建表 存在定义库存\项目\差异,如 mydb.存货\项目\差异;插入定义库存项目差异选择 *来自mydb.库存\项目\差异;如果不存在,则创建表定义库存\项目\差异\原因,如 mydb.库存\项目\差异\原因;插入 定义库存\项目\差异\原因选择*自 mydb.库存\项目\差异\原因;如果不存在,则创建表 定义发票,如mydb.invoice;插入def.invoice选择*自 mydb.invoice; 创建表(如果不存在)定义发票地址,如 mydb.invoice\u地址;插入定义发票地址选择*自 mydb.invoice\u地址;创建表格(如果不存在)定义发票项目,如 mydb.invoice_项目;插入def.invoice_项目从中选择* mydb.invoice_项目;如果不存在,则创建表。类似于def.language mydb.language;从mydb.language插入def.language SELECT*;创造 表(如果不存在)定义消息,如mydb.message;插入def.message 从mydb.message中选择*

开始

如果不存在,则创建表 def.message_模板,如mydb.message_模板;插入 def.message_模板从mydb.message_模板中选择*;创建表 如果不存在像mydb.navigation这样的def.navigation;插入 def.navigation从mydb.navigation中选择*;如果不是,则创建表 存在类似mydb.option的def.option;插入def.option从中选择* mydb.option;创建表(如果不存在)定义选项_值,如 mydb.option_值;插入def.option_值选择*自 mydb.option_值;创建表(如果不存在)定义订单 mydb.order;从mydb.order插入def.order SELECT*;如果需要,请创建表 不存在像mydb.order\u地址那样的def.order\u地址;插入 def.order_address从mydb.order_address中选择*;如果不是,则创建表 存在定义订单调整,如mydb订单调整;插入 def.order_adjustment从mydb.order_adjustment中选择*;创建表 如果不存在类似mydb.order_项目的def.order_项目;插入 def.order_项目从mydb.order_项目中选择*;如果不是,则创建表 存在与mydb.order\u item\u地址类似的def.order\u item\u地址;插入 def.order_item_address从mydb.order_item_address中选择*;创造 表(如果不存在)定义订单项目角色 mydb.order\u item\u角色;插入def.order\u item\u角色选择*自 mydb.order\u item\u角色;如果不存在,则创建表def.order_角色,如 mydb.order_角色;插入def.order_角色选择*自 mydb.order_角色;如果不存在,则创建表def.page LIKE mydb.page;插入def.page从mydb.page中选择*;如果不是,则创建表 存在定义方,如mydb.party;插入def.party选择*自 mydb.party;创建表格(如果不存在)定义方\联系\机制,如 mydb.第三方联系机制;插入def.party\u contact\u机制选择 *来自mydb.party\u contact\u机制;创建表格(如果不存在)定义方\联系\机制\目的类似 mydb.第三方\联系\机制\目的;插入 定义方\联系方式\机构\目的选择*自 mydb.第三方\联系\机制\目的;如果不存在,则创建表 定义与mydb类似的政党关系;插入 def.party_relationship从mydb.party_relationship中选择*;创造 表如果不存在定义方角色(如mydb.party_角色);插入 def.party_角色从mydb.party_角色中选择*;如果不是,则创建表 存在定义方角色类型,如mydb.party角色类型;插入 def.party_role_type从mydb.party_role_type中选择*

开始

如果不存在类似mydb.payment的def.payment,则创建表;插入def.payment 从mydb.payment中选择*;如果不存在,则创建表def.payment_log 比如mydb.payment_log;插入def.payment_log选择*自 mydb.payment_log;如果不存在,则创建表def.payment_方法,如 mydb.付款方式;插入def.payment_方法选择*自 mydb.付款方式;如果不存在def.post LIKE,则创建表 mydb.post;从mydb.post插入def.post选择*;如果不是,则创建表 存在定义产品,如mydb.product;插入def.product SELECT*自 mydb.product;如果不存在def.product_图像,则创建表 mydb.product_图像;插入def.product_图像从中选择* mydb.product_图像;如果不存在,则创建表def.product_选项,如 mydb.product_选项;插入def.product_选项从中选择* mydb.product_选项;如果不存在def.product_属性,则创建表 如mydb.product_属性;插入def.product_属性选择*自 mydb.product_财产;如果不存在定义产品分类单元,则创建表 如mydb.product_分类单元;插入def.product_分类单元选择*自 mydb.product_分类单元;创建表(如果不存在),如def.property mydb.property;从mydb.property插入def.property SELECT*;创造 如果不存在类似mydb.seo的def.seo表;插入def.seo从中选择* mydb.seo;如果不存在,则创建表def.shipping LIKE mydb.装运;从mydb.Shipping插入def.Shipping选择*;创造 表(如果不存在)定义装运地址,如 mydb.u地址;插入定义装运地址选择*自 mydb.u地址;创建表格(如果不存在)定义装运项目 如mydb.Shipping_项目;插入def.shipping_项目选择*自 mydb.Shipping_项目;如果不存在,则创建表 定义装运物品库存物品 mydb.Shipping_item_inventory_item;插入 def.shipping_item_inventory_item从中选择* mydb.Shipping_item_inventory_item;如果不存在,则创建表 定义装运类别,如mydb装运类别;插入 def.shipping_category从mydb.shipping_category中选择*;创造 表(如果不存在)def.shipping_方法,如 mydb.shipping_方法;插入def.shipping_方法选择*自 mydb.shipping_方法;如果不存在,则创建表 def.shipping_method_规则,如mydb.shipping_method_规则;插入 def.shipping_method_rule从mydb.shipping_method_rule中选择*

开始

创建表格(如果不存在)定义装运方法类别,如 mydb.shipping_方法_类别;插入 def.shipping_methods_categories从中选择* mydb.shipping_方法_类别;如果不存在,则创建表 定义装运方法区域,如mydb装运方法区域;插入 def.shipping_methods_zones从中选择* mydb.shipping_方法_区域;如果不存在,则创建表 def.store_设置,如mydb.store_设置;插入def.store_设置 从mydb.store_设置中选择*;如果不存在,则创建表 def.tax_类别,如mydb.tax_类别;插入def.tax_类别选择 *来自mydb.tax_类别;如果不存在定义税率(如mydb.tax_rate)的表格,则创建该表格;插入定义税率从mydb.tax税率中选择*;创造 表(如果不存在)定义分类单元,如mydb分类单元;插入def.taxon选择 *来自mydb分类单元;如果不存在像mydb.theme这样的def.theme,则创建表;插入def.theme从mydb.theme中选择*;如果需要,请创建表 不存在def.unit of_度量值,如 mydb.计量单位;插入def.unit of_measurement选择*自 mydb.计量单位;如果不存在,则创建表 def.计量单位换算 mydb.测量单位单位换算;插入 def.unit of_measurement_conversion从中选择* mydb.测量单位单位换算;如果不存在,则创建表 def.user,比如mydb.user;从mydb.user插入def.user SELECT*;创造 表(如果不存在)定义用户组(如mydb.user组);插入 def.user_组从mydb.user_组中选择*;如果不是,则创建表 存在定义变量,如mydb.variant;插入def.variant SELECT*FROM mydb.variant;创建表格(如果不存在)def.variant_图像 mydb.variant_图像;插入def.variant_图像从中选择* mydb.variant_图像;创建表格(如果不存在)定义变量选项值 如mydb.variant_option_值;插入定义变量选项值选择 *从mydb.variant_option_值;如果不存在定义变量价格组件(如mydb.variant价格组件),则创建表;插入 def.variant_price_组件选择*自 mydb.variant_价格_组件


你能在console.log'start'之后添加console.logtables.join并粘贴console输出吗?@LucioM.Tato当然,我为你编辑了添加。看起来像是创建表。。。。花费的时间最长,所有这些表花费了我50多秒。如果您使用var parallel=1;,它还需要50多秒?@LucioM.Tato是的,Lucio也需要同样的时间