OrientDB - 获得2级网络

时间:2015-02-09 07:51:07

标签: graph orientdb

我正在为一个大型专业社交网络工作,我们开始检查OrientDB是否符合社交图谱方面的要求。目前,我们已经设法部署了一个包含10个节点的集群,设置备份并恢复并将所有数据从MongoDB填充到OrientDB,没有任何重大问题。 我们的数据模型是:

  • 顶点:
    • 配置文件
    • 公司
    • 作业
    • 公开
    • ...
  • 边缘:
    • 关注:一个个人资料可以关注其他个人资料或公司
    • 已应用:一个配置文件可以应用于作业
    • 发布:一个个人资料可以在网络上发布一些出版物
    • ...

我想知道的是:

  1. 如何让所有人在深度为1或2的情况下连接到一个给定的个人资料。我已经尝试了类似SELECT out('Followed').out('Followed') as friend FROM 14:4的内容,其中14:4是个人资料对象。不幸的是,它给了我个人档案以及公司,因为个人资料可以"关注"一家公司。如何过滤才能获取个人资料?我已经尝试了SELECT out('Followed').out('Followed') as friend FROM 14:4 where @class = 'Profile'但是它不起作用:(我应该有多个边缘类(FollowedProfile和FollowedCompany)来简化查询吗?
  2. 当个人资料使用其他社交网络(Facebook,Google,...)创建帐户时,我们会存储他现有的联系人并将其与我们的数据库进行匹配,以便我们可以说"个人资料A已连接到个人资料B谢谢到Facebook"。我应该如何在OrientDB中表示这一点?边缘上的属性或专用边缘类?
  3. 最后一个是:我怎样才能获得两个配置文件之间的最短路径?
  4. 非常感谢。

1 个答案:

答案 0 :(得分:0)

1)您可以尝试使用

SELECT FROM (SELECT expand(out('Followed').out('Followed')) as friend FROM 14:4) Where @class='Profile'

2)我认为边缘的属性(谢谢)更好

3)您可以使用shortestPath函数(http://www.orientechnologies.com/docs/last/orientdb.wiki/SQL-Functions.html):

示例:

select shortestPath(#8:32, #8:10, 'BOTH')