我的问题是什么最好的,经过尝试和测试的(和新的?)方法可以在大多数公司中完成相当普遍的要求。每个公司都有客户。假设公司 A 有大约 10 个不同的系统来满足其业务需求。客户对所有系统都至关重要。客户可以在任何系统中独立维护,但如果它们不同步,那就不好了。我知道为客户记录保留一个大型主位置/系统并让所有其他系统从该单个位置/系统获取该信息是理想的。你如何构建这样的东西...... SOA?ETL?网络服务?等等……任何其他的新想法……不要忘记旧方法。我们是一家 MS / .NET 商店。这主要是为了我的知识和学习..请指出我正确的方向,我想知道我所有的选择。
2 回答
理想情况下,您所有不同的系统都将共享同一个数据库,在这种情况下,该数据库将是主数据库。然而,几乎从来都不是这样。
所以我见过的最常见的方法是拥有另一个系统(我们称之为数据仓库),它从你的 10 个不同系统中获取信息,将它们聚合在一起,并形成一个客户的“主”视图。
我没有做过这样的事情,但在这里玩这个想法是我的想法。也许有些东西会有所帮助。
这是一个很难的问题,我想说这主要取决于你在这 10 个系统中的每个系统中都有哪些开发能力和接口。您可能需要一个数据仓库管理器软件,就像我下一段所说的那样,为所涉及的 10 个系统中的所有不同类型的接口提供各种插件。
从数据仓库的想法来看:理想情况下,每个系统中的每个客户都有一个LastModified
字段,尽管这可能不太可能。因此,您几乎需要序列化来自每个来源的 Customer 记录,将其与程序最后一次更新该记录的时间一起存储在您的数据仓库数据库中。这个想法可以让您在 10 个系统中的任何一个发生任何变化时准确地知道什么记录是最新的,并基于此更新字段。如果您不开发某些系统,只能从某种形式的界面中读取,这大概是您能做的最好的事情。
如果您正在开发所有系统,那么我想 WCF 接口(我提到 WCF,因为它们通常比 Web 服务具有更多的连接选项)将更新传播到所有其他系统(可能通过主集线器应用程序)可能是最简单的选项。通过保存按钮上的事件或LastModified
每小时/每天检查一个字段,传入新值和更新日期。
另一个困难是,如果一个 Customer 对象具有 Address 字段而另一个没有,会发生什么情况,这两个对象之间的更新是否会在任何情况下相互覆盖?或者如果一个人有一个CustomerName
,另一个人有CustomerFirstname
并且CustomerLastname
可变数据结构的 NoSQL 想法和将缓存值标记为脏的能力也有点浮现在脑海中,但不确定这些概念会真正增加多少好处。