±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËͼÊý¾Ý¿âÏà¹ØÖªÊ¶ºÍÊôÐÔ£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£ ±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þÁõ衱à¼ÍƼö
|
|
Ëæ×ÅÉç½»¡¢µçÉÌ¡¢½ðÈÚ¡¢ÁãÊÛ¡¢ÎïÁªÍøµÈÐÐÒµµÄ¿ìËÙ·¢Õ¹£¬ÏÖʵÉç»áÖ¯ÆðÁËÁËÒ»ÕÅÅÓ´ó¶ø¸´ÔӵĹØÏµÍø£¬´«Í³Êý¾Ý¿âºÜÄÑ´¦Àí¹ØÏµÔËËã¡£´óÊý¾ÝÐÐÒµÐèÒª´¦ÀíµÄÊý¾ÝÖ®¼äµÄ¹ØÏµËæÊý¾ÝÁ¿³Ê¼¸ºÎ¼¶ÊýÔö³¤£¬Ø½ÐèÒ»ÖÖÖ§³Öº£Á¿¸´ÔÓÊý¾Ý¹ØÏµÔËËãµÄÊý¾Ý¿â£¬Í¼Êý¾Ý¿âÓ¦Ô˶øÉú¡£
ÊÀ½çÉϺܶàÖøÃûµÄ¹«Ë¾¶¼ÔÚʹÓÃͼÊý¾Ý¿â¡£±ÈÈ磺
Éç½»ÁìÓò£ºFacebook, Twitter£¬LinkedinÓÃËüÀ´¹ÜÀíÉç½»¹ØÏµ£¬ÊµÏÖºÃÓÑÍÆ¼ö
ÁãÊÛÁìÓò£ºeBay£¬ÎÖ¶ûÂêʹÓÃËüʵÏÖÉÌÆ·ÊµÊ±ÍƼö£¬¸øÂò¼Ò¸üºÃµÄ¹ºÎïÌåÑé
½ðÈÚÁìÓò£ºÄ¦¸ù´óͨ£¬»¨ÆìºÍÈðÒøµÈÒøÐÐÔÚÓÃͼÊý¾Ý¿â×ö·ç¿Ø´¦Àí
Æû³µÖÆÔìÁìÓò£ºÎÖ¶ûÎÖ£¬´÷Ä·ÀպͷáÌïµÈ¶¥¼¶Æû³µÖÆÔìÉÌÒÀ¿¿Í¼Êý¾Ý¿âÍÆ¶¯´´ÐÂÖÆÔì½â¾ö·½°¸
µçÐÅÁìÓò£ºVerizon, OrangeºÍAT&T µÈµçÐŹ«Ë¾ÒÀ¿¿Í¼Êý¾Ý¿âÀ´¹ÜÀíÍøÂ磬¿ØÖÆ·ÃÎʲ¢Ö§³Ö¿Í»§360
¾ÆµêÁìÓò£ºÍòºÀºÍÑŸ߾ƵêµÈ¶¥¼¶¾Æµê¹«Ë¾ÒÀʹÓÃͼÊý¾Ý¿âÀ´¹ÜÀí¸´ÔÓÇÒ¿ìËٱ仯µÄ¿â´æ
¼ÈȻͼÊý¾Ý¿âÓ¦ÓÃÕâô¹ã·º£¬Ô½À´Ô½¶àµÄÆóÒµºÍ¿ª·¢Õß¿ªÊ¼Ê¹ÓÃËü£¬ÄÇËü¾¿¾¹Ê²Ã´¹ýÈËÖ®´¦ÄØ£¬ÏÂÃæÎÒÃÇÀ´½Ò¿ªËüµÄÉñÃØÃæÉ´¡£
1. Why Graph DB?
ѧ¹ýÊý¾Ý½á¹¹Õâô¿Î³ÌµÄͬѧÄÔº£ÖÐÓ¦¸Ã»ò¶à»òÉÙÓÐͼµÄ¸ÅÄî¡£
1.1 ʲôÊÇͼ£¿
ͼÓÉÁ½¸öÔªËØ×é³É£º½ÚµãºÍ¹ØÏµ¡£
ÿ¸ö½Úµã´ú±íÒ»¸öʵÌ壨ÈË£¬µØ£¬ÊÂÎÀà±ð»òÆäËûÊý¾Ý£©£¬Ã¿¸ö¹ØÏµ´ú±íÁ½¸ö½ÚµãµÄ¹ØÁª·½Ê½¡£ÕâÖÖͨÓýṹ¿ÉÒÔ¶Ô¸÷ÖÖ³¡¾°½øÐн¨Ä£ - ´ÓµÀ·ϵͳµ½Éè±¸ÍøÂ磬µ½È˿ڵIJ¡Ê·»òÓɹØÏµ¶¨ÒåµÄÈÎºÎÆäËûÊÂÎï¡£
1.2 ʲôÊÇͼÊý¾Ý¿â£¿
ͼÊý¾Ý¿â(Graph database)²¢·ÇÖ¸´æ´¢Í¼Æ¬µÄÊý¾Ý¿â£¬¶øÊÇÒÔͼÕâÖÖÊý¾Ý½á¹¹´æ´¢ºÍ²éѯÊý¾Ý¡£
ͼÐÎÊý¾Ý¿âÊÇÒ»ÖÖÔÚÏßÊý¾Ý¿â¹ÜÀíϵͳ£¬¾ßÓд¦ÀíͼÐÎÊý¾ÝÄ£Ð͵Ĵ´½¨£¬¶ÁÈ¡£¬¸üкÍɾ³ý£¨CRUD£©²Ù×÷¡£
ÓëÆäËûÊý¾Ý¿â²»Í¬£¬¹ØÏµÔÚͼÊý¾Ý¿âÖÐÕ¼Ê×ÒªµØÎ»¡£ÕâÒâζ×ÅÓ¦ÓóÌÐò²»±ØÊ¹ÓÃÍâ¼ü»ò´øÍâ´¦Àí£¨ÈçMapReduce£©À´ÍƶÏÊý¾ÝÁ¬½Ó¡£
Óë¹ØÏµÊý¾Ý¿â»òÆäËûNoSQLÊý¾Ý¿âÏà±È£¬Í¼Êý¾Ý¿âµÄÊý¾ÝÄ£ÐÍÒ²¸ü¼Ó¼òµ¥£¬¸ü¾ß±íÏÖÁ¦¡£
ͼÐÎÊý¾Ý¿âÊÇΪÓëÊÂÎñ£¨OLTP£©ÏµÍ³Ò»ÆðʹÓöø¹¹½¨µÄ£¬²¢ÇÒÔÚÉè¼ÆÊ±¿¼ÂÇÁËÊÂÎñÍêÕûÐԺͲÙ×÷¿ÉÓÃÐÔ¡£
1.3 Á½¸öÖØÒªÊôÐÔ
¸ù¾Ý´æ´¢ºÍ´¦ÀíÄ£ÐͲ»Í¬£¬ÊÐÃæÉÏͼÊý¾Ý¿âÒ²ÓÐÒ»Ð©Çø·Ö¡£
±ÈÈ磺
Neo4J¾ÍÊÇÊôÓÚÔÉúͼÊý¾Ý¿â£¬ËüʹÓõĺó¶Ë´æ´¢ÊÇרÃÅΪNeo4JÕâÖÖͼÊý¾Ý¿â¶¨ÖƺÍÓÅ»¯µÄ£¬ÀíÂÛÉÏ˵ÄܸüÓÐÀûÓÚ·¢»ÓͼÊý¾Ý¿âµÄÐÔÄÜ¡£
¶øJanusGraph²»ÊÇÔÉúͼÊý¾Ý¿â£¬¶ø½«Êý¾Ý´æ´¢ÔÚÆäËûϵͳÉÏ£¬±ÈÈçHbase¡£
¢Ù ͼ´æ´¢
һЩͼÊý¾Ý¿âʹÓÃÔÉúͼ´æ´¢£¬ÕâÀà´æ´¢ÊǾ¹ýÓÅ»¯µÄ£¬²¢ÇÒÊÇרÃÅΪÁË´æ´¢ºÍ¹ÜÀíͼ¶øÉè¼ÆµÄ¡£²¢²»ÊÇËùÓÐͼÊý¾Ý¿â¶¼ÊÇʹÓÃÔÉúͼ´æ´¢£¬Ò²ÓÐһЩͼÊý¾Ý¿â½«Í¼Êý¾ÝÐòÁл¯£¬È»ºó±£´æµ½¹ØÏµÐÍÊý¾Ý¿â»òÕßÃæÏò¶ÔÏóÊý¾Ý¿â£¬»òÆäËûͨÓÃÊý¾Ý´æ´¢ÖС£
¢Ú ͼ´¦ÀíÒýÇæ
ÔÉúͼ´¦Àí£¨Ò²³ÆÎªÎÞË÷ÒýÁÚ½Ó£©ÊÇ´¦ÀíͼÊý¾ÝµÄ×îÓÐЧ·½·¨£¬ÒòΪÁ¬½ÓµÄ½ÚµãÔÚÊý¾Ý¿âÖÐÎïÀíµØÖ¸Ïò±Ë´Ë¡£·Ç±¾»úͼ´¦ÀíʹÓÃÆäËû·½·¨À´´¦ÀíCRUD²Ù×÷¡£
2. ¶Ô±È
2.1 ÓëNoSQLÊý¾Ý¿â¶Ô±È
NoSQLÊý¾Ý¿â´óÖ¿ÉÒÔ·ÖΪËÄÀࣺ
¼üÖµ(key/value)Êý¾Ý¿â
Áд洢Êý¾Ý¿â
ÎĵµÐÍÊý¾Ý¿â
ͼÊý¾Ý¿â


2.2 Óë¹ØÏµÐÍÊý¾Ý¿â¶Ô±È
¹ØÏµÐÍÊý¾Ý¿âʵ¼ÊÉÏÊDz»Éó¤´¦Àí¹ØÏµµÄ¡£ºÜ¶à³¡¾°Ï£¬ÄãµÄÒµÎñÐèÇóÍêÈ«³¬³öÁ˵±Ç°µÄÊý¾Ý¿â¼Ü¹¹¡£
¾Ù¸öÀõ×Ó£º¼ÙÉèij¹ØÏµÐÍÊý¾Ý¿âÖÐÓÐÕâô¼¸ÕÅÓû§¡¢¶©µ¥¡¢ÉÌÆ·±í£º

µ±ÎÒÃÇÒª²éѯ£º¡°Óû§¹ºÂòÁËÄÇЩÉÌÆ·£¿¡± »òÕß ¡°¸ÃÉÌÆ·ÓÐÄÄЩ¿Í»§¹ºÂò¹ý£¿¡± ÐèÒª¿ª·¢ÈËÔ±JOIN¼¸ÕÅ±í£¬Ð§Âʷdz£µÍÏ¡£
¶ø¡°¹ºÂò¸Ã²úÆ·µÄ¿Í»§»¹¹ºÂòÁËÄÄЩÉÌÆ·£¿¡±ÀàËÆµÄ²éѯ¼¸ºõ²»¿ÉÄÜʵÏÖ¡£
¹ØÏµ²éѯÐÔÄܶԱÈ
ÔÚÊý¾Ý¹ØÏµÖÐÐÄ£¬Í¼ÐÎÊý¾Ý¿âÔÚ²éѯËÙ¶È·½Ãæ·Ç³£¸ßЧ£¬¼´Ê¹¶ÔÓÚÉî¶ÈºÍ¸´ÔӵIJéѯҲÊÇÈç´Ë¡£ÔÚ¡¶Neo4j in Action¡·Õâ±¾ÊéÖУ¬×÷ÕßÔÚ¹ØÏµÐÍÊý¾Ý¿â
ºÍͼÊý¾Ý¿â(Neo4j)Ö®¼ä½øÐÐÁËʵÑé¡£

ËûÃǵÄʵÑéÊÔͼÔÚÒ»¸öÉç½»ÍøÂçÀïÕÒµ½×î´óÉî¶ÈΪ5µÄÅóÓѵÄÅóÓÑ¡£ËûÃǵÄÊý¾Ý¼¯°üÀ¨100ÍòÈË£¬Ã¿ÈËÔ¼ÓÐ50¸öÅóÓÑ¡£ÊµÑé½á¹ûÈçÏ£º

ÔÚÉî¶ÈΪ2ʱ£¨¼´ÅóÓѵÄÅóÓÑ£©£¬Á½ÖÖÊý¾Ý¿âÐÔÄÜÏà²î²»ÊǺÜÃ÷ÏÔ£»Éî¶ÈΪ3ʱ(¼´ÅóÓѵÄÅóÓѵÄÅóÓÑ)£¬ºÜÃ÷ÏÔ£¬¹ØÏµÐÍÊý¾Ý¿âµÄÏìӦʱ¼ä30s£¬ÒѾ±äµÃ²»¿É½ÓÊÜÁË£»Éî¶Èµ½4ʱ£¬¹ØÏµÊý¾Ý¿âÐèÒª½ü°ë¸öСʱ²ÅÄÜ·µ»Ø½á¹û£¬Ê¹ÆäÎÞ·¨Ó¦ÓÃÓÚÔÚÏßϵͳ£»Éî¶Èµ½5ʱ£¬¹ØÏµÐÍÊý¾Ý¿âÒѾÎÞ·¨Íê³É²éѯ¡£¶ø¶ÔÓÚͼÊý¾Ý¿âNeo4J£¬Éî¶È´Ó3µ½5£¬ÆäÏìӦʱ¼ä¾ùÔÚ3ÃëÒÔÄÚ¡£
¿ÉÒÔ¿´³ö£¬¶ÔÓÚͼÊý¾Ý¿âÀ´Ëµ£¬Êý¾ÝÁ¿Ô½´ó£¬Ô½¸´ÔӵĹØÁª²éѯ£¬Ô¼ÓÐÀûÓÚÌåÏÖÆäÓÅÊÆ¡£´ÓÉî¶ÈΪ4/5µÄ²éѯ½á¹ûÎÒÃÇ¿ÉÒÔ¿´³ö£¬Í¼Êý¾Ý¿â·µ»ØÁËÕû¸öÉç½»ÍøÂçÒ»°ëÒÔÉϵÄÈËÊý¡£
3. Neo4J ºÍ JanuasGraph
¸ù¾ÝDB-Engines×îз¢²¼µÄͼÊý¾Ý¿âÅÅÃû£¬Neo4JÈÔÈ»´ó·ùÁìÏÈÅÅÔÚµÚһλ£º

Neo4J
Neo4JÊÇÓÉJavaʵÏֵĿªÔ´Í¼Êý¾Ý¿â¡£×Ô2003Ä꿪ʼ¿ª·¢£¬Ö±µ½2007ÄêÕýʽ·¢²¼µÚÒ»°æ£¬²¢ÍйÜÓÚGitHubÉÏ¡£
Neo4JÖ§³ÖACID£¬¼¯Èº¡¢±¸·ÝºÍ¹ÊÕÏ×ªÒÆ¡£Ä¿Ç°Neo4J×îа汾Ϊ3.5£¬·ÖΪÉçÇø°æºÍÆóÒµ°æ£¬ÉçÇø°æÖ»Ö§³Öµ¥»ú²¿Ê𣬹¦ÄÜÊÜÏÞ¡£ÆóÒµ°æÖ§³ÖÖ÷´Ó¸´ÖƺͶÁд·ÖÀ룬°üº¬¿ÉÊÓ»¯¹ÜÀí¹¤¾ß¡£
JanusGraph
JanusGraphÊÇÒ»¸öLinux»ù½ð»áϵĿªÔ´·Ö²¼Ê½Í¼Êý¾Ý¿â ¡£JanusGraphÌṩApache2.0Èí¼þÐí¿ÉÖ¤¡£¸ÃÏîÄ¿ÓÉIBM¡¢Google¡¢HortonworksÖ§³Ö¡£JanusGraphÊÇÓÉTitanDB ͼÊý¾Ý¿âÐ޸ĶøÀ´£¬TitanDB´Ó2012Ä꿪ʼ¿ª·¢¡£Ä¿Ç°×îа汾Ϊ0.3.1¡£
JanusGraphÖ§³Ö¶àÖÖ´¢´æºó¶Ë£¨°üÀ¨Apache Cassandra¡¢Apache HBase¡¢Bigtable¡¢Berkeley DB£©¡£JanusGraphµÄ¿ÉÀ©Õ¹ÐÔÈ¡¾öÓÚÓëJanusGraphÒ»ÆðʹÓõĻù´¡¼¼Êõ¡£ÀýÈ磬ͨ¹ýʹÓÃApache Cassandra×÷Ϊ´æ´¢ºó¶Ë£¬¿ÉÒÔ½«JanusGraph¼òµ¥µØÀ©Õ¹µ½¶à¸öÊý¾ÝÖÐÐÄ¡£
JanusGraphͨ¹ýÓë´óÊý¾Ýƽ̨£¨Apache Spark£¬Apache Giraph£¬Apache Hadoop£©¼¯³É£¬Ö§³ÖÈ«¾ÖͼÊý¾ÝµÄ·ÖÎö¡¢±¨¸æºÍETL¡£
JanusGraphͨ¹ýÍⲿË÷Òý´æ´¢£¨Elasticsearch£¬Solr£¬Lucene£©Ö§³ÖµØÀí¡¢Êý×Ö·¶Î§ºÍÈ«ÎÄËÑË÷¡£
3.1 ±ê¼ÇÊôÐÔͼģÐÍ

£¨1£©½Úµã
½ÚµãÊÇÖ÷ÒªµÄÊý¾ÝÔªËØ
½Úµãͨ¹ý¹ØÏµÁ¬½Óµ½ÆäËû½Úµã
½Úµã¿ÉÒÔ¾ßÓÐÒ»¸ö»ò¶à¸öÊôÐÔ£¨¼´£¬´æ´¢Îª¼ü/Öµ¶ÔµÄÊôÐÔ£©
½ÚµãÓÐÒ»¸ö»ò¶à¸ö±êÇ©£¬ÓÃÓÚÃèÊöÆäÔÚͼ±íÖеÄ×÷ÓÃ
ʾÀý£ºÈËÔ±½ÚµãÓëCar½Úµã
£¨2£©¹ØÏµ
¹ØÏµÁ¬½ÓÁ½¸ö½Úµã
¹ØÏµÊÇ·½ÏòÐÔµÄ
½Úµã¿ÉÒÔÓжà¸öÉõÖÁµÝ¹éµÄ¹ØÏµ
¹ØÏµ¿ÉÒÔÓÐÒ»¸ö»ò¶à¸öÊôÐÔ£¨¼´´æ´¢Îª¼ü/Öµ¶ÔµÄÊôÐÔ£©
£¨3£©ÊôÐÔ
ÊôÐÔÊÇÃüÃûÖµ£¬ÆäÖÐÃû³Æ£¨»ò¼ü£©ÊÇ×Ö·û´®
ÊôÐÔ¿ÉÒÔ±»Ë÷ÒýºÍÔ¼Êø
¿ÉÒÔ´Ó¶à¸öÊôÐÔ´´½¨¸´ºÏË÷Òý
£¨4£©±êÇ©
±êÇ©ÓÃÓÚ½«½Úµã·Ö×é
Ò»¸ö½Úµã¿ÉÒÔ¾ßÓжà¸ö±êÇ©
¶Ô±êÇ©½øÐÐË÷ÒýÒÔ¼ÓËÙÔÚͼÖвéÕÒ½Úµã
±¾»ú±êÇ©Ë÷ÒýÕë¶ÔËٶȽøÐÐÁËÓÅ»¯
4. Cypherͼ²éѯÓïÑÔ
CypherÊÇNeo4jµÄͼÐβéѯÓïÑÔ£¬ÔÊÐíÓû§´æ´¢ºÍ¼ìË÷ͼÐÎÊý¾Ý¿âÖеÄÊý¾Ý¡£
¾ÙÀý£¬ÎÒÃÇÒª²éÕÒJoeµÄËùÒÔ¶þ¶ÈºÃÓÑ£º

²éѯÓï¾äÈçÏ£º
MATCH
(person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
(foaf:Person)
WHERE
person.name = "Joe"
AND NOT (person)-[:KNOWS]-(foaf)
RETURN
foaf |
JoeÈÏʶSally£¬SallyÈÏʶAnna¡£ Bob±»ÅųýÔÚ½á¹ûÖ®Í⣬ÒòΪ³ýÁËͨ¹ýSally³ÉΪ¶þ¼¶ÅóÓÑÖ®Í⣬Ëû»¹ÊÇÒ»¼¶ÅóÓÑ¡£
5. С½á
ͼÊý¾Ý¿âÓ¦¶ÔµÄÊǵ±½ñÒ»¸öºê¹ÛµÄÉÌÒµÊÀ½çµÄ´óÇ÷ÊÆ£ºÆ¾½è¸ß¶È¹ØÁª¡¢¸´ÔӵĶ¯Ì¬Êý¾Ý£¬»ñµÃ¶´²ìÁ¦ºÍ¾ºÕùÓÅÊÆ¡£¹úÄÚÔ½À´Ô½¶àµÄ¹«Ë¾¿ªÊ¼½øÈëͼÊý¾Ý¿âÁìÓò£¬Ñз¢×Ô¼ºµÄͼÊý¾Ý¿âϵͳ¡£¶ÔÓÚÈκδﵽһ¶¨¹æÄ£»ò¼ÛÖµµÄÊý¾Ý£¬Í¼Êý¾Ý¿â¶¼ÊdzÊÏֺͲéѯÕâЩ¹ØÏµÊý¾ÝµÄ×îºÃ·½Ê½¡£¶øÀí½âºÍ·ÖÎöÕâЩͼµÄÄÜÁ¦½«³ÉΪÆóҵδÀ´×îºËÐĵľºÕùÁ¦¡£
|