Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚSpark Graphx+Neo4jʵÏÖÓû§ÉçȺ·¢ÏÖ
 
×÷Õߣº ´óÊý¾Ý¼¼Êõ½ø½×
  2944  次浏览      28
 2019-10-25 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËÀûÓÃSpark GraphxʵÏÖÁËÒ»¸ö¼òµ¥µÄÁ¬Í¨Í¼ÉçȺ·¢ÏÖʾÀý£¬²¢½«ÉçȺ´æÈ뵽ͼÊý¾Ý¿âNeo4jÖУ¬Í¬Ê±½øÒ»²½½éÉÜÁËNeo4jµÄһЩ¸ÅÄîºÍʹÓã¬×îºóÓÃNeo4jÑÝʾÁËÒ»¸öÉç½»ÍøÂçµÄͼ¼ìË÷ʾÀý¡£
±¾ÎÄÀ´×ÔÓÚ΢ÐÅ£¬ÓÉ»ðÁú¹ûÈí¼þç÷ç÷±à¼­¡¢ÍƼö¡£

ÖйúÓоäÀÏ»°£¬½ÐÎïÒÔÀà¾Û£¬ÈËÒÔȺ·Ö£¬ÔÚ·´×÷±×ºÍÊг¡ÓªÏúµÈÓ¦ÓÃÖУ¬Èç¹ûÎÒÃÇÄܸù¾ÝÓû§¼äµÄijЩÁªÏµ·¢ÏÖÉçȺ£¬È»ºó¶ÔÕâЩÉçȺ½øÐз´×÷±×·ÖÎö»òÉÌÆ·ÍƼö£¬ÍùÍù»áÆðµ½ÒâÏë²»µ½µÄЧ¹û¡£

±¾ÎľÍÀ´½éÉÜÒ»¸ö¼òµ¥µÄÉçȺ·¢ÏÖµÄʵ¼ù¡£¹¹½¨ÉçȺÎÒÃÇÊ×ÏÈÐèÒªÕÒµ½ÉçȺÓû§µÄijÖÖÁªÏµ£¬ÉÏÎÄÌáµ½µÄÊÕͽģʽ±¾Éí¾ÍÊÇÓû§¼äµÄÒ»¸öÌìÈ»ÁªÏµ£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÓû§µÄʦͽ¹ØÏµÀ´¹¹½¨ÉçȺ¡£ÈçÏÂͼËùʾ£¬¸ù¾Ýʦͽ¹ØÏµÎÒÃǹ¹½¨ÁËÒ»¸öÉçȺ£¬µã±íʾÓû§£¬±ß±íʾʦͽ¹ØÏµ¡£

ÓÐÁËÕâÑùµÄÉçȺ֮ºó£¬ÎÒÃǾͿÉÒÔ»ùÓÚÉçȺά¶È·ÖÎöÉ豸¼°Óû§ÐÐΪµÄÒì³££¬±ÈÈçµ¥¸öÉ豸µÇ½¹ý¶àµÄÓû§£¬É豸һֱ´¦ÓÚ³äµç״̬£¬ËùÓÐÓû§ÐÐΪ¸ß¶ÈÒ»Öµȣ¬Í¬Ê±¿ÉÒÔ¼ÆËãÉçȺÓû§×÷±×ÂÊÀ´Í¨¹ýÒÑÖª×÷±×Óû§À´·¢ÏÖеÄ×÷±×Óû§¡£

ÀíÇåÁËÐèÇóÖ®ºóÎÒÃÇ¿ªÊ¼×ÅÊÖ¸ù¾ÝÓû§Ê¦Í½¹ØÏµ¹¹½¨ÉçȺ¡£¶Ô¡°½ôÃÜÁªÏµ¡±µÄ²»Í¬Àí½â²úÉúÁ˺ܶàÉçÇø·¢ÏÖËã·¨¡£ÏÂͼÊǼ¸ÖÖ¾­µäµÄÉçȺ·¢ÏÖËã·¨¡£

ÉçȺËã·¨

Triangle Counting£ºÈý½Ç¹ØÏµ£¬Í¼ÂÛ»ù´¡ÖªÊ¶¡£

Connected Components£ºÁ¬Í¨Í¼£¬Í¼ÂÛ»ù´¡ÖªÊ¶¡£

Strongly Connected Components£ºÇ¿Á¬Í¨Í¼£¬Í¼ÂÛ»ù´¡ÖªÊ¶¡£

Label Propagation£º±êÇ©´«²¥Ëã·¨¡£

Louvain£ºÒ»ÖÖ»ùÓÚ¡°Ä£¿é¶È¡±µÄ¾­µäËã·¨¡£

ÒòΪ±¾ÎÄÖØµã²»Êǽ²ÊöÉçȺ·¢ÏÖËã·¨£¬ËùÒÔÕâ¸öËã·¨¾ßÌåµÄº¬Òå´Ë´¦ÂÔ¹ý£¬ÓиÐÐËȤµÄ¶ÁÕß¿É×ÔÐÐÑо¿¡£±¾ÎÄÑ¡ÓÃÁË×î¼òµ¥µÄÁ¬Í¨Í¼Ëã·¨À´ÊµÏÖÉçȺ·¢ÏÖ£¬¼´Ö»ÒªÁ½¸ö½ÚµãÖ®¼äÓбßÎÒÃǾͰÑËüÃǹéÊôΪһ¸öÉçȺ¡£ÏÂÃæÎÒÃǽøÈë¸ù¾ÝÓû§Ê¦Í½¹ØÏµÉú³ÉÉçȺ½×¶Î¡£

Spark Graphx¹¹½¨ÉçȺ

Spark Graphx±¾Éí¾ÍÌṩÁ˹¹½¨Í¼²¢Éú³ÉÁ¬Í¨Í¼µÄ½Ó¿Ú£¬ÎÒÃÇÖ»ÐèÒª°´ÒªÇóÊäÈëÊý¾Ý¾ÍºÃÁË¡£ÈçÏÂͼËùʾ£º

ÎÒÃǹ¹½¨µãºÍ±ß£¬È»ºóµ÷ÓÃGraphx½Ó¿ÚÉú³Éͼ£¬×îºóµ÷ÓÃͼµÄ½Ó¿ÚÖ±½Ó»ñÈ¡Á¬Í¨Í¼¡£ÐèҪעÒâµÄÊÇ£¬Spark Graphx¹¹½¨µãºÍ±ßʱ£¬idÐèÒªÓÃLongÀàÐ͵ÄÊý×Ö±íʾ£¬ËùÒÔÎÒÃÇÐèҪά»¤Ò»ÕÅÓû§idµ½Êý×ÖidµÄά±í¡£

//¹¹½¨Óû§½Úµã
val users: RDD[(VertexId, String)] =
spark.sparkContext.parallelize(Array((3L, "u3"),
(7L, "u7"),(5L, "u5"), (2L, "u2"), (4L, "u4"),(6L, "u6"),(8L, "u8")))

//¹¹½¨Óû§±ß
val relationships: RDD[Edge[String]] =
spark.sparkContext.parallelize(Array(Edge(7L, 3L,""),
Edge(5L, 3L,""),Edge(5L, 2L,""),
Edge(6L, 4L,""),Edge(8L, 6L,"")))

//×éºÏ½ÚµãºÍ±ß¹¹½¨Í¼
val graph = Graph(users, relationships)

//´ÓͼÖгéÈ¡³öÁ¬Í¨Í¼
val components = graph.connectedComponents()

//»ñÈ¡Á¬Í¨Í¼Öеĵ㣬verticesÊÇÒ»¸ötupleÀàÐÍ£¬
key·Ö±ðΪËùÓеĶ¥µãid£¬
valueΪkeyËùÔÚµÄÁ¬Í¨Í¼id(Á¬Í¨Í¼Öж¥µãid×îСֵ)
val vertices = components.vertices

µÃµ½µÄverticesÊÇÈçϵÄk-vÊý¾Ý£º

/**
* vertices£º
* (6,4)
* (8,4)
* (3,2)
* (7,2)
* (5,2)
*
* ÊÇÒ»¸ötupleÀàÐÍ£¬key·Ö±ðΪËùÓеĶ¥µãid£¬
valueΪkeyËùÔÚµÄÁ¬Í¨Í¼id(Á¬Í¨Í¼Öж¥µãid×îСֵ)
*/

GraphStream: ÓÃÓÚ»­³öÍøÂçͼ

BreezeViz: Óû§»æÖÆÍ¼µÄ½á¹¹»¯ÐÅÏ¢, ±ÈÈç¶ÈµÄ·Ö²¼.

È»ºóÎÒÃǽ«±ßrelationshipsÓëverticesÇó³öÿÌõ±ßËùÔÚÁ¬Í¨Í¼Àï¶¥µãid×îСֵ¡£

val result = relationships.map(x =>{
(x.srcId,x.dstId.toString)
}).join(vertices)
.map(y =>{
// (7,(3,2)) => (2,(7,3))
(y._2._2,(y._1,y._2._1))
})

ÎÒÃǽ«½á¹û´æÈëͼÊý¾ÝNeo4j£¬¿ÉÊÓ»¯ºóÈçÏÂËùʾ£¬¿ÉÒÔ¿´µ½ÎÒÃǵõ½ÁËÁ½¸öÉçȺ¡£

ÖÁ´Ë£¬ÎÒÃÇÀûÓÃSpark Graphx¹¹½¨³öÁËÉçȺ£¬Ã¿¸öÉçȺ¶¼ÓÐ×Ô¼ºµÄÒ»¸öÉçȺid£¬È»ºóÎÒÃǾͿÉÒÔ»ùÓÚÉçȺ×öһЩ¾ßÌå·ÖÎöÁË£¬±ÈÈ磬ÎÒ¿ÉÒÔ¼ÆËãÉçȺ×÷±×ÂÊ£¬²¢È¡³öTOP NµÄÉçȺ£¬ÈçÏÂËùʾ¡£

ÉÏÃæÖ»ÊÇÒ»¸ö¼òµ¥µÄʾÀý£¬ÆäʵÎÒÃÇ¿ÉÒÔ¸øµãºÍ±ß¼ÓÉϸü¶àµÄÊôÐÔ£¬ÀûÓÃͼµÄÌØÐÔ½øÐмìË÷£¬¿ÉÒÔ¸ü¸ßЧµÄ¼ìË÷³ö¸ü¶àµÄÐÅÏ¢¡£ÎªÁ˸ü·½±ãµÄ´æ´¢ºÍ²éѯÉçȺÄÚµÄÊý¾Ý£¬ÎÒÃÇ¿ÉÒÔ½«ÉçȺ´æ´¢µ½Í¼Êý¾Ý¿âNeo4j¡£ÉÏÃæµÄÉçȺͼ¾ÍÊÇÓÃNeo4jչʾµÄ£¬ÄÇôʲôÊÇNeo4jÄØ£¿ÏÂÃæÎÒÃǼòµ¥µÄ½éÉÜÏ¡£

Neo4j¼ò½é

Neo4jÊÇÒ»¸öǶÈëʽµÄ¡¢»ùÓÚ´ÅÅ̵ġ¢¾ß±¸ÍêÈ«µÄÊÂÎñÌØÐÔµÄͼÊý¾Ý´æ´¢ÒýÇæ¡£×÷ΪͼÊý¾Ý¿â£¬Neo4j×î´óµÄÌØµãÊǹØÏµÊý¾ÝµÄ´æ´¢¡£Í¼Êý¾Ý¿â³ýÁËÄܹ»ÏñÆÕͨµÄÊý¾Ý¿âÒ»Ñù´æ´¢Ò»ÐÐÒ»ÐеÄÊý¾ÝÖ®Í⣬»¹¿ÉÒԺܷ½±ãµÄ´æ´¢Êý¾ÝÖ®¼äµÄ¹ØÏµÐÅÏ¢¡£

ÀýÈ磬¶ÔÓÚÒ»¸öÉç½»ÍøÂçµÄÓû§Êý¾Ý¿â£¬Äã³ýÁËÒª´æ´¢Ã¿¸öÓû§µÄÐÕÃû¡¢ÐÔ±ð¡¢Ï²ºÃÕâЩ»ù±¾ÐÅÏ¢Í⣬Ä㻹ÐèÒª´æ´¢Ò»¸öÓû§ºÍÄÄЩÓû§ÊÇÅóÓÑ£¬ºÍÄĸöÓû§ÊÇÇéÂÂÕâЩ¹ØÏµÊý¾Ý£¬Õâ¸öʱºòNeo4jÕâÑùµÄͼÊý¾Ý¿â¾Í¿ÉÒÔÅÉÉÏÓó¡À²¡£

ͨ¹ýÏÂͼ£¬´ó¼Ò¿ÉÒÔÁ˽âÏÂʲôÊÇͼÊý¾Ý¿âÒÔ¼°Ê²Ã´ÊǹØÏµÊý¾Ý¡£

ÔÚÉÏͼÖУ¬°üº¬Á½¸ö±êǩΪ¡°ÈË¡±µÄÊý¾Ý½Úµã£¬·Ö±ð´ú±íAnnºÍDanÁ½¸öÓû§¡£ÕâÁ½¸öÊý¾Ý½Úµã»¹°üº¬ÐÕÃû¡¢³öÉúµØµÈÊôÐÔÐÅÏ¢£¬ÓÃÓÚ±íʾÁ½¸öÓû§µÄ»ù±¾ÐÅÏ¢£¬¾ÍÈçͬ³£¹æÊý¾Ý¿âÖеÄÁ½ÐÐÊý¾Ý¡£

³ý´ËÖ®Í⣬Á½¸öÊý¾Ý½ÚµãÖ®¼ä»¹°üº¬Á½Ìõ¹ØÏµÊý¾Ý£¬¼´Ann¼Þ¸øÁËDan£¬AnnºÍDanͬ¾Ó¡£

ÀûÓÃÕâЩ¹ØÏµÊý¾Ý£¬Äã¾Í¿ÉÒÔ·½±ãµÄ×÷³ö»ùÓÚ¹ØÏµµÄ²éѯ£¬ÀýÈçÄã¿ÉÒÔ²éѯAnn¸úË­½á»éÁË£¬Õâ¾ÍÊÇͼÊý¾Ý¿âµÄÓÅÊÆ¡£

¿ÉÄÜÓÐÈË»á˵£¬ÉϱßдµÄÕâÖÖ¹ØÏµÊý¾Ý½á¹¹£¬SQLÒ²¿ÉÒÔͨ¹ý¶à±íjoinµÈ·½·¨ÊµÏÖ£¬ÄÇÒªNeo4j»¹ÓÐʲôÓ㿵«±Ï¾¹ÊõÒµÓÐר¹¥£¬¶ÔÓÚ´óÁ¿¡¢¸´ÔӵĹØÏµÊý¾Ý´¦Àí£¬Neo4jÔÚÐÔÄܺÍʹÓ÷½±ã³Ì¶ÈÉ϶¼ÊÇҪԶʤÓÚSQLµÄ¡£Ï±߸ø´ó¼Ò¼òµ¥×ܽáÏÂNeo4jµÄÌØµã¡£

Neo4jµÄÌØµã

ÏñSQLÒ»ÑùµÄ²éѯÓïÑÔcypher

Ëü×ñÑ­ÊôÐÔͼÊý¾ÝÄ£ÐÍ

Ëüͨ¹ýʹÓÃApache LucenceÖ§³ÖË÷Òý

ËüÖ§³ÖUNIQUEÔ¼Êø

Ëü°üº¬Ò»¸öÓÃÓÚÖ´ÐÐcypherÃüÁîµÄUI£ºNeo4jÊý¾Ýä¯ÀÀÆ÷

ËüÖ§³ÖÍêÕûµÄACID£¨Ô­×ÓÐÔ£¬Ò»ÖÂÐÔ£¬¸ôÀëÐԺͳ־ÃÐÔ£©¹æÔò

ËüÖ§³Ö²éѯµÄÊý¾Ýµ¼³öµ½JSONºÍXLS¸ñʽ

ËüÌṩÁËREST API£¬¿ÉÒÔ±»Èκαà³ÌÓïÑÔ£¨ÈçJava£¬Spring£¬ScalaµÈ£©·ÃÎÊ

ËüÌṩÁË¿ÉÒÔͨ¹ýÈκÎUI MVC¿ò¼Ü£¨ÈçNode JS£©·ÃÎʵÄJava½Å±¾

ËüÖ§³ÖÁ½ÖÖJava API£ºCypher APIºÍNative Java APIÀ´¿ª·¢JavaÓ¦ÓóÌÐò

Ö§³Ö¸ß¿ÉÓÃÐÔÖ÷´Ó¼¯Èº²¿Êð¡£

CypherÓïÑÔ

CypherÊÇNeo4jµÄͼÐβéѯÓïÑÔ£¬¹Ø¼ü×Ö´óСд²»Ãô¸Ð¡£Óï·¨ºÍSQLºÜÏñ£¬Ñ§ÆðÀ´Ïà¶Ô¼òµ¥¡£

»ù±¾¸ñʽ

MATCHWHERERETURN

ģʽ

() ±íʾ½Úµã

[] ±íʾ¹ØÏµ£¬¹ØÏµÊÇÓÐÏòµÄ£¬Á¬½ÓµÄµã·ÖΪԴµãºÍÄ¿±êµã

{} ±íʾÊôÐÔ£¬Ã¿¸öÊôÐÔͨ¹ýkey:valueµÄÐÎʽ±íʾ£¬¶à¸öÊôÐÔÖ®¼äÓöººÅ¸ô¿ª£¬¹ØÏµÒ²¿ÉÒÔÓÐÊôÐÔ

±êÇ©

ÓÃÀ´±êʶһ¸ö½ÚµãÊôÓÚÄÄÒ»Àà¡£Ò»¸ö½Úµã¿ÉÒÔÓжà¸ö»ò0¸ö±êÇ©¡£±êǩûÓÐÊôÐÔ¡£

node:label1:label2 ͨ¹ýðºÅ¸ø½ÚµãÌí¼Ó±êÇ©,ͨ¹ýðºÅ·Ö¸ô¶à¸ö±êÇ©

»ù±¾µÄÔöɾ¸Ä²é

²åÈëÒ»¸ö½Úµã
CREATE (n:Person {name : 'Andres'});

²åÈëÒ»Ìõ±ß
MATCH (a:Person),(b:Person) WHERE a.name = 'Node A'
AND b.name = 'Node B¡® CREATE (a)-[r:Follow]->(b);

¸üнڵã
MATCH (n:Person { name: 'Andres' }) SET n.name = 'Taylor';

ɾ³ý½Úµã
MATCH (n:Person { name:'Taylor' }) DETACH DELETE n;

ɾ³ý±ß
MATCH (a:Person)-[r:Follow]->(b:Person) WHERE a.name =
'Node A' AND b.name = 'Node B¡® DELETE r;

²éѯһ¸ö½ÚµãµÄËùÓÐFollow
MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person)
RETURN Person.name;

²éѯһ¸ö½Úµã×î¶Ì·¾¶
MATCH (ms:Person { name:'Node A' }),(cs:Person
{ name:'Node B' }), p = shortestPath((ms)-
[r:Follow]-(cs)) RETURN p;

Çå¿ÕÊý¾Ý¿â
MATCH (n) DETACH DELETE n

Neo4jÊý¾Ýä¯ÀÀÆ÷

ͨ¹ýNeo4jä¯ÀÀÆ÷¾Í¿ÉÒÔÖ±½Ó½øÐÐͼµÄ²éѯ¡£

CypherÑÝʾʾÀý

ÎÒÃÇʹÓÃCypher²éѯÓïÑÔ¶ÔNeo4jÖеÄÒ»¸ö¼ÒÍ¥½øÐн¨Ä££¬°üÀ¨ÄêÁ䣬ÐÔ±ðºÍ¼ÒÍ¥³ÉÔ±Ö®¼äµÄ¹ØÏµµÈ¸öÈËÊôÐÔ¡£ÎÒÃÇ´´½¨ÁËһЩÅóÓÑÀ´À©´óÎÒÃǵÄÉ罻ͼ£¬È»ºóÌí¼Ó¼ü/Öµ¶ÔÀ´Éú³Éÿ¸öÓû§¿´¹ýµÄµçÓ°ÁÐ±í¡£×îºó£¬ÎÒÃDzéѯÁËÎÒÃǵÄÊý¾Ý£¬Ê¹ÓÃͼÐηÖÎöÀ´ËÑË÷Ò»¸öÓû§Ã»Óп´µ½µ«¿ÉÄÜϲ»¶µÄµçÓ°¡£

´´½¨¼ÒÍ¥³ÉÔ±½Úµã¼°¹ØÏµ

CREATE (person:Person {name: "Steven", age: 45}) RETURN person
CREATE (person:Person {name: "Michael", age: 16}) RETURN person
CREATE (person:Person {name: "Rebecca", age: 7}) RETURN person
CREATE (person:Person {name: "Linda",age:40}) RETURN person
MATCH (steven:Person {name: "Steven"}),
(linda:Person {name: "Linda"}) CREATE (steven)-
[:IS_MARRIED_TO]->(linda) return steven, linda
MATCH (michael:Person {name: "Michael"}),
(rebecca:Person {name: "Rebecca"}) CREATE (michael)-
[:IS_SIBLILNG]->(rebecca) return michael, rebecca
MATCH (steven:Person {name: "Steven"}),
(michael:Person {name: "Michael"}) CREATE (steven)-[:HAS_CHILD]->(michael) return steven, michael
MATCH (steven:Person {name: "Steven"}), (rebecca:Person
{name: "Rebecca"}) CREATE (steven)-[:HAS_CHILD]->
(rebecca) return steven, rebecca
MATCH (linda:Person {name: "Linda"}), (michael:Person {name: "Michael"})
CREATE (linda)-[:HAS_CHILD]->(michael) return linda, michael
MATCH (linda:Person {name: "Linda"}), (rebecca:Person {name: "Rebecca"})
CREATE (linda)-[:HAS_CHILD]->(rebecca) return linda, Rebecca

Ìí¼ÓÅóÓѽڵ㼰¹ØÏµ£¬×é³ÉÉç½»ÍøÂç

MATCH (michael:Person {name: "Michael"}) CREATE (michael)-[:FRIEND]->(charlie:Person
{name: "Charlie", age: 16}) RETURN michael, charlie
MATCH (michael:Person {name: "Michael"}) CREATE (michael)-[:FRIEND]->(koby:Person
{name: "Koby"}) RETURN michael, koby
MATCH (michael:Person
{name: "Michael"}) CREATE (michael)-[:FRIEND]->
(grant:Person {name: "Grant"}) RETURN michael, grant
MATCH (rebecca:Person {name: "Rebecca"}) CREATE (rebecca)-[:FRIEND]->(jordyn:Person {name: "Jordyn"})
RETURN rebecca, jordyn
MATCH (rebecca:Person {name: "Rebecca"})
CREATE (rebecca)-[:FRIEND]->(katie:Person
{name: "Katie"}) RETURN rebecca, katie

Ìí¼ÓµçÓ°½Úµã¼°¹ØÏµ£¬²¢Ð¯´ø´ò·ÖÊôÐÔ

CREATE (movie:Movie {title:"Avengers"}) RETURN movie
MATCH (michael:Person {name:"Michael"}),
(avengers:Movie {title:"Avengers"}) CREATE (michael)-
[:HAS_SEEN {rating:5}]->
(avengers) return michael, avengers
CREATE (movie:Movie {title:"Batman"}) RETURN movie
CREATE (movie:Movie {title:"Gone with the Wind"}) RETURN movie
CREATE (movie:Movie {title:"Spongebob Square Pants"}) RETURN movie
CREATE (movie:Movie {title:"Avengers 2"}) RETURN movie
MATCH (charlie:Person {name:"Charlie"}),
(movie:Movie {title:"Batman"}) CREATE (charlie)-
[:HAS_SEEN {rating:4}]->(movie) return charlie, movie
MATCH (charlie:Person {name:"Charlie"}),
(movie:Movie {title:"Gone with the Wind"})
CREATE (charlie)-[:HAS_SEEN {rating:0}]->(movie)
return charlie, movie
MATCH (koby:Person {name:"Koby"}),
(movie:Movie {title:"Batman"}) CREATE (koby)-
[:HAS_SEEN {rating:4}]->(movie) return koby, movie
MATCH (koby:Person {name:"Koby"}), (movie:Movie
{title:"Avengers 2"}) CREATE (koby)-[:HAS_SEEN {rating:5}]->
(movie) return koby, movie
MATCH (grant:Person {name:"Grant"}),
(movie:Movie {title:"Spongebob Square Pants"})
CREATE (grant)-[:HAS_SEEN {rating:1}]->
(movie) return grant, movie
MATCH (jordyn:Person {name:"Jordyn"}),
(movie:Movie {title:"Spongebob Square Pants"})
CREATE (jordyn)-[:HAS_SEEN {rating:5}]->
(movie) return jordyn, movie
MATCH (michael:Person {name: "Michael"}) SET
michael.gender = "male" RETURN michael
MATCH (rebecca:Person {name: "Rebecca"}) SET
rebecca.gender = "female" RETURN rebecca

×îºóÎÒÃÇͨ¹ýÏÂÃæÓï¾ä²éѯstevenµÄº¢×ÓµÄÄÐÐÔÅóÓÑ¿´¹ý¶øÇÒ´ò·Ö´óÓÚ3·ÖµÄµçÓ°

MATCH (steven:Person {name:"Steven"})-
[:HAS_CHILD]-(child:Person)-[:FRIEND]-(friend:Person)-
[hasSeen:HAS_SEEN]-(movie:Movie) WHERE child.gender =
"male" AND hasSeen.rating > 3 RETURN DISTINCT movie.title

   
2944 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ