本地数据库与API调取的数据的同步

最近做项目需要将通过API的到的数据存到本地,并且确保本地数据库中某张表的数据与数据源的数据保持一定的同步性,以下为解决问题的思路:

1.在本地做好映射确保可以从外部访问,让api的提供方在数据库提供一个触发器,当数据提供方的数据发生变化时,主动同步到本地。(对方拒绝,扑街)

2.用Mysql的repalce into 语句进行结合定时器来对数据的定时更新。

3.网上还有一种思路是,从本地数据库调用此表中不变的字段,从api调用改变的字段并保存到缓存以减少访问远端的次数以及减少数据量。但是本表是row整体变化所以不采用。

采用replace into附上自己在mybatis中的使用:

<insert id=“addSkuRelationByBatch" useGeneratedKeys="true" parameterType="java.util.List">  
    repalce into relation_detail
        (
            pcrProductSku,
            pcrQuantity,
            pcrPercent
        )
        values
        <foreach collection="list" item="item" separator=",">
            (
                #{item.pcr_product_sku,jdbcType=VARCHAR},
                #{item.pcr_quantity,jdbcType=VARCHAR},
                #{item.pcr_percent,jdbcType=VARCHAR}
            )
        </foreach>
</insert> 
使用replace into 应该注意一下几点:

replace跟insert的功能类似,区别在于:

1.replace 在将数据插入表中之前先判断是否存在此条数据,如果存在先删除此条数据,不存在直接插入数据。(判断的条件是主键或者唯一索引,插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据)。

2.replace into中的into可以省略不写,但是个人习惯写明。

3.如果某列无值,mysql将插入默认的值

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值