用于维护多个系统的数据一致性/同步的可用选项

时间:2012-11-19 20:43:30

标签: c# .net web-services design-patterns

我的问题是,在大多数公司中,最好的,经过试验和测试的(以及新的?)方法在哪些方面做了相当普遍的要求。 每家公司都有客户。并且假设公司A有大约10个不同的系统来满足其业务需求。客户对所有系统都至关重要。 客户可以独立维护在任何系统中,但如果它们不同步,那么它就不好了。我知道保留一个大的主要地点/系统用于客户记录并让所有其他系统从该单个位置/系统获取该信息是理想的。 你如何构建这样的东西.. SOA? ETL的?网络服务?等等......那里的任何其他想法都是新的...而且不要忘记旧的方法。 我们是一家MS / .NET商店。这主要是为了我的知识和学习..请指出我正确的方向,我想知道我的所有选择。

2 个答案:

答案 0 :(得分:1)

理想情况下,所有不同的系统都将共享同一个数据库,在这种情况下,该数据库将成为主数据库。然而,情况几乎从未如此。

所以我见过的最常见的方法是拥有另一个系统(让我们称之为数据仓库),它从10个不同的系统中获取信息,将它们聚合在一起,形成客户的“主”视图。

答案 1 :(得分:1)

我没有做过这样的事情,但在这里玩这个想法是我的想法。也许某些事情会有所帮助。

这是一个棘手的问题,我说它主要取决于您在10个系统中可用的开发能力和接口。您可能需要一个数据仓库管理器软件,就像我的下一段所说的那样,它涉及10个系统中所有不同类型接口的各种插件。

从数据仓库的想法中思考:理想情况下,每个系统中的每个客户都有一个LastModified字段,尽管这可能不太可能。因此,您几乎需要从每个源序列化客户记录,并在程序上次更新该记录时将其存储在数据仓库数据库中。这个想法将允许您在10个系统中的任何一个系统中更改任何内容时更准确地知道哪个记录是最新的,并基于此更新字段。如果您没有开发某些系统,只能从界面的某种方式读取,那么这是您可以做的最好的事情。

如果您正在开发所有系统,那么我想象WCF接口(我提到WCF,因为它们有比一般的webservices更多的连接选项)来将更新传播到所有其他系统(可能通过主集线器应用程序)是最简单的选择。传递新值及更新日期,可以是保存按钮上的事件,也可以是每小时/每天检查LastModified字段。

另一个困难是如果一个Customer对象有一个Address字段而另一个没有Address字段会发生什么情况,那两个之间的更新是否会在任何情况下相互覆盖?或者,如果其中一个人有CustomerName而另一个人有CustomerFirstnameCustomerLastname

NoSQL关于可变数据结构的想法以及将缓存值标记为脏的能力也有些浮现在脑海中,不确定这些概念实际上会增加多少好处。

相关问题