gpt4 book ai didi

mysql - Redis位图数据转Mysql——ETL策略

转载 作者:可可西里 更新时间:2023-11-01 11:22:03 25 4
gpt4 key购买 nike

我真的很喜欢 redis 和 mysql,并且广泛使用它们。我有兴趣从我的 redis 实例中清除我不再需要的某些键,因为内存很昂贵。我想把它放在磁盘上并永远留在那里。我不是很在意如何,但我正在探索将它存放在 mysql 中。对于大多数 Redis 数据类型,这很简单。它要么是字符串,要么是 json 编码可以轻松处理的东西。我的问题是位图,它是数据的二进制表示。

这是我天真的psydo代码/python方法:

#create an arbitrary bitmap with every third bit ticked to 1
for i in range(100):
rediscon.setbit('thekey',i*3, 1)

#get the value as a string
thevalue = rediscon.get('thekey')#is get appropriate for a bitmap?
#this looks something like "@ \b\x02\x00\x80 "

#do the insert into mysql
mysql.query("insert into table (key, value) VALUES ('thekey', "+MySQLdb.escape_string(thevalue)+")")

#do a sanity check, restore the key back to redis
#get the value from mysql and put it back in redis with a new key
val = MySQLdb.query("select value from table where key='thekey'")
rediscon.set('thekey_new', val)

print rediscon.bitcount('thekey')#this prints correctly as 100
print rediscon.bitcount('thekey_new')#this is wrong, it prints a number much less than 100

mysql的引擎类型是myisam,我觉得无所谓。我已经为 values 的列类型尝试了 BLOB 和 LONGTEXT。在位图上执行 get 是我想做的吗?如何使用二进制数据在 mysql 中插入?

我该怎么做?我希望能够把这张位图放到mysql中,以后有能力恢复。谢谢!

最佳答案

rediscon.get() 是字节安全的,所以是的,这将安全地获取您的位图。

问题出在您的 SQL 语句中。你可以 base64在存储之前对二进制数据进行编码。

你的方法看起来不错,但如果它有很多数据(如“键”,而不是这里的“字节”),请始终使用非事务性 pipelining .对于 python 实现,请参见 here .

希望这有帮助,TW

关于mysql - Redis位图数据转Mysql——ETL策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723273/

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