【问题标题】:Should I use the RDB for this similarity case对于这种相似情况,我应该使用 RDB
【发布时间】:2020-02-09 13:06:55
【问题描述】:

我的用例有 6000 家商店,每家商店都有自己的产品要销售。我想找到一家指定商店在其销售的产品方面最相似的商店。

我来自 RDB 世界。在RDB中似乎并不容易做到这一点。但是对于图形数据库,我也不清楚如何实现它,因为商店之间没有链接。我检查了亲密度: http://tinkerpop.apache.org/docs/current/recipes/#closeness-centrality

基本上,我的问题是:

  • 如何为图形建模?我应该只创建未链接的顶点来代表商店还是创建顶点来代表产品?
  • 如果可能的话,我应该使用什么配方来存档?我认为它应该是直截了当的。

提前致谢!

【问题讨论】:

  • 您是打算将所有 6000 个存储的数据存储在单个主机上的单个数据库中,还是希望将数据存储在跨多个主机(即每个存储)的分布式数据库中在本地托管数据还是将数据存储在区域数据中心?
  • 将在单个数据库中用于分析目的

标签: neo4j graph-databases gremlin tinkerpop janusgraph


【解决方案1】:

由于关系的力量,您的用例使用图形数据库非常容易且高效地处理。

假设您使用neo4j,并且有Store 和Product 节点通过OFFERS 关系连接。每个不同的产品都有一个Product 节点,多个Stores 可以连接到同一个Product 节点。以下是单个关系的示例:

(:Store {id: 1234, name: 'My Store'})-[:OFFERS]->(:Product {id: 9999, name: "Fido Treats"})

要查找与“我的商店”相同产品最多的商店,您可以使用aggregating functionCOUNT 统计共享产品数量,ORDER BY 以降序排序,@987654331 @ 选择计数最高的结果:

MATCH (s:Store)-[:OFFERS]->(p:Product)<-[:OFFERS]-(other:Store)
WHERE s.id = 1234
RETURN s, other, COUNT(p) AS commonCount
ORDER BY commonCount DESC
LIMIT 1

【讨论】:

    【解决方案2】:

    您可以找到许多由 Neo4j 社区here 开发的示例推荐系统。这将为您提供有关模型方法以及随附查询的一些想法。

    你可能也对Neo4j Graph Algorithms感兴趣,它具有接近中心性、相似性等功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2011-01-17
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多