±à¼ÍƼö: |
±¾ÎÄÖ÷ÒªÏêϸ½éÉÜ Nebula GraphµÄÊý¾ÝÄ£ÐͺÍϵͳ¼Ü¹¹Éè¼Æ £¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚNebulaGraphÉçÇø£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
±¾Æªµ¼¶Á

ÓÐÏòÊôÐÔͼ
£¨Directed Property Graph£©
Nebula Graph ²ÉÓ÷dz£ÈÝÒ×Àí½âµÄÓÐÏòÊôÐÔͼµÄ·½Ê½À´½¨Ä£¡£Ò²¾ÍÊÇ˵£¬ÔÚÂß¼ÉÏ£¬Í¼ÓÉÁ½ÖÖÍ¼ÔªËØ¹¹³É£º

¶¥µã£¨vertex£©¡¢¶¥µãµÄÀàÐÍ£¨tag£©ºÍ¶ÔÓ¦µÄ¶¥µãÊôÐÔ£ºÔÚ Nebula Graph ÖУ¬¶¥µãµÄÀàÐͳÆÎª±êÇ©£¨tag£©¡£Ò»¸ö¶¥µã±ØÐëÖÁÉÙÓÐÒ»ÖÖÀàÐÍ£¨±êÇ©£©£¬Ò²¿ÉÒÔÓжàÖÖÀàÐÍ£¨±êÇ©£©¡£Ã¿ÖÖ±êÇ©ÓÐÒ»×éÏà¶ÔÓ¦µÄÊôÐÔ£¬³ÆÎª
schema¡£
ÀýÈçÉÏͼʾÀýÖУ¬ÓÐÁ½ÖÖÀàÐ͵Ķ¥µã£ºplayer ºÍ team¡£ player µÄ schema ÓÐÈýÖÖÊôÐÔ
id£¨vid£©£¬Name£¨string£©ºÍ Age£¨int£©£»team µÄ schema ÓÐÁ½ÖÖÊôÐÔ
id£¨vid£©ºÍ Name£¨string£©¡£
ºÍ Mysql Ò»Ñù£¬Nebula Graph ÊÇÒ»ÖÖÇ¿ schema µÄÊý¾Ý¿â£¬ÊôÐÔµÄÃû-³ÆºÍÊý¾ÝÀàÐͶ¼ÊÇÔÚÊý¾ÝдÈëǰȷ¶¨µÄ¡£
±ß£¨edge£©¡¢±ßµÄÀàÐÍ£¨edgetype£©ºÍ±ßÉϵÄÊôÐÔ£ºNebula Graph Öеı߾ùÊÇÓÐÏò±ß£¬±íÃ÷ÁËÒ»¸ö´ÓÆðµã£¨src£©Ö¸ÏòÖյ㣨dst£©±ßµÄ¹ØÁª¹ØÏµ¡£Ã¿¸ö¹ØÏµ¶¼ÓÐÒ»¸ö
edgetype£¬Ã¿ÖÖ edgetype ¶¨ÒåÁ˹ØÏµµÄÊôÐÔ¡£
ÀýÈ磬ÉÏͼÖÐÓÐÁ½ÖÖÀàÐ͵ıߣ¬Ò»ÖÖΪ player Ö¸Ïò player µÄ like ¹ØÏµ£¬ÊôÐÔΪ
likeness (double)£»ÁíÒ»ÖÖΪ player Ö¸Ïò team µÄ serve ¹ØÏµ£¬Á½¸öÊôÐÔ·Ö±ðΪ
start_year(int) ºÍ end_year(int)¡£
ÐèҪ˵Ã÷µÄÊÇ£¬ÆðµãºÍÖÕµãÖ®¼ä£¬¿ÉÒÔͬʱ´æÔÚ¶àÌõÏàͬ»òÕß²»Í¬ÀàÐ͵ıߡ£
ͼ·Ö¸î
£¨Graph Partition£©
ÓÉÓÚ³¬´ó¹æÄ£¹ØÏµÍøÂçµÄ½ÚµãÊýÁ¿¸ß´ï°ÙÒÚµ½Ç§ÒÚ£¬¶ø±ßµÄÊýÁ¿¸ü»á¸ß´ïÍòÒÚ£¬¼´Ê¹½ö´æ´¢µãºÍ±ßÁ½ÕßÒ²Ô¶´óÓÚÒ»°ã·þÎñÆ÷µÄÈÝÁ¿¡£Òò´ËÐèÒªÓз½·¨½«Í¼ÔªËØÇи²¢´æ´¢ÔÚ²»Í¬Âß¼·ÖƬ£¨Partition£©ÉÏ¡£Nebula
Graph ²ÉÓñ߷ָîµÄ·½Ê½£¬Ä¬È쵀ᅮ¬²ßÂÔΪ¹þϣɢÁУ¬partition ÊýÁ¿Îª¾²Ì¬ÉèÖò¢²»¿É¸ü¸Ä¡£

Êý¾ÝÄ£ÐÍ
£¨Data Model£©
ÔÚ Nebula Graph ÖУ¬Ã¿¸ö¶¥µã±»½¨Ä£Îª key-value£¬¸ù¾ÝÆä vertexID£¨»ò¼ò³Æ
vid£©¹þϣɢÁк󣬴洢µ½¶ÔÓ¦µÄ partition ÉÏ¡£

Ò»ÌõÂß¼ÒâÒåÉϵıߣ¬ÔÚ Nebula Graph Öн¨Ä£ÎªÁ½¸ö¶ÀÁ¢µÄ key-value£¬·Ö±ð³ÆÎª
out-key ºÍ in-key¡£out-key ÓëÕâÌõ±ßËù¶ÔÓ¦µÄÆðµã´æ´¢ÔÚͬһ¸ö partition
ÉÏ£¬in-key ÓëÕâÌõ±ßËù¶ÔÓ¦µÄÖÕµã´æ´¢ÔÚͬһ¸ö partition ÉÏ¡£

¹ØÓÚÊý¾ÝÄ£Ð͵ÄÏêϸÉè¼Æ»áÔÚºóÐøµÄϵÁÐÎÄÕÂÖнéÉÜ¡£
ϵͳ¼Ü¹¹
£¨Architecture£©
Nebula Graph °üÀ¨ËĸöÖ÷ÒªµÄ¹¦ÄÜÄ£¿é£¬·Ö±ðÊÇ´æ´¢²ã¡¢ÔªÊý¾Ý·þÎñ¡¢¼ÆËã²ãºÍ¿Í»§¶Ë¡£

´æ´¢²ã
´æ´¢²ã¶ÔÓ¦½ø³ÌÊÇ nebula-storaged¡£ÆäºËÐÄΪ»ùÓÚ RAFT ÐÒéµÄ·Ö²¼Ê½ Key-value
Storage¡£Ä¿Ç°Ö§³ÖµÄÖ÷Òª´æ´¢ÒýÇæÎª Rocksdb ºÍ HBase¡£
Raft ÐÒéͨ¹ý leader/follower µÄ·½Ê½£¬À´±£³ÖÊý¾ÝÖ®¼äµÄÒ»ÖÂÐÔ¡£Nebula
Storage Ö÷ÒªÔö¼ÓÁËÒÔϹ¦ÄܺÍÓÅ»¯£º
1.Parallel Raft. ¶ą̀»úÆ÷ÉϵÄÏàͬ partiton-id
×é³ÉÒ»¸ö Raft group¡£Í¨¹ý¶à×é Raft group ʵÏÖ²¢·¢²Ù×÷¡£
2.Write Path & batch£ºRaft ÐÒéµÄ¶à»úÆ÷¼äͬ²½ÒÀÀµÓÚÈÕÖ¾
id ˳ÐòÐÔ£¬ÕâÑùµÄ throughput ½ÏµÍ¡£Í¨¹ýÅúÁ¿ºÍÂÒÐòÌá½»µÄ·½Ê½£¬À´ÊµÏÖ¸ü¸ßµÄÍÌÍÂÁ¿¡£
3.»ùÓÚÒì²½¸´ÖÆµÄ learner£ºµ±¼¯ÈºÖÐÔö¼ÓеĻúÆ÷ʱ£¬¿ÉÒÔ½«ÆäÏȱê¼ÇΪ
learner£¬²¢Òì²½´Ó leader/follower ÀÈ¡Êý¾Ý¡£µ±¸Ã learner ×·ÉÏ leader
ºó£¬ÔÙ±ê¼ÇΪ follower£¬²ÎÓë raft ÐÒé¡£
4.Load-balance£º¶ÔÓÚ²¿·Ö·ÃÎÊѹÁ¦½Ï´óµÄ»úÆ÷£¬½«ÆäËù·þÎñµÄ
partition Ç¨ÒÆµ½½ÏÀäµÄ»úÆ÷ÉÏ£¬ÒÔʵÏÖ¸üºÃµÄ¸ºÔؾùºâ¡£

ÔªÊý¾Ý·þÎñ²ã
Meta service ¶ÔÓ¦µÄ½ø³ÌÊÇ nebula-metad£¬ÆäÖ÷ÒªµÄ¹¦ÄÜÓУº
1.Óû§¹ÜÀí£ºNebula Graph µÄÓû§Ìåϵ°üÀ¨ God user£¬Admin£¬User£¬Guest
ËÄÖÖ¡£Ã¿ÖÖÓû§µÄ²Ù×÷ȨÏÞ²»Ò»¡£
2.¼¯ÈºÅäÖùÜÀí£ºÖ§³ÖÉÏÏß¡¢ÏÂÏßеķþÎñÆ÷¡£
3.ͼ¿Õ¼ä¹ÜÀí£ºÔö¼Ó¡¢É¾³ýͼ¿Õ¼ä£¬ÐÞ¸Äͼ¿Õ¼äÅäÖã¨Raft ¸±±¾Êý£©¡£
4.Schema ¹ÜÀí£ºNebula Graph Ϊǿ schema
Éè¼Æ¡£
1£©Í¨¹ý Meta service ¼Ç¼ Tag ºÍ Edge µÄÊôÐԵĸ÷×ֶεÄÀàÐÍ¡£Ö§³ÖµÄÀàÐÍÓУºint,
double, timestamp, list µÈ£»
2£©¶à°æ±¾¹ÜÀí£¬Ö§³ÖÔö¼Ó¡¢Ð޸ĺÍɾ³ý schema£¬²¢¼Ç¼Æä°æ±¾ºÅ£»
3£©TTL ¹ÜÀí£¬Í¨¹ý±êʶµ½ÆÚ»ØÊÕ£¨time-to-live£©×ֶΣ¬Ö§³ÖÊý¾ÝµÄ×Ô¶¯É¾³ýºÍ¿Õ¼ä»ØÊÕ¡£
Meta Service ²ãΪÓÐ״̬µÄ·þÎñ£¬Æä״̬³Ö¾Ã»¯·½·¨Óë Storage ²ãÒ»Ñùͨ¹ý KV
Store ·½Ê½´æ´¢¡£

Query Engine &
Query Language (nGQL)
¼ÆËã²ã¶ÔÓ¦µÄ½ø³ÌÊÇ nebula-graphd£¬ËüÓÉÍêÈ«¶ÔµÈÎÞ״̬ÎÞ¹ØÁªµÄ¼ÆËã½Úµã×é³É£¬¼ÆËã½ÚµãÖ®¼äÏ໥ÎÞͨÐÅ¡£
Query Engine ²ãµÄÖ÷Òª¹¦ÄÜ£¬ÊǽâÎö¿Í»§¶Ë·¢ËÍ nGQL Îı¾£¬Í¨¹ý´Ê·¨½âÎö£¨Lexer£©ºÍÓï·¨½âÎö£¨Parser£©Éú³ÉÖ´Ðмƻ®¡£²¢Í¨¹ýÓÅ»¯ºó½«Ö´Ðмƻ®½»ÓÉÖ´ÐÐÒýÇæ¡£Ö´ÐÐÒýÇæÍ¨¹ý
Meta Service »ñȡͼµãºÍ±ßµÄ schema£¬²¢Í¨¹ý´æ´¢ÒýÇæ²ã»ñÈ¡µãºÍ±ßµÄÊý¾Ý¡£
Query Engine²ãµÄÖ÷ÒªÓÅ»¯ÓУº
Òì²½ºÍ²¢·¢Ö´ÐУºÓÉÓÚ IO ºÍÍøÂç¾ùΪ³¤Ê±ÑÓ²Ù×÷£¬Ðè²ÉÓÃÒì²½¼°²¢·¢²Ù×÷¡£´ËÍ⣬Ϊ±ÜÃâµ¥¸ö³¤
query Ó°ÏìºóÐø query£¬Ò²ÎªÃ¿¸ö query ÉèÖõ¥¶ÀµÄ×ÊÔ´³ØÒÔ±£Ö¤·þÎñÖÊÁ¿ QoS¡£
¼ÆËãϳÁ£ºÎª±ÜÃâ´æ´¢²ã½«¹ý¶àÊý¾Ý»Ø´«µ½¼ÆËã²ã£¬Õ¼Óñ¦¹ó´ø¿í£¬Ìõ¼þ¹ýÂË£¨where£©µÈËã×Ó»áËæ²éѯÌõ¼þһͬÏ·¢µ½´æ´¢²ã½Úµã¡£
Ö´Ðмƻ®ÓÅ»¯£º¹ØÏµÊý¾Ý¿â SQL ÖеÄÖ´Ðмƻ®ÓÅ»¯ÒѾ¾ÀúÁ˳¤Ê±¼äµÄ·¢Õ¹£¬µ«Òµ½ç¶ÔÓÚͼ²éѯÓïÑÔµÄÓÅ»¯Ñо¿½ÏÉÙ¡£Nebula
Graph ¶Ôͼ²éѯµÄÖ´Ðмƻ®ÓÅ»¯Ò²½øÐÐÁËÒ»¶¨µÄ̽Ë÷£¬°üÀ¨Ö´Ðмƻ®»º´æºÍÉÏÏÂÎÄÎÞ¹ØÓï¾äµÄ²¢·¢Ö´ÐС£

API ºÍ console
Nebula Graph ÌṩC++, java, Golang ÈýÖÖÓïÑԵĿͻ§¶Ë£¬Óë·þÎñÆ÷Ö®¼äµÄͨÐÅ·½Ê½Îª
RPC£¬²ÉÓõÄͨÐÅÐÒéΪ Facebook-Thrift¡£Óû§Ò²¿Éͨ¹ý linux ÉÏ console
ʵÏÖ¶Ô Nebula Graph ²Ù×÷¡£Web ·ÃÎÊ·½Ê½Ò²ÒÑÔÚ¿ª·¢¹ý³ÌÖС£ |