2015-02-09 39 views
0

我正在爲大型專業社交網絡工作,我們正在開始檢查OrientDB是否滿足社交圖譜方面的要求。現在,我們已經成功部署了一個由10個節點組成的集羣,設置備份並將我們從MongoDB到OrientDB的所有數據恢復並填充,而沒有任何重大問題。 我們的數據模型是:OrientDB - 在2級獲取網絡

  • 頂點:
    • 檔案
    • 公司
    • 工作
    • 出版
    • ...
  • 邊緣:
    • 其次:一個配置文件可以按照另一種規範或公司
    • 應用:一個配置文件可以應用到發佈工作
    • :一個配置文件可以發佈網絡上的一些刊物
    • ...

我想知道的是:

  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,...)創建帳戶時,我們正在存儲他現有的聯繫人並將它們與我們的數據庫匹配,所以我們可以說「Profile A通過Facebook連接到Profile B」。我應該如何在OrientDB中表示?邊緣上的屬性還是專用邊緣類?
  3. 最後一個是:我怎樣才能得到兩個配置文件之間的最短路徑

非常感謝

回答

0

1)你可以用

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

2)我覺得一個屬性(感謝)的邊緣嘗試更好

3)你可以用最短路徑功能(http://www.orientechnologies.com/docs/last/orientdb.wiki/SQL-Functions.html):

例子:

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

1 /我測試過這個,但它不起作用:它不返回任何東西:(請參閱http://s8.postimg。org/4o4fy2mxh/Capture_d_cran_2015_02_10_10_19_33.png所以我測試了一個不同邊界類的解決方案:'Connected'。查詢變成'SELECT distinct(value)as slug from(select expan(out('Connected')。out('Connected')。slug)as slugs FROM 14:4)' – Remi 2015-02-10 09:56:45

+1

哼哼......我不得不用(擴展)函數使這個第一個查詢工作:'SELECT distinct(slug)as slug FROM(SELECT expand(out('Followed').out('Followed'))FROM 14:4)where @class ='Profile' ' – Remi 2015-02-10 10:29:11

+0

我添加了擴展功能 – 2015-02-10 19:15:17