假设有一个拥有多个SW系统的大型公司,它们都通过REST使用相同的CRM系统。所有系统都有自己的数据库,CRM系统也是如此。
现在,system只以客户ID的形式保存对CRM客户的引用,而不保存其他客户数据。
System A的数据库可容纳10,000名客户,CRM可容纳1,000,000名客户。
系统A需要允许按名称或部分名称搜索客户,并在system中扮演一个角色。如果CRM和system位于同一个数据库中,这将是一个简单的内部连接。但是,由于这两个系统都有单独的数据库,所以这不是一种选择。
选项1将是一个REST服务,它接受10000个客户ID作为输入参数(以及搜索的名称),对自己的数据库执行内部连接,并返回结果集。在我们的例子中,这是不可能的,因为REST服务最多接受100个客户ID,而返回最多300个客户。
备选方案2是CRM系统跟踪系统A中的哪些客户,然后可以将名称搜索限制在这些客户。
备选方案3是系统A在自己的数据库中复制一些CRM数据(名称),但这也有其自身的问题。您如何将CRM中的更改传播到系统A?
还有其他选择吗?我不太熟悉MDM系统将如何处理这个问题。在我看来,在目前的微型服务热潮中,类似的问题更加普遍。
发布于 2020-08-20 09:48:54
如果当前数据布局不支持新的需求,则始终有一个数字如果选项。在你的情况下,哪一个最合适是由你(或你的组织)来决定的。
一般来说,阻力最小的途径似乎是使用可用的API,并绕过它们的局限性。因此,您的系统A可能会查询CRM系统中与某个部分名称匹配的所有客户in (这可能很多,但通常返回大量in比传递一个巨大的in作为参数更容易),然后将这个列表与在A中扮演某种角色的客户列表相交,这可能有效,但可能不是最优的。但是,您将能够在系统A的边界内完全实现该解决方案。
更全面的解决方案可能是为CRM系统创建一个需求(它可能或者根本不可能)存储其他信息,例如每个客户在各种其他系统中的角色。这具有在CRM系统中可查询的优点,并可能支持需要跨系统客户角色信息的附加报告功能。然而,它还要求所有系统将其客户角色信息发布到CRM。
当然,你的第三种选择也应该被考虑,但是它看起来对于所需的额外努力来说收益相对较少,所以在我看来,这是最不吸引人的解决方案。
目前,我正在使用一种实现第二种方法的系统,在我看来,它感觉很自然,很好。然而,在这种情况下,设计是在很久以前实现的,所以没有压力改变架构,只支持一个新的用例。在您的情况下,这可能更难,所以第一个选择实际上可能更好。
发布于 2020-08-22 06:17:17
系统A需要允许按名称或部分名称搜索客户,并在system中扮演一个角色。如果CRM和system位于同一个数据库中,这将是一个简单的内部连接。但是,由于这两个系统都有单独的数据库,所以这不是一种选择。
我对系统A部分的要求有点怀疑。从用户的角度来看,是否真的有一个系统A,系统CRM等等?
如果没有,您的软件的用户真的关心应用程序在后端搜索名称的位置吗?
CRM系统经常存储角色信息和客户信息。因此,也许最简单的解决方案--在CRM中提供角色信息--是最好的解决方案。这样,CRM将提供搜索API。
但是,如果角色信息过于特定于服务A,并且没有真正反映客户在CRM中的角色,我建议如下:
如果您使用第二种方法,您当然必须意识到,有时您可能会搜索过时的数据,这可能是问题,也可能不是问题,这取决于您的业务需求。虽然过时实际上意味着秒数或更少,但这取决于实现。
最后,我会根据您当前的情况,提出我前面描述的两种方法中的一种。因此,发布对CRM的更改,以便服务A可以为搜索功能构建自己的数据投影(例如,角色信息)。如果某些数据(例如角色信息)过于特定于服务A,或者扩展CRM数据,使CRM系统中的一切都可用,并在所搜索的数据/参数符合CRM模型的情况下,通过CRM系统提供搜索功能。
但是,如果您无法在客户关系管理系统中实现更改,您也可以查看未定义模式。这样,您就可以利用数据库的事务日志(通常由大多数现代数据库系统提供),仅通过选择所需的内容来同步后台中的数据更改。这将不需要更改CRM系统的实施或CRM数据库中的任何内容。有些工具还允许在不实现任何自定义代码的情况下设置从一个数据库到另一个数据库的这种同步。例如,您可以结合一些消息流服务(例如Kafka)查看德贝兹。另见https://developers.redhat.com/blog/2020/04/14/capture-database-changes-with-debezium-apache-kafka-connectors/
发布于 2020-08-22 06:32:16
你说需要的是ETL。您需要在两个系统之间保持数据同步,您可以创建一个负责按计划执行的进程。
https://softwareengineering.stackexchange.com/questions/415018
复制相似问题