我正在寻找为公共(public) API 记录数据更改的解决方案。
需要告诉客户端应用程序自上次同步以来数据库中哪些表发生了变化并且需要同步,并且还需要针对特定品牌和国家/地区。
当前解决方案:
- 包含模型类名的版本表,在创建、删除、触摸和保存操作时从每个模型中触摸。
- 当我们触摸特定模型的版本时,我们也会查看反射(reflect)的关联并触摸它们。
- 版本模型仅限于品牌和国家/地区
- REST API 正在响应包含 last_sync_at:时间戳、品牌和国家/地区的请求
- Rails 查看具有给定属性的版本并返回自 lans_sync_at 时间戳以来更改的模型的类名。
这个解决方案可行,但问题在于性能,而且难以维护。
更新 1:
也许简单的问题是。 最佳实践是什么,如何找出并告知前端应用程序何时需要同步以及什么需要同步。就整个概念而言。
条件:
前端应用程序只需要下载它们自己的内容更改,而不是整个数据集。
当来自不同国家或品牌的应用程序需要同步时,不调用同步。
谢谢。
最佳答案
我认为最好的解决方案是使用 redis(或其他一些键值存储)并将您的信息保存在那里。写入 redis 比任何 sql 数据库都快得多。您可以编写一些服务类来保存数据,例如:
RegisterTableUpdate.set(table_name, country_id, brand_id, timestamp)
这样的调用会将给定的时间戳保存在键下,看起来像 table-update-1-1-users
,其中第一个数字是国家 ID,第二个数字是品牌 ID,然后是表名(或者如果需要,您可以使用国家和品牌名称)。如果您想找出哪些表已更改,您只需要使用查询“table-update-1-1-*”查找 redis 键,遍历它们并检查哪些比通过 api 发送的时间戳更新。
值得记住的是,redis 不如 sql 数据库可靠。它的可靠性取决于配置,因此您可能需要阅读 redis guidelines并决定是否愿意参加。
关于ruby-on-rails - 记录数据更改以进行同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25724141/