【问题标题】:Querying details from GraphDB从 GraphDB 查询详细信息
【发布时间】:2021-07-28 04:49:58
【问题描述】:

我们正在尝试在 Graphdb 中实现面向客户的详细信息,通过单个查询,我们可以获取客户的详细信息,例如他的地址、电话、电子邮件等。我们使用有地址构建它,有电子邮件边缘..

g.addV('member').property('id','CU10611972').property('CustomerId', 'CU10611972').property('TIN', 'xxxx').property('EntityType', 'Person').property('pk', 'pk')

g.addV('email').property('id','CU10611972E').property('pk', 'pk')

g.addV('primary').property('id','CU10611972EP').property('EmailPreference','Primary').property('EmailType', 'Home').property('EmailAddress', 'SNEHA@GMAIL.COM').property('pk', 'pk')

g.V('CU10611972').addE('has Email').to(g.V('CU10611972E'))

g.V('CU10611972E').addE('has Primary Email').to(g.V('CU10611972EP')

这就是我们与客户建立电子邮件关系的方式。同样,我们与地址和电话建立关系。所以现在我们正在使用这个命令来获取与该客户相关的 json 用于电子邮件,

g.V('CU10611972').out('has Email').out('has Primary Email')

对于完整的客户详细信息,我们为每个顶点、电话、电子邮件和地址使用联合......

您能否建议是否有一种有效的方法来查询此详细信息?

【问题讨论】:

  • 您决定使用图形对此进行建模是否有原因?它似乎非常适合传统 SQL 建模为具有属性的 Customer 对象。
  • @NoahStahl :是的,基本上我们已经填写了使用 graphdb 的要求,以获得客户的 365 视图。你能帮忙解决一下这种情况吗?
  • 对我来说,这似乎是图形建模的错误应用,使存储您显示的数据过于复杂。无论哪种方式,仍然不清楚您的问题是什么?
  • 编辑了问题以消除不确定性。只需要一种有效的查询方式,例如我们将来可能有备用电子邮件 id。所以任何人都应该能够轻松查询与客户对应的主要和备用电子邮件 id

标签: azure-cosmosdb gremlin tinkerpop azure-cosmosdb-gremlinapi


【解决方案1】:

这实际上归结为两件事。

  1. 通用图数据建模
  2. 您使用的图形数据库支持和不支持的事情。

使用 Gremlin,有几种方法可以为单个顶点的数据建模。

  1. 如果数据库支持,则有一个名称列表,如 ['home','mobile'] 并使用元属性为每个名称附加一个电话号码。
  2. 我知道的许多 Gremlin 实现都选择不支持元属性。在这些情况下,您有几个选择。 (a) 拥有“家庭”属性和“移动”属性。如果其中任何一个都不知道,则您不能创建该属性或给它一个值,例如“未知” (b) 使用前缀字符串,例如 ["Home:123456789","Mobile:123456789] 并将它们存储在集合或列表(多属性)中,并使用 startingWith 谓词在 Gremlin 中访问它们。例如 g.V(id).properties('phone').hasValue(startingWith('Mobile')).value()

【讨论】:

  • 非常感谢您的建议。这很有帮助
猜你喜欢
  • 2022-06-15
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 2019-02-21
相关资源
最近更新 更多