gpt4 book ai didi

mysql - 比较 ActiveRecord 结果并只使用不同的结果

转载 作者:IT王子 更新时间:2023-10-29 06:16:31 26 4
gpt4 key购买 nike

我目前需要通过 redis 从服务器将数据同步到远程站点。数据存在于 MySQL 中。为此,我设计了一个与此类似的同步脚本:

 MyTable
.select("id, first_name, status")
.find_each do |user|
STDOUT.write(gen_redis_proto("SET", "users:#{user.id}",user.to_json))
end

这非常有效。我将其通过管道传输到 redis-cli --pipe(按照 https://www.redis.io/topics/mass-insert )并将其插入到本地主机并同步到远程从机。

不幸的是我有几千行,这使得这个同步非常大。我只想同步已更改的行,但表中没有可用的“last_modified”或类似值。

上面的代码在循环中运行,运行之间有休眠,因此我可以存储以前的结果集并进行比较,但我无法找到一种有效的方法来执行此操作。我在想类似于以下伪代码的东西:

 lines = [
"{\"id\":123,\"first_name\":\"Jimmy\",\"status\":1}",
"{\"id\":456,\"first_name\":\"John\",\"status\":2}",
"{\"id\":789,\"first_name\":\"James\",\"status\":2}"
]
previous_lines = [
"{\"id\":123,\"first_name\":\"Jimmy\",\"status\":2}",
"{\"id\":456,\"first_name\":\"John\",\"status\":3}",
"{\"id\":789,\"first_name\":\"James\",\"status\":2}"
]
varied_lines = diff(lines, previous_lines) # returns something like [0,1]
varied_lines.each do |line|
this_line = line.to_a
STDOUT.write(gen_redis_proto("SET", "users:#{this_line.id}",line))
end

我怀疑过多的数据操作或比较会带来性能开销,而且我也不确定比较这些数据以获得结果的最佳方法。

最佳答案

为什么不需要它,rickshaw gem 可以让您轻松地向字符串添加散列。我可能会做一些存储和比较哈希值的事情,这样会占用更少的空间。示例。

require 'rickshaw'

def diff(current, previous)
current.select.each_with_index do |line, idx|
previous_line = previous[idx]
line.to_sha1 == previous_line.to_sha1
end
end

lines = [
"{\"id\":123,\"first_name\":\"Jimmy\",\"status\":1}",
"{\"id\":456,\"first_name\":\"John\",\"status\":2}",
"{\"id\":789,\"first_name\":\"James\",\"status\":2}"
]

previous_lines = [
"{\"id\":123,\"first_name\":\"Jimmy\",\"status\":2}",
"{\"id\":456,\"first_name\":\"John\",\"status\":3}",
"{\"id\":789,\"first_name\":\"James\",\"status\":2}"
]

varied_lines = diff(lines, previous_lines)
varied_lines.each do |line|
this_line = line.to_a
STDOUT.write(gen_redis_proto("SET", "users:#{this_line.id}",line))
end

关于mysql - 比较 ActiveRecord 结果并只使用不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53793765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com