我正在推薦引擎。收集用戶數據(他們的友誼,地點,喜歡,教育......),並已存儲在mongodb中。我需要向這些用戶推薦相關產品。我計劃將neo4j用於推薦引擎,原因很明顯(節點之間的遍歷方便,路徑信息等)。問題是我必須首先將mongodb數據轉換爲neo4j節點/關係,處理數據並將結果發送回mongodb數據庫。主要的問題是我們最終會維護兩個數據庫,開發團隊不會感到滿意。我已經看過類似的帖子mongodb-neo4j和spring data,但不知道如何解決這個問題。 這些是我的問題
1-爲了推薦引擎(我們正在處理大型網絡),添加另一個數據庫是否值得,儘管neo4j非常適合這樣的任務。
2-我使用cypher進行查詢,對java,rest API和spring數據知之甚少。我應該使用什麼類型的mongodb-neo4j通信API?我目前的解決方案是使用R並將其用作連接到mongodb和neo4j的平臺。
3-其他圖形數據庫如何,是否有適合與Mongo集成的圖形數據庫?將mongodb與neo4j集成,是否有任何API將鏈接它們?
回答
我發現兩種方法結合的MongoDB和Neo4j的。第一個是由ryan1234使用Gremlin和Gmongo一起提出的。的步驟爲根據本優良blog
1-下載Gmongo和Java mongo driver
2-拷貝兩個jar文件的Neo4j/lib目錄
3-這是一個例子下以下。假設我們在MongoDB中有這個集合(稱爲跟隨)
{ "_id" : ObjectId("4ff74c4ae4b01be7d54cb2d3"), "followed" : "1", "followedBy" : "3", "createdAt" : ISODate("2013-01-01T20:36:26.804Z") }
{ "_id" : ObjectId("4ff74c58e4b01be7d54cb2d4"), "followed" : "2", "followedBy" : "3", "createdAt" : ISODate("2013-01-15T20:36:40.211Z") }
{ "_id" : ObjectId("4ff74d13e4b01be7d54cb2dd"), "followed" : "1", "followedBy" : "2", "createdAt" : ISODate("2013-01-07T20:39:47.283Z") }
從Neo4j中的Gremlin shell運行以下命令。
import com.gmongo.GMongo
mongo = new GMongo()
db = mongo.getDB("local")
db.follows.findOne().followed
x=[] as Set; db.follows.find().each{x.add(it.followed); x.add(it.followedBy)}
x.each{g.addVertex(it)}
db.follows.find().each{g.addEdge(g.v(it.followedBy),g.v(it.followed),'follows',[followsTime:it.createdAt.getTime()])}
,就是這樣我們已經創建的Neo4j相當於圖
https://github.com/tinkerpop/gremlin/wiki
小鬼!
專門設計用於Neo4j /圖形數據庫。您也可以輕鬆下載GMongo並連接到Mongo。
退房在這篇文章中介紹瞭如何使用多種語言的數據交互小鬼:
http://thinkaurelius.com/2013/02/04/polyglot-persistence-and-query-with-gremlin/
@ ryn,在你看來,是否有任何其他圖形數據庫更容易鏈接到mongo或neo4j是一個不錯的選擇?感謝您的評論,我會研究它。 – user1848018 2013-03-18 21:32:55
我所知道的沒有任何東西會直接與Mongo集成。泰坦是Neo4j的替代品。 http://thinkaurelius.github.com/titan/如果您使用Gremlin,則不會直接將圖形數據庫連接到Mongo。相反,您將數據帶回到運行Gremlin的客戶端,然後在那裏處理數據。 Gremlin有一些本應該使圖遍歷更容易的語法。 – ryan1234 2013-03-18 23:06:16
,如果我們要使用R.下列R-代碼,將MongoDB中獲取數據有另一種解決方案
library(RMongo)
library('bitops')
library('RCurl')
library('RJSONIO')
mg <- mongoDbConnect("local", "127.0.0.1", 27017)
mongoData <- dbGetQuery(mg, 'follows',"{}")
其結果將是如下
followed followedBy createdAt
1 1 3 Tue Jan 01 15:36:26 EST 2013
2 2 3 Tue Jan 15 15:36:40 EST 2013
3 1 2 Mon Jan 07 15:39:47 EST 2013
下述R代碼將CONNEC t到Neo4j並創建圖表。它是有效的,但它的工作原理
query <- function(querystring) {
h = basicTextGatherer()
curlPerform(url="http://localhost:7474/db/data/ext/CypherPlugin/graphdb/execute_query",
postfields=paste('query',curlEscape(querystring), sep='='),
writefunction = h$update,
verbose = TRUE
)
result <- fromJSON(h$value())
data <- data.frame(t(sapply(result$data, unlist)))
names(data) <- result$columns
data
}
nodes<-unique(c(mongoData$followed,mongoData$followedBy))
nodes=paste("_",nodes,sep="")
nodes<-paste(paste("(",nodes,collapse="),"),")")
edges<-apply(mongoData[,3:2],1,function(x) paste("_",x,sep="",collapse="-[:follows]->"))
edges<-paste(edges,collapse=",")
cmd<-paste(nodes,edges,sep=",")
cmd=paste("create",cmd)
query(cmd)
你看看Reco4j?它使用neo4j作爲底層圖形數據庫。他們已經實施了幾個算法作爲項目的一部分。這裏是鏈接reco4j。該鏈接目前不可用,但我在訪問該網站時發現了這些功能。
爲了一起使用MongoDB和Neo4j,現在有Neo4j Doc Manager項目,它會自動將數據從MongoDB同步到Neo4j,將文檔轉換爲屬性圖結構。
- 1. 是否有任何API來集成FEDEX?
- 2. 是否可以將諾基亞連接API與asp.net集成?
- 3. 將MongoDB與elasticsearch集成macOSX
- 4. 如何將wicket框架與mongoDB集成?
- 5. 如何將MongoDB與Solr集成?
- 6. 將neo4j與澤西島和tomcat集成
- 7. 將Bluesnap API與Salesforce集成
- 8. 將php與bigcommerce api集成
- 9. 是否有任何工具可以將MS SQL Server Reporting與Ruby集成?
- 10. 是否可以將html與asp.net集成?
- 11. 是否可以將SVN與OpenERP集成?
- 12. 是否可以將Nodejs與CakePHp集成?
- 13. 我們何時需要將WSO2 API Manager與WSO2 G-registry集成?
- 14. 如何將ticketmaster api/sdk與yii2集成?
- 15. 如何將angularjs與asp.net web api集成
- 16. 如何將YELP API與iphone集成?
- 17. 如何將MYOB API與Magic XPA集成?
- 18. 如何將Rails 3與sendgrid API集成
- 19. 如何將網站與Flickr API集成
- 20. 如何將Paypal與SOAP API集成?
- 21. 是否有任何現有GWT與sharethis或addthis集成?
- 22. 鏈接的API集成
- 23. MongoDB是否有符號鏈接?
- 24. 是否有任何方法可以將mongodb avg聚合到meteorJS?
- 25. 是否有任何與Rails模型集成的ETL工具?
- 26. 是否有任何與Spring集成的Java PDF庫?
- 27. 將Dwolla與PHP以及他們的API集成在一起
- 28. 有了jQuery,是否有可能讓它檢測到某個鏈接類,並將它們全部打開?
- 29. 是否有任何可以與github/bitbucket鏈接的CMS /工具?
- 30. Mongodb鏈接集合
在你的代碼片段中,鏈接到neo4j的行實際上是缺失的,但是你使用了引用,加上'db.follows.findOne()。後面的'可以省略。 所以要得到這個片段的工作,你可以替換第4行 'g = new Neo4jGraph('/ tmp/neo4j')' – 2014-07-24 13:03:04