Neo4j 利用图形数据库管理主数据
我正在建立一个主数据库来存储有关我们客户的所有相关信息。我用的是Neo4j 下面是我们的模型示例。我们有Neo4j 利用图形数据库管理主数据,neo4j,graph-databases,master-data-management,Neo4j,Graph Databases,Master Data Management,我正在建立一个主数据库来存储有关我们客户的所有相关信息。我用的是Neo4j 下面是我们的模型示例。我们有个人,可以在我们的3个移动应用程序中注册。(App.01,App.02,App.03-我们使用CPF键,它就像一个SSN)。在这些应用程序中,用户可以通过电子邮件注册。因此,它由电子邮件实体表示。这些用户可以拥有由地址实体表示的多个地址 问题是: 在我构建主数据时,IMO,如果有人查询mdm数据库,询问关于某人的所有“最佳”信息,我会返回,例如: 姓名:约翰 最佳电子邮件:email2(因为
个人
,可以在我们的3个移动应用程序中注册。(App.01
,App.02
,App.03
-我们使用CPF键,它就像一个SSN)。在这些应用程序中,用户可以通过电子邮件注册。因此,它由电子邮件实体表示。这些用户可以拥有由地址实体表示的多个地址
问题是:
在我构建主数据时,IMO,如果有人查询mdm数据库,询问关于某人的所有“最佳”信息,我会返回,例如:
姓名:约翰
最佳电子邮件:email2(因为它有两个应用程序使用它)
最佳地址:addr1(因为它有两个应用程序使用它)
因此,我将构建一些启发式规则来定义什么是“最佳”电子邮件和地址
为此,我有一些选择:
我可以创建一个从John
到email2
和addr1
的边缘。因此,MDM用户很容易从John处获得“最佳”地址/电子邮件
我可以构建一个RESTAPI端点,并在查询时创建这个启发式
有没有人有使用graph数据库或设计MDM数据库的经验?
这是一个好方法吗
这个问题是对这个问题的补充:方法1将添加大量本质上冗余的信息(大约2N个额外的关系,其中N是人数),并且还需要更复杂的编码来处理对个人应用程序的更改。而且,像往常一样,当信息被冗余存储时,您必须特别小心,以免出现不一致的情况。但是,在查询“最佳”联系信息时应该更快
方法2保持数据库大小不变,但需要更复杂、更慢的查询来获取“最佳”联系信息。然而,改变一个人的应用程序和联系方式是很简单的
为了决定使用哪种方法,你应该考虑dB大小是否是个问题,也要考虑你的用例,以及它们的执行频率。
如果DB大小不是问题,这里有一个简单的启发式方法。假设G
是您需要获取某人“最佳”联系信息的频率,M
是您需要修改某人的应用程序或联系信息的频率。如果G/M
的值超过某个阈值,K
,您将选择方法1,您必须在考虑上述因素的情况下做出决定。图形数据模型适合存储主数据,您的主数据很可能以维度的形式与操作和参考数据共存。
如果您决定使用DMD的图形模型,请确保为核心维度MDM提供了定义良好的语义模型,通常:
产品
顾客
雇员
资产
位置
这些核心维度将成为节点的属性
另外,决定您将采用什么样的DMD体系结构风格,一些流行的有:
注册表图非常适合这种风格,因为您的主数据保留在SOS(记录系统)中,并且可以很好地在图中表示引用
主数据中心-将记录系统从表格转换为图形所需的额外转换
主人主人如果您没有太多依赖MDM的遗留应用程序,则此样式非常适合图表中的MDM
如果你可以控制这些应用程序,那么为什么会有不同的电子邮件地址呢?