在客户端和API(数据库)之间同步数据.NET 6

k5hmc34c  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(180)

我当前正在处理一项需要同步数据的任务,例如:
客户端向API请求获取数据(API可以访问数据库),客户端收到数据并将其保存到列表中。该列表会使用一段时间等.....然后,与此同时,另一个客户端访问同一个API和数据库,并对同一个表进行一些更改......过了一会儿,第一个客户端希望更新其当前数据,由于表很大,比如说1万条记录,再次获取整个表是低效的。我希望只获取已修改、删除或新创建的记录。然后更新客户端1拥有的当前列表。如果客户端没有记录,他把所有的都归类为新创建的(在启动时),然后把它们全部抓取。我想在客户端做同样多的检查。
我该怎么做呢?我确实有像Modified,LastSync,IsDeleted这样的字段。所以我可以找到我需要的记录,但主要问题是如何以最少的重复有效地做这件事。
此刻我先试着得到所有的行,然后在我想更新后(同步)我从API中获取最少的必需信息LastSync Modified IsDeleted密钥,然后只将不匹配的行的键发送到服务器以获得与键匹配的整个值。但是我也不确定这样做的效率...我不知道如何用这些值有效地更新当前列表,我能想到的唯一方法是使用循环中的循环来比较键并更新列表,但我知道这不是一个好方法。

9njqaruj

9njqaruj1#

只要你不在服务器端做检查,这就永远不会起作用。在你的api get call to server和你post call to server之间总是有可能有人post。无论你在客户端能做什么测试,你都可以在服务器端做。

b4wnujal

b4wnujal2#

根据您的DB和其他设置,您可以通过在数据库中要跟踪的表/字段上添加触发器并设置缓存来完成此操作(可以使用Redis,Memcached,Aerospike等)和缓存刷新服务。如果数据库中的某些内容被添加/更新/删除,您可以设置触发器写入数据库中的一个单独的存档表。然后您可以从例如,可以是,Jenkins(或者有一个Kafka连接器--有很多方法可以实现这一点)来轮询存档表和原始表,以便根据ID、日期或任何您需要的标准来查找更改。任何更改都将被刷新,然后写回该高速缓存。这样您的API就根本不会访问DB。它只会在客户端请求最新数据时调用该高速缓存。您的独立服务将负责数据同步、数据库访问和保持缓存最新。

相关问题