首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Neo4j构建主数据管理

使用Neo4j构建主数据管理
EN

Stack Overflow用户
提问于 2015-12-06 17:31:42
回答 1查看 537关注 0票数 2

我正在尝试使用Neo4j来构建一个MDM。我只是尝试用电子邮件、documentNumber、地址、电话、手机等属性来模拟我们的客户数据库。

问题是我们的数据库太脏了。例如,我的用户具有相同的documentNumber (类似于ssn)。当我查看这些注册表时,我可以看到它们实际上是同一个人。

为了通过关系发现模式,我需要删除/清理记录。但是我害怕当我破坏记录的时候失去信息。

第一方法:

代码语言:javascript
运行
复制
<customer>
    <name>Maria da Silva</name>
    <document>108518037-92</document>
    <phone>
        <areaCode>21</areaCode>
        <number>2247223A<number>
    <phone>
</customer>

<customer>
    <name>Maria da S.</name>
    <document>10851803792</document>
    <phone>
        <areaCode>21</areaCode>
        <number>2247-2236<number>
    <phone>
</customer>

这样我就可以存储图表:(使用“密码”语言)

代码语言:javascript
运行
复制
person1:Person {name:"Maria da Silva", document:"108518037-92"}
phone1:Phone {areaCode:"21", number:"2247223A"}
person1-[owns]->phone1

person2:Person {name:"Maria da S", document:"10851803792"}
phone2:Phone {areaCode:"21", number:"2247-2236"}
person2-[owns]->phone2

然后,我可以创建一个规范化/清理的节点:

代码语言:javascript
运行
复制
person_mdm:PersonMdm {name:"MARIA DA SILVA", document:"10851803792"} // now i have to choose a name
phone_mdm:PhoneMdm {areaCode:"21", number:"22472236"} // and choose a phone too

然后将原始节点链接到规范化节点:

代码语言:javascript
运行
复制
person_mdm-[references]->person1
person_mdm-[references]->person2

phone_mdm-[references]->phone1
phone_mdm-[references]->phone2
person_mdm-[owns]->phone_mdm

第二次逼近

使用包含散列的属性列表存储mdm节点。这些散列引用其他数据库中的记录(例如MongoDB):

代码语言:javascript
运行
复制
person_mdm:PersonMdm {name:"MARIA DA SILVA", document:"10851803792", hash:[XXX, YYY]}
phone_mdm:PhoneMdm {areaCode:"21", number:"22472236", hash: [ZZZ, KKK]} 
person_mdm-[owns]->phone_mdm

第一方法:

(+)比较第二种方法的简单性

(+)我将在一个数据库中拥有所有节点

(-)节点爆炸数目

(-)查询更复杂

第二种方法:

(+)它是干净和简单的查询

(-) MDM信息存储在两个不同的数据库中(维护)

(-)必须维护两个单独的数据库

EN

回答 1

Stack Overflow用户

发布于 2015-12-08 08:02:24

我们通常采用第一种方法。与…有关的东西

代码语言:javascript
运行
复制
person1:Person {name:"Maria da Silva", document:"108518037-92"}
phone1:Phone {areaCode:"21", number:"2247223A"}
person1-[:OWNS]->phone1

person2:Person {name:"Maria da S", document:"10851803792"}
phone2:Phone {areaCode:"21", number:"2247-2236"}
person2-[:OWNS]->phone2

person1-[:SAME_AS]->person2

只要您没有数十亿节点,我就不会担心节点的数量。Neo4j可以处理很多节点,因为它们占用的空间非常小。

当然,查询会变得更复杂一些。但是另一方面,您必须在某个地方进行清理/去复制,并且在查询时这样做可以确保您不会丢失任何原始信息。它还为您提供了更改/进化去复制逻辑的灵活性,甚至为每个用例提供了不同的逻辑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34120436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档