我正在寻找一些起点,将Win32 Delphi应用程序的数据与Web应用程序的远程数据库集成在一起.
该项目打算解决的问题:
1)桌面在vpns上表现不佳.远程办公室的用户可以使用Web应用程序.
2)一些公司更喜欢网络应用程序到桌面应用程序
3)移动设备可以将Web应用程序作为前端.
我发现的问题:
Web应用程序将在基于Unix的系统上运行,可能是Linux,而桌面应用程序使用NexusDB,而Web应用程序可能是Postgres.不同的平台和数据库.
使用Delphi,似乎Microsoft Sync Framework不适用于此项目.
我的第一个想法是为Web应用程序提供标准REST API,让桌面应用程序点击API,就像它是一个客户端,每隔n分钟从本地数据库服务器.我已经看到了很多问题!
站点 A 将生成一组记录。他们每晚都会备份数据库并将其 ftp 到站点 B。站点 B 根本不会修改这些记录,但会添加更多记录,并且其他表将为站点 A 的记录创建 FK。
因此,本质上,我需要设置一个系统来从站点 A 的转储中获取所有增量更改(主要是插入和更新,但也可能进行一些删除)并将它们应用到站点 B。
此时,我们正在使用 Postgres 8.3,但如果有价值的话可以升级。
我相信我可以用Bucardo相对直接地做到这一点,但在我设置 Linux 盒子来测试它之前,我很想听到替代方案(或 Bucardo 的确认)。
我在其上创建了物化视图日志表:
create table T1(A number primary key);
create materialized view log on T1 with primary key;
Run Code Online (Sandbox Code Playgroud)
Oracle还为物化视图日志创建了两个表:
select TABLE_NAME from USER_TABLES
|T1 |
|MLOG$_T1 |
|RUPD$_T1 |
Run Code Online (Sandbox Code Playgroud)
如何确定该RUPD$_T1表是一个包含mview日志的表T1?
我可以确定这个MLOG$_T1:
select MASTER, LOG_TABLE from USER_MVIEW_LOGS
|T1 |MLOG$_T1 |
Run Code Online (Sandbox Code Playgroud)
但是在哪里可以找到对该表的引用RUPD$_T1?
我有一个mongodb副本集,我想从中读取主数据库和辅助数据库中的数据.
我用这个命令连接到db:
mongoose.connect('mongodb://user:password@54.230.1.1,user:password@54.230.1.2,user:password@54.230.1.3/PanPanDB?replicaSet=rs0&readPreference=nearest');
它不起作用..我的申请继续从初级读取..有任何建议吗?
我使用PouchDB离线存储数据,并在应用程序上线时与远程CouchDB数据库同步.如果应用程序在线启动,它可以正常工作:PouchDB pause在连接中断时触发事件,并在连接恢复时继续.这是一个示例代码:
localDB.replicate.to(remoteDB, {
live: true,
retry: true
}).on('paused', function (info) {
// replication was paused, usually because of a lost connection
}).on('change', function (change) {
// yo, something changed!
}).on('active', function (info) {
// replication was resumed
}).on('error', function (err) {
console.log(err);
// totally unhandled error (shouldn't happen)
})
Run Code Online (Sandbox Code Playgroud)
但是当脱机启动应用程序时,会遇到错误(Failed to load resource: net::ERR_ADDRESS_UNREACHABLE)
无法访问远程数据库,PouchDB触发error事件("Database encountered an unknown error"状态500).即使连接回来,复制也行不通.
问题:
即使应用程序是脱机启动的,也有办法使复制工作(例如,pause即使没有访问远程数据库,事件也会先发生)?
更新: 感谢nlawson的回答!我只需要在函数中添加远程数据库创建以使其工作:
function retryReplication() {
var remoteDB = new …Run Code Online (Sandbox Code Playgroud) 我有两台机器,每台机器托管一个mongo实例.
我需要它们作为副本集一起工作.
我使用Ansible进行配置.
我怎样才能做到这一点?
mongodb database-replication ansible replicaset ansible-playbook
我是Cassandra的新手,虽然这篇文章解释了分片和复制,但我陷入了困境 -
我有一个群集,在我的本地计算机上配置了6个Cassandra节点.我创建了一个新的键空间"TestKeySpace",复制因子为6,键空间为"employee",主键为自动增量号,命名为RID.我无法理解如何对这些数据进行分区和复制.我想知道的是,因为我将复制因子保持为6,并且数据将分布在多个节点上,那么每个节点是否将具有与其他节点完全相同的数据?
如果我的群集具有以下配置:
Number of nodes - 6 (n1, n2 ,n3, n4, n5 and n6).
replication_factor - 3.
Run Code Online (Sandbox Code Playgroud)
如何确定任何一个节点(比如n1),其他两个节点复制数据以及哪些其他节点表现为不同的分片.
提前致谢.
此致,Vibhav
PS - 如果有人投票,这个问题请在评论中提到错误.
有没有办法测量PostgreSQL 中的逻辑复制延迟?
我将 Postgres 数据库与复制一起使用。
我在 postgres 函数中使用了临时表。我无法在通过加入更新临时表时更新它。
下面是 Postgres 查询(tempallergyupdates是临时表):
drop table if exists tempallergyupdates;
create temp table tempallergyupdates(patientallergyid int,updateid int, newupdateid int);
update tempallergyupdates set patientallergyid = 1;
Run Code Online (Sandbox Code Playgroud)
上面的查询抛出以下异常:
无法更新表“tempallergyupdates”,因为它没有副本标识并发布更新
避免terminating connection due to conflict with recovery错误,也有可接受的replication lag。
Google Cloud PostgreSQL 9.6,复制开启(使用流式复制),PGPool-II 设置为只做负载均衡并且在从属设备上具有以下属性:
work_mem 3276800
commit_delay 100
max_wal_size 940
max_standby_archive_delay -1
max_standby_streaming_delay -1
hot_standby_feedback on
Run Code Online (Sandbox Code Playgroud)
机器配置:
vCPU:8,内存:30 GB,SSD 存储:76 GB
工作量:
Master满载writes和reads,slave也满载了很多reads。查询的最大长度可能约为8-10秒。
我们之前尝试过的:
设置max_standby_archive_delay和max_standby_streaming_delay对900000(900秒),但是我们看到了很多的conflict错误。
设置max_standby_archive_delay和max_standby_streaming_delay到-1,这使冲突错误消失,但是滞后增加了很多(在某处23mins)
设置max_standby_archive_delay和max_standby_streaming_delay到-1和hot_standby_feedback 到on。这也使冲突错误消失了,但是我们仍然看到复制滞后(大约500 secs …