我希望为我的应用添加运行时配置,当切换时,会将所有写入从MySQL重定向到Redis。另一个脚本将轮询Redis,以便稍后手动将这些插入到MySQL中。
当我们不想对MySQL DB进行任何更新(Slave机器上的写请求,DB停机等)时,我需要这个。
对我们的应用程序的典型请求将导致~3个插入查询并包含User submitted data, IP address, date/time
等数据。
我考虑了3个选项,下面按照简单的顺序列出(对我而言):
1. 在Redis 列表中存储插入的原始SQL,第二个脚本将弹出这些并执行对MySQL的插入
INSERT INTO DB.TABLE (col1, col2) VALUES (val1, val2)
2. 存储JSON编码的必要变量数组,用于插入以及数据(列=>值),DB和表名。第二个脚本只需要将这些值作为列和值进行分解,然后执行insert。
{
"db":"DB",
"table":"table",
"data":[
{
"col1":"val1",
"col2":"val2"
}
]
}
3. 将应用程序中所需的所有变量存储在Redis中的Hash对象中。第二个脚本完成了获取插入查询的完整逻辑。
{
"ipAddress":"127.0.0.1",
"requestType":"hmm",
"variable2": "a"
...
}
虽然第一个似乎是最不痛苦的,但它似乎不正确,因为它看起来太hacky和..安全。通过这种方式存储会丢失/格式错误的数据吗?
你建议我做什么?
答案 0 :(得分:1)
当我需要我的写入来容忍临时数据库停机时,我将它们传递给后台作业队列。
我认为这与你的选项#3非常相似。
请注意,此方案意味着所有写入始终都通过队列。减少人工干预的需要。当主数据库在凌晨4点停机时,您不会在一秒钟之内醒来并更改应用程序配置吗?