
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
最近在做一个GPS实时监控系统,数据的实时更新是关键。我采用的思路如下:把接收到的源源不断的GPS定位数据往数据库中写,一个数据对(x,y)为一条数据库记录,页面这头不断去读数据库的最近记录,从而显示出车载GPS的运动。
但不知道如何控制读与写的同步,写程序(WinForm程序),暂时启名叫"writer",先打开了数据库在往里写,记录不断增加,读数据库程序(WebForm程序)后打开,但它去读的时候,总是不能读到“writer"启动以后写近去的记录,是不是因为锁的原因?
请教大家,如何实现数据库的同步读写啊?
解析:
你在写数据的时候要看你数据库允许的锁定级别是什么,每种数据库都不一样,如果是最高级别的锁你在写数据的时候其他事务是无法对他进行写 *** 作的,如果是读就会发生 (1)读事务读取的数据不同(2)发生对未提交的更新的依赖。
则读事务在读数据的时候需要申请读锁。建议是你不要通过扫数据库来查找更新,把数据放到内存中通过缓冲区进行交换那样更好
在pgsql的数据库中将要同步的表建立一个一模一样的同步表。然后建触发器,将进入源表中的数据触发到同步表中。然后做一个windows服务扫描这个同步表并且将同步表中的数据同步到mysql
或access中。
如果是整个数据库中有许多表要进行同步。则建立一个共用的同步表,结构非常简单。字段如下:
主键(f_id),源表名(f_tablename),主键字段名(f_keyname),主键值(f_keyvalue), *** 作标识(f_operflag
i:插入
u:更新
d:删除),时间字段(f_time)将要同步的表都建立触发器,只要有增、改、删都触发到这个表里。这样你只扫描这个共用的同步表,根据这些字段值完全可以实现数据的同步。隔离网闸就是这么个原理,只不过它的要比这复杂多了!
1、如果RDS上的数据没有发生增删改的 *** 作的话,可以生成物理备份或者逻辑备份,然后将物理备份和逻辑备份通过Xtrabackup或者mysqldump将数据导入到自建库。
2、如果在物理备份已经生成后对于数据库仍然有增删改的 *** 作的话,则需要您在恢复物理备份后还需要追加后续的binlog文件,可以通过API/控制台获取binlog文件去追加增量数据。
这里有一个非常需要注意的一点是在解压出来物理备份文件后除了数据和索引文件外还有得到如下图中的一些文件。
由于在物理备份上应用binlog是需要记录binlog的pos点的,所有的RDS都是采用主备架构保证高可用性的,为保证主库正常对外提供服务,备份 *** 作是在从库上执行的,但是生成出来的binlog文件却既有可能是主库或者从库上生成(两个binlog文件的pos点是不一致的)。提供给用户的也可能是这里面的任意一份,因此在物理备份文件中给用户提供了两个binlog文件的pos点,如下图:
用户在应用binlog的时候需要两个pos点都测试一下,哪个pos点可以在binlog中找到从这个pos点开始应用binlog。
3、用户想要将RDS上的增量数据同步在自建库的binlog上可以使用DTS的数据订阅功能,可以通过SDK消费增量数据即可再自己应用该数据。
通过触发器可以实现:
create trigger test on 数据库名A表c
insert,delete,update
as
begin
insert into 数据库名B表d select from 数据库名A表c
update
delete
以上就是关于如何实现数据库的同步读写全部的内容,包括:如何实现数据库的同步读写、有2个数据库,怎么实现数据同步、mysql如何实现两个数据库数据结构实时同步等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)