Architecture 如何将现场内存/无sql数据源与中央数据库实时同步

Architecture 如何将现场内存/无sql数据源与中央数据库实时同步,architecture,nosql,java-ee-6,in-memory-database,embedded-sql,Architecture,Nosql,Java Ee 6,In Memory Database,Embedded Sql,我有一个有趣的架构问题 我的设想是: 我需要集中目前存储在60个店面内的现场SQL Server 2005数据库中的数据,很快将增加一倍,达到120个店面。在这个集中的位置有一个主要的SQLServer2005数据库。不单纯依赖集中位置的SQL Server 2005 db的理由是,如果WAN连接由于各种原因(天气、物理线路中断、维护等)而中断,店面可以继续使用本地SQL Server 2005 db运行。我说的是关键任务数据 但也出现了许多后勤问题。店面依赖于由内部团队构建的.NET桌面应用程

我有一个有趣的架构问题

我的设想是: 我需要集中目前存储在60个店面内的现场SQL Server 2005数据库中的数据,很快将增加一倍,达到120个店面。在这个集中的位置有一个主要的SQLServer2005数据库。不单纯依赖集中位置的SQL Server 2005 db的理由是,如果WAN连接由于各种原因(天气、物理线路中断、维护等)而中断,店面可以继续使用本地SQL Server 2005 db运行。我说的是关键任务数据

但也出现了许多后勤问题。店面依赖于由内部团队构建的.NET桌面应用程序。该团队利用SQL Server从本地数据库复制到集中式数据库。安装此内部软件的新版本并在60多个位置执行每个软件安装的相关SQL Server脚本需要大量的繁重工作才能完成这些安装(冗长的安装清单、登录现场服务器远程桌面、登录现场工作站以验证员工是否没有让任何桌面应用程序运行等)。这种效率极低的繁重工作大多在周末完成,由6-7人组成的团队完成,他们没有加班费。我来自一个不同的内部团队,该团队实现了Java EE 6、Java SE 7和JavaFX,但我知道他们的痛苦,因为我曾经在这个团队中。我认为有一个更简单的解决方案。没有将整个.NET应用程序体系结构转换为实现客户端应用程序的JavaEE6体系结构

我的想法是: 实现嵌入式/无SQL本地数据库,该数据库与集中式RDBMS Oracle数据库保持实时同步(我们公司使用Oracle 10g/11g或SQL Server 2005+)。如果我们的广域网出现故障,店面可以继续使用本地嵌入式/无SQL数据库无缝运行。一旦重新建立连接,嵌入式/无SQL数据库将其状态保留到集中数据库,并恢复实时同步。我希望连接转换对用户来说是无缝的。我是bi像JPA2这样的技术的粉丝,在连接被切断后,它只需重新连接


因为我们正在考虑切换到基于java的EE6解决方案,我想考虑所有可以使用WebSphere V8.0.x的技术,并且是开源的。我不想处理商业许可证。这意味着考虑所有的选项,如没有SQL数据库,在MimROY DB的,Lucene,Apache JavaBug,CORBA/IIOP,JMS,EJB 3.1,CDI 1,JSF MyFACES 2.0.4,JPA 2、JAX-RS和桌面客户端可能由JavaFX提供支持。唯一剩下的问题是,什么可以将数据持久化到嵌入式/非SQL数据库,然后将数据实时同步到一个集中的数据源,以便店面可以保持运行?

我喜欢.NET,因此我会努力使SQL Server复制解决方案n工作,但如果失败了

这里有两个NoSQL解决方案,我将考虑复制:

CouchDB

他们有相当好的复制,当连接丢失时,它将恢复到中断的位置。如果你来自RDBMS背景,则有一个学习曲线,但它可以工作

MongoDB

您可以使用Mongo的副本集,该副本集与中心(主)节点同步。当副本集中的辅助节点脱机时,您可以将它们带回来,并从中断的位置重新开始

问题是,如果主节点获得大量写操作,它可能无法与已停机很长时间的辅助节点再次同步。它基本上会记住主/中心节点上的所有写操作,并最终清除较旧的写操作

一般建议

Mongo和Coach都是文档数据库。如果您想使用NoSQL,您需要将所有代码切换到非规范化结构,而不是规范化结构,这可能是您在关系世界中已经习惯的

这是一个很大的转变,我知道在文档数据库世界中,我很难确定我感觉良好的模型


一般来说,就移动数据而言,我发现了Mule()非常擅长连接不同类型的系统/数据库。

这是一个很长的问题。真正的问题是如何在NoSQL数据库和SQL Server之间同步数据?或多或少?是的,这是一个很长的问题。我只是试图准确描述场景。真正的问题是我不知道正确的架构师这个问题的解决方案。如果在非sql数据库和RDBMS之间进行实时数据同步是合适的解决方案,那么,是的,我可以使用一个通用指针来说明如何完成该任务。谢谢!Errr那么我对这个问题的假设正确吗?=)我不认为按Enter键会导致我的评论被发布。你比我的编辑快了22秒Ryan,非常感谢。我倾向于将CouchDB作为更好的解决方案。