首页 > 数据库 >rsync同步SQLite3文件API返回旧数据

rsync同步SQLite3文件API返回旧数据

时间:2022-10-17 09:58:09浏览次数:89  
标签:文件 rsync 同步 容器 SQLite API SQLite3 挂载

问题描述

EFCore cannot get new value in docker, if use rsync replace sqlite file

基于.NET6开发一个查询SQLite的API,使用Docker进行部署,通过挂载的方式来访问数据库文件:docker run -d --name ddocker -p 9100:80 -v /mnt/c/Users/chiwenjun/Desktop/pdemo/docs/:/home/db/ddocker 使用rsync命令从其他目录同步文件到/mnt/c/Users/chiwenjun/Desktop/pdemo/docs/目录下,API依然返回旧数据。

原因解释

查询SQLite数据库时,数据库中符合查询条件的数据会以页缓存(和连接相关)的形式存放到内存中,减少后续查询的磁盘I/O操作;

修改数据库文件会导致页缓存失效;

rsync命令会导致文件inode值发生改变,cp命令不会;

.NET串默认开启了数据库连接池,使用rsync命令同步文件不会使页缓存失效,所以应用查询依然走页缓存,也就无法感知到数据变化,连接字符串中禁用连接池,可解决该问题。

本地在IDE中直接运行代码,在Mac上测试呈现出和Linux上一样的问题,在Windows环境下,开启连接池时,SQLite文件处于被占用状态,在wsl2中使用rsync无法替换文件,报Permission denied (13)错误。

Docker文件挂载

Docker即可以挂载目录也可以直接挂载具体的文件,挂载目录在修改文件后容器中也会生效,挂载文件在修改后若inode发生变化则容器内不会生效。

若要挂载的文件内容发生变化后同步到容器,需设置文件权限为777,不建议这么做。

 

参考

Can cached database connections be aware of file changes?

SqliteCacheMode Enum

SQLite Page cache

What exactly is being cached when opening/querying a SQLite database

解决docker通过volumes挂载文件不生效,修改后容器内数据不同步,需要重启容器才能同步的问题

docker 挂载文件不同步问题记录

解密 Docker 挂载文件,宿主机修改后容器里文件没有修改

标签:文件,rsync,同步,容器,SQLite,API,SQLite3,挂载
From: https://www.cnblogs.com/Cwj-XFH/p/16798063.html

相关文章

  • vue3组合API中的父子通信
    父传子:父亲发送数据--父组件中使用子组件,在子组件标签上动态传入数据:money="money"儿子接收数据--通过单独的props配置项接收数据props:{money:{type:Number,default:......
  • 外向交货单发货过账BAPI:BAPI_OUTB_DELIVERY_CONFIRM_DEC
    前面说过,可以使用 WS_DELIVERY_UPDATE进行外向交货单的发货过账,当然,这个可实现的很多,过账,冲销,删除都可以但是这个不是bapi,是个函数,则会缺少bapi自带的那些校验为了更安全,其......
  • 冲销已过账外向交货单BAPI:WS_REVERSE_GOODS_ISSUE
    前台操作:VL09填写装运点和交货单点击定义日期,将输入的实际过账日期输入到本地日期中。点勾然后点击冲销点击绿色勾,冲销成功或错误,则均会出现如果对话框。......
  • 删除外向交货单 BAPI_OUTB_DELIVERY_CHANGE
    删除外向交货单是没有直接以delete结尾的bapi的,是使用的change:BAPI_OUTB_DELIVERY_CHANGE已经过账的交货单应该是先冲销,再删除,这里暂时不写了。仅考虑没过帐的交货单。一般......
  • DEMO: MIRO 根据物料创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
    QQ群:SAP干货铺, 群号:775662808所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!MIRODemo*&---------------------------------------------------------------......
  • DEMO: MIRO 根据退货PO创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
    QQ群:SAP干货铺, 群号:775662808所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!POMIRO或者不勾选计算税额,手动输入税额。demo*&-----------------------------......
  • API 生命周期管理
    一、API创建•基于API设计器生成API。SwaggerEditor可以在浏览器中使用YAML编写服务OpenAPI规范的API文档,并能够实时预览文档以及自动化生成代码。• 从代......
  • 百度地图api之点击地图获取坐标点
    一.首先引入所申请的ak密钥<scripttype="text/javascript"src="http://api.map.baidu.com/api?ak=PlhFWpA02aoURjAOpnWcRGqw7AI8EEyO&v=2.0&services=false"></script>......
  • 实战 | 用Python和MediaPipe搭建一个嗜睡检测系统 (详细步骤 + 源码)
    导读本文将使用Python和MediaPipe搭建一个嗜睡检测系统(包含详细步骤+源码)。背景介绍   疲劳驾驶的危害不堪设想,据了解,21%的交通事故都因此而生,尤其是高速路上,大多......
  • web APIs学习---定时器轮播图
    开始删除前一个高亮圆点出现错误 后发现切换至最后一张图时,因为num++的缘故,num已=0 通过num数值判断圆点的删除1//判断圆点删除2//判断非最后一幅......