首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将现场内存中/无sql的数据源与中央数据库实时同步

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

Stack Overflow用户
提问于 2013-01-31 02:29:00
回答 1查看 1.4K关注 0票数 1

我有一个有趣的架构问题。

我的方案是:我需要将当前存储在60个店面内的现场SQL Server 2005数据库中的数据集中起来,很快就会增加一倍,达到120个店面。在此集中位置有一个主SQL Server 2005数据库。不简单地依赖集中位置的SQL Server 2005数据库的理由是,如果由于各种原因(天气、物理线路中断、维护等)导致WAN连接中断,店面可以使用本地SQL Server 2005数据库继续运行。

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

我的想法是:实现一个与集中式RDBMS Oracle数据库保持实时同步的嵌入式/非SQL本地数据库(我们公司使用Oracle10g/11g或SQL Server 2005+)。如果我们的WAN出现故障,店面可以使用本地embedded/No-SQL数据库继续无缝运行。重新建立连接后,embedded/No-SQL数据库将其状态持久保存到集中式数据库,并恢复实时同步。我希望连接转换对用户来说看起来是无缝的。我是像JPA2这样的技术的铁杆粉丝,它可以在连接中断后简单地重新连接。

因为我们正在考虑切换到基于JavaEE6的解决方案,所以我想考虑所有可以与WebSphere v8.0.x一起工作并且是开源的技术。我不想和商业许可证打交道。这意味着要考虑所有选项,如No-SQL、内存数据库、Lucene、Apache Jackrabbit、Corba/IIOP、JMS、EJB3.1、CDI1.0、JAX 2.0.4、JPA2、JAX-RS,以及可能由JavaFX支持的桌面客户端。剩下的唯一问题是,什么可以将数据持久化到嵌入式/No-SQL数据库,然后将数据实时同步到集中式数据源,以便商店可以保持运营?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-31 07:52:55

我喜欢.NET,所以我会努力使SQL Server复制解决方案工作,但如果做不到……

这里有两个我会考虑用于复制的NoSQL解决方案:

CouchDB

http://couchdb.apache.org/

它们有非常好的复制,当连接丢失时,它会从中断的地方恢复。如果您来自RDBMS背景,则会有一个学习曲线,但它是可以工作的。

MongoDB

http://www.mongodb.org/

您可以在Mongo中使用与中心(主要)节点同步的副本集。当副本集中的辅助节点离线时,您可以将它们带回并从您离开的地方继续。

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

常规建议

Mongo和Couch都是文档数据库。如果您希望迁移到NoSQL,则需要将所有代码切换到非规范化结构,而不是规范化结构,这可能是您在关系世界中所习惯的。

这是一个很大的转变,我知道我在文档数据库世界中遇到了让我感觉良好的模型问题。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14611143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档