1

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

我的场景是这样的:我需要将当前存储在 60 个店面中的现场 SQL Server 2005 数据库中的数据集中起来,很快就会翻一番,达到 120 个店面。在这个集中位置有一个主要的 SQL Server 2005 数据库。不单纯依靠集中位置的 SQL Server 2005 db 的原因是,如果由于各种原因(天气、物理线路切断、维护等)切断了 WAN 连接,店面可以继续使用本地 SQL Server 2005 数据库。我说的是关键任务数据。

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

我的想法是:实现一个嵌入式/无 SQL 本地数据库,它与集中式 RDBMS Oracle 数据库保持实时同步(我们公司使用 Oracle 10g/11g 或 SQL Server 2005+)。如果我们的 WAN 出现故障,店面可以继续使用本地嵌入式/No-SQL 数据库无缝运行。重新建立连接后,嵌入式/No-SQL 数据库将其状态持久化到集中式数据库并恢复实时同步。我希望连接转换对用户来说是无缝的。我是 JPA 2 等技术的忠实拥护者,它只是在连接断开后重新连接。

由于我们正在考虑切换到基于 Java EE6 的解决方案,因此我想考虑所有可以与 WebSphere v8.0.x 一起使用并且是开源的技术。我不想处理商业许可证。这意味着考虑所有选项,如 No-SQL 数据库、内存数据库、Lucene、Apache Jackrabbit、Corba/IIOP、JMS、EJB 3.1、CDI 1.0、JSF MyFaces 2.0.4、JPA 2、JAX-RS 和桌面客户端由 JavaFX 提供支持。剩下的唯一问题是什么可以将数据持久化到嵌入式/No-SQL 数据库,然后将该数据实时同步到集中式数据源,以便店面可以保持运营?

4

1 回答 1

2

我喜欢 .NET,所以我会努力让 SQL Server 复制解决方案正常工作,但失败了......

以下是我会考虑用于复制的两个 NoSQL 解决方案:

沙发数据库

http://couchdb.apache.org/

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

MongoDB

http://www.mongodb.org/

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

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

一般建议

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

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

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

于 2013-01-30T23:52:54.907 回答