【问题标题】:Fastest way to copy redis data to sql server将redis数据复制到sql server的最快方法
【发布时间】:2021-06-08 07:49:03
【问题描述】:

我有一个超过 10M 行的 redis,我想将所有数据复制到 sql server db,目前我编写了一个 nodejs 脚本来传输数据,如下所示


redis.scan(cursor, "MATCH", "*_*", "COUNT", "100", function (err, res) {
    var keys = res[1];
    cursor = res[0];
    keys.forEach(function (id) {
        redis.hgetall(id, function (err, items) {
            let splited = Object.keys(items)[0].split("#");

            let data = {
                customerId: splited[0],
                orderId: splited[1],
            };

            sql.connect(config).then((pool) => {

                pool.request().query(
                    `INSERT INTO [dbo].[Bi]
                          ([CustomerId]
                          ,[OrderId]
                          ,[AddressId])
                    SELECT
                          ${data.customerId}
                          ,${data.orderId}
                          ,[dbo].[Address].Id
                    FROM [dbo].[Address] where CustomerId = ${data.customerId}`
                )
            })
        })
    })
})


但是需要 1 天才能完成,那么我应该如何优化脚本或者有没有其他方法可以传输数据?

【问题讨论】:

  • 这能回答你的问题吗? Bulk inserting with Node mssql package
  • 是一次性的还是要定期将其同步到 MySQL?
  • @GuyKorland 我想定期运行它,可能每 3 天运行一次
  • @Charlieface tnx 但没有,因为我在另一个表的查询中得到“Address.Id”
  • 创建一个本地临时表(单个#),批量插入其中,添加一个好的索引(看起来CustomerId, OrderId 可以正常工作),然后执行standard joined insert。当连接关闭时,您的临时表将被删除

标签: node.js sql-server redis


【解决方案1】:

Redis 模块RedisGears 有一个名为 rgsyncenter link description here 的配方,使用此模块您可以确保对 Redis 的每次更新都同步回您的 SQLServer。

在此处查看示例:https://github.com/RedisGears/rgsync/tree/master/examples/mssql

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多