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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
×Ö½ÚÌø¶¯×ÔÑÐÍòÒÚ¼¶Í¼Êý¾Ý¿â & ͼ¼ÆËãʵ¼ù
 
 
  2854  次浏览      30
2021-10-21
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁË×Ö½ÚÌø¶¯×ÔÑеķֲ¼Ê½Í¼Êý¾Ý¿âºÍͼ¼ÆËãרÓÃÒýÇæ×öÉî¶È½âÎöºÍ·ÖÏí£¬Õ¹Ê¾Ð¼¼ÊõÊÇÈçºÎ½â¾öÒµÎñÎÊÌ⣬ӰÏ켸ÒÚ»¥ÁªÍøÓû§µÄ²úÆ·ÌåÑé¡£
±¾ÎÄÀ´×ÔCSDN£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼­¡¢ÍƼö¡£

1. ͼ״½á¹¹Êý¾Ý¹ã·º´æÔÚ

×Ö½ÚÌø¶¯µÄËùÓвúÆ·µÄ´ó²¿·ÖÒµÎñÊý¾Ý£¬¼¸ºõ¶¼¿ÉÒÔ¹éÈëµ½ÒÔÏÂÈýÖÖ£º

Óû§ÐÅÏ¢¡¢Óû§ºÍÓû§µÄ¹ØÏµ£¨¹Ø×¢¡¢ºÃÓѵȣ©£»

ÄÚÈÝ£¨ÊÓÆµ¡¢ÎÄÕ¡¢¹ã¸æµÈ£©£»

Óû§ºÍÄÚÈݵÄÁªÏµ£¨µãÔÞ¡¢ÆÀÂÛ¡¢×ª·¢¡¢µã»÷¹ã¸æµÈ£©¡£

ÕâÈýÖÖÊý¾Ý¹ØÁªÔÚÒ»Æð£¬ÐγÉͼ״£¨Graph£©½á¹¹Êý¾Ý¡£

ΪÁËÂú×ã social graph µÄÔÚÏßÔöɾ¸Ä²é³¡¾°£¬×Ö½ÚÌø¶¯×ÔÑÐÁË·Ö²¼Ê½Í¼´æ´¢ÏµÍ³¡ª¡ªByteGraph¡£Õë¶ÔÉÏÊöͼ״½á¹¹Êý¾Ý£¬ByteGraph Ö§³ÖÓÐÏòÊôÐÔͼÊý¾ÝÄ£ÐÍ£¬Ö§³Ö Gremlin ²éѯÓïÑÔ£¬Ö§³ÖÁé»î·á¸»µÄдÈëºÍ²éѯ½Ó¿Ú£¬¶ÁдÍÌÍ¿ÉÀ©Õ¹µ½Ç§Íò QPS£¬ÑÓ³ÙºÁÃë¼¶¡£Ä¿Ç°£¬ByteGraph Ö§³ÖÁËÍ·Ìõ¡¢¶¶Òô¡¢ TikTok¡¢Î÷¹Ï¡¢»ðɽµÈ¼¸ºõ×Ö½ÚÌø¶¯È«²¿²úÆ·Ïߣ¬±é²¼È«Çò»ú·¿¡£ÔÚÕâÆªÎÄÕÂÖУ¬½«´ÓÊÊÓó¡¾°¡¢ÄÚ²¿¼Ü¹¹¡¢¹Ø¼üÎÊÌâ·ÖÎö¼¸¸ö·½Ãæ×÷ÉîÈë½éÉÜ¡£

ByteGraph Ö÷ÒªÓÃÓÚÔÚÏß OLTP ³¡¾°£¬¶øÔÚÀëÏß³¡¾°Ï£¬Í¼Êý¾ÝµÄ·ÖÎöºÍ¼ÆËãÐèÇóÒ²Öð½¥ÏÔÏÖ¡£2019 ÄêÄê³õ£¬Gartner Êý¾ÝÓë·ÖÎö·å»áÉϽ«Í¼ÁÐΪ 2019 ÄêÊ®´óÊý¾ÝºÍ·ÖÎöÇ÷ÊÆÖ®Ò»£¬Ô¤¼ÆÈ«Çòͼ·ÖÎöÓ¦Óý«ÒÔÿÄê 100% µÄËÙ¶ÈѸÃÍÔö³¤£¬2020 Ä꽫´ïµ½ 80 ÒÚÃÀÔª¡£Òò´Ë£¬ÎÒÃÇÍŶÓͬʱҲ¿ªÆôÁËÔÚÀëÏßͼ¼ÆË㳡¾°µÄÖ§³ÖºÍʵ¼ù¡£

ÏÂÃæ»á´ÓͼÊý¾Ý¿âºÍͼ¼ÆËãÁ½¸ö²¿·Ö£¬·Ö±ðÀ´½éÉÜ×Ö½ÚÌø¶¯ÔÚÕâ·½ÃæµÄһЩ¹¤×÷¡£

2. ×ÔÑÐͼÊý¾Ý¿â£¨ByteGraph£©½éÉÜ

´ÓÊý¾ÝÄ£ÐͽǶȿ´£¬Í¼Êý¾Ý¿âÄÚ²¿Êý¾ÝÊÇÓÐÏòÊôÐÔͼ£¬Æä»ù±¾ÔªËØÊÇ Graph Öеĵ㣨Vertex£©¡¢±ß£¨Edge£©ÒÔ¼°ÆäÉϸ½×ŵÄÊôÐÔ£»×÷Ϊһ¸ö¹¤¾ß£¬Í¼Êý¾Ý¶ÔÍâÌṩµÄ½Ó¿Ú¶¼ÊÇÎ§ÈÆÕâÐ©ÔªËØÕ¹¿ª¡£

ͼÊý¾Ý¿â±¾ÖÊÒ²ÊÇÒ»¸ö´æ´¢ÏµÍ³£¬ËüºÍ³£¼ûµÄ KV ´æ´¢ÏµÍ³¡¢MySQL ´æ´¢ÏµÍ³µÄÏà±ÈÖ÷񻂿±ðÔÚÓÚÄ¿±êÊý¾ÝµÄÂß¼­¹ØÏµ²»Í¬ºÍ·ÃÎÊģʽ²»Í¬£¬¶ÔÓÚÊý¾ÝÄÚÔÚ¹ØÏµÊÇͼģÐÍÒÔ¼°ÔÚͼÉÏÓÎ×ßÀàºÍģʽƥÅäÀàµÄ²éѯ£¬±ÈÈçÉç½»¹ØÏµ²éѯ£¬Í¼Êý¾Ý¿â»áÓиü´óµÄÐÔÄÜÓÅÊÆºÍ¸ü¼Ó¼ò½à¸ßЧµÄ½Ó¿Ú¡£

2.1 Ϊʲô²»Ñ¡Ôñ¿ªÔ´Í¼Êý¾Ý¿â

ͼÊý¾Ý¿âÔÚ 90 Äê´ú³öÏÖ£¬Ö±µ½×î½ü¼¸ÄêÔÚÊý¾Ý±¬Õ¨µÄ´óÇ÷ÊÆÏ¿ìËÙ·¢Õ¹£¬°Ù»¨Æë·Å£»µ«Ä¿Ç°±È½Ï³ÉÊìµÄ´ó²¿·Ö¶¼ÊÇÃæ¶Ô´«Í³ÐÐÒµ½ÏСµÄÊý¾Ý¼¯ºÍ½ÏµÍµÄ·ÃÎÊÍÌͳ¡¾°£¬±ÈÈ翪ԴµÄ Neo4j Êǵ¥»ú¼Ü¹¹£»Òò´Ë£¬ÔÚ»¥ÁªÍø³¡¾°Ï£¬Í¨³£¶¼ÊÇ»ùÓÚÒÑÓеĻù´¡ÉèÊ©¶¨ÖÆÏµÍ³£º±ÈÈç Facebook »ùÓÚ MySQL ϵͳ·â×°ÁË Social Graph ϵͳ TAO£¬¼¸ºõ³ÐÔØÁË Facebook ËùÓÐÊý¾ÝÂß¼­£»Linkedln ÔÚ KV Ö®ÉϹ¹½¨ÁË Social Graph ·þÎñ£»Î¢²©ÊÇ»ùÓÚ Redis ¹¹½¨ÁË·ÛË¿ºÍ¹Ø×¢¹ØÏµ¡£

×Ö½ÚÌø¶¯µÄ Graph ÔÚÏß´æ´¢³¡¾°£¬ ÆäÐèÇóÒ²ÊÇÓÐ×ÔÉíÌØµãµÄ£¬¿ÉÒÔ×ܽáΪ£º

º£Á¿Êý¾Ý´æ´¢£º°ÙÒڵ㡢ÍòÒڱߵÄÊý¾Ý¹æÄ££»²¢ÇÒͼ·ûºÏÃÝÂÉ·Ö²¼£¬±ÈÈçÉÙÁ¿´ó V ·ÛË¿´ïµ½¼¸Ç§Íò£»

º£Á¿ÍÌÍ£º×î´ó¼¯Èº QPS ´ïµ½ÊýǧÍò£»

µÍÑÓ³Ù£ºÒªÇó·ÃÎÊÑÓ³Ù pct99 ÐèÒªÏÞÖÆÔÚºÁÃë¼¶£»

¶Á¶àдÉÙ£º¶ÁÁ÷Á¿ÊÇдÁ÷Á¿µÄ½Ó½ü°Ù±¶Ö®¶à£»

ÇáÁ¿²éѯ¶à£¬ÖØÁ¿²éѯÉÙ£º90%²éѯÊÇͼÉ϶þ¶ÈÒÔÄÚ²éѯ£»

ÈÝÔּܹ¹Ñݽø£ºÒªÄÜÖ§³Ö×Ö½ÚÌø¶¯³ÇÓòÍø¡¢¹ãÓòÍø¡¢ÖÞ¼ÊÍøÂçÖ®¼äÖ÷±¸ÈÝÔÖ¡¢ÒìµØ¶à»îµÈ²»Í¬ÈÝÔÖ²¿Êð·½°¸¡£

ÊÂʵÉÏ£¬ÎÒÃǵ÷ÑйýÁ˺ܶàÒµ½çϵͳ£¬ Õâ¸öÖ÷Ìâ¿ÉÒÔÔÙµ¥¶À·ÖÏíһƪÎÄÕ¡£µ«ÊÇ£¬Ãæ¶Ô×Ö½ÚÌø¶¯ÊÀ½ç¼¶µÄº£Á¿Êý¾ÝºÍº£Á¿²¢·¢ÇëÇó£¬ÓÃÍòÒÚ¼¶·Ö²¼Ê½´æ´¢¡¢Ç§Íò¸ß²¢·¢¡¢µÍÑÓ³Ù¡¢Îȶ¨¿É¿ØÕâÈý¸öÌõ¼þÒ»Æðȥɸѡ£¬Òµ½çÔÚÏßÉϱ»ÑéÖ¤Îȶ¨¿ÉÐÅÀµµÄ¿ªÔ´Í¼´æ´¢ÏµÍ³»ù±¾Ã»ÓÐÂú×ãµÄÁË£»ÁíÍ⣬¶ÔÓÚÒ»¸ö³ÐÔØ¹«Ë¾ºËÐÄÊý¾ÝµÄÖØÒªµÄ»ù´¡ÉèÊ©£¬ÊÇÖµµÃ³¤ÆÚͶÈë²¢ÇÒÉî¶ÈÕÆ¿ØµÄ¡£

Òò´Ë£¬ÎÒÃÇÔÚ 18 Äê 8 Ô·ݣ¬¿ªÊ¼´ÓµÚÒ»ÐдúÂ뿪ʼ̤ÉÏͼÊý¾Ý¿âµÄÂþÂþÕ÷³Ì£¬´Ó½â¾öÒ»¸ö×îºËÐĵͶÒôÉç½»¹ØÏµÎÊÌâÈëÊÖ£¬Öð½¥ÑݱäΪ֧³ÖÓÐÏòÊôÐÔͼÊý¾ÝÄ£ÐÍ¡¢Ö§³ÖдÈëÔ­×ÓÐÔ¡¢²¿·Ö Gremlin ͼ²éѯÓïÑÔµÄͨÓÃͼÊý¾Ý¿âϵͳ£¬ÔÚ¹«Ë¾ËùÓвúÆ·ÌåϵÂ䵨£¬ÎÒÃdzÆÖ®Îª ByteGraph¡£ÏÂÃæ£¬»á´ÓÊý¾ÝÄ£ÐÍ¡¢ÏµÍ³¼Ü¹¹µÈ¼¸¸ö²¿·Ö£¬ÓÉdzÈëÉîºÍ´ó¼Ò·ÖÏíÎÒÃǵŤ×÷¡£

2.2 ByteGraph µÄÊý¾ÝÄ£ÐÍºÍ API

Êý¾ÝÄ£ÐÍ

¾ÍÏñÎÒÃÇÔÚʹÓà SQL Êý¾Ý¿âʱ£¬ÏÈÒªÍê³ÉÊý¾Ý¿â Schema ÒÔ¼°·¶Ê½Éè¼ÆÒ»Ñù£¬ByteGraph Ò²ÐèÒªÓû§Íê³ÉÀàËÆµÄÊý¾ÝÄ£ÐͳéÏ󣬵«Í¼µÄÊý¾Ý³éÏó¸ü¼Ó¼òµ¥£¬»ù±¾ÉÏÊǰÑÊý¾ÝÖ®¼äµÄ¹ØÏµ¡°·­Ò롱³ÉÓÐÏòÊôÐÔͼ£¬ÎÒÃdzÆÖ®Îª¡°¹¹Í¼¡±¹ý³Ì¡£

±ÈÈçÔÚÇ°ÃæÌáµ½µÄ£¬Èç¹ûÏë°ÑÓû§¹ØÏµ´æÈë ByteGraph£¬µÚÒ»²½¾ÍÊÇÐèÒª°ÑÓû§³éÏóΪµã£¬µÚ¶þ²½°Ñ"¹Ø×¢¹ØÏµ¡±¡¢¡°ºÃÓѹØÏµ¡±³éÏóΪ±ß¾ÍÍêÈ«¸ã¶¨ÁË¡£ÏÂÃæ£¬ÎÒÃǾʹӴúÂë²ãÃæ½éÉÜϵã±ßµÄÊý¾ÝÀàÐÍ¡£

µã£¨Vertex£©

µãÊÇͼÊý¾Ý¿âµÄ»ù±¾ÔªËØ£¬Í¨³£·´Ó³µÄÊǾ²Ì¬ÐÅÏ¢¡£ÔÚ ByteGraph ÖУ¬µã°üº¬ÒÔÏÂ×ֶΣº

- µãµÄid(uint64_t): ±ÈÈçÓû§id×÷Ϊһ¸öµã

- µãµÄtype(uint32_t): ±ÈÈçappID×÷ΪµãµÄtype

- µãµÄÊôÐÔ£¨KV ¶Ô£©£º±ÈÈç 'name': string£¬'age': int, 'gender': male£¬µÈ×Ô¶¨ÒåÊôÐÔ

- [id, type]Ψһ¶¨ÒåÒ»¸öµã

 

±ß£¨Edge£©

Ò»Ìõ±ßÓÉÁ½¸öµãºÍµãÖ®¼äµÄ±ßµÄÀàÐÍ×é³É£¬±ß¿ÉÒÔÃèÊöµãÖ®¼äµÄ¹ØÏµ£¬±ÈÈçÓû§ A ¹Ø×¢ÁËÓû§ B £¬¿ÉÒÔÓÃÒÔÏÂ×Ö¶ÎÀ´ÃèÊö£º

- Á½¸öµã£¨Vertex£©: ±ÈÈçÓû§AºÍÓû§B

- ±ßµÄÀàÐÍ(string): ±ÈÈç¡°¹Ø×¢¡±

- ±ßµÄʱ¼ä´Á(uint64_t)£ºÕâ¸ötÖµÊÇÒµÎñ×Ô¶¨Ò庬ÒåµÄ£¬±ÈÈç¿ÉÒÔÓÃÓڼǼ¹Ø×¢·¢ÉúµÄʱ¼ä´Á

- ±ßÊôÐÔ£¨KV¶Ô£©£º±ÈÈç'ts_us': int64 ÃèÊö¹ØÏµ´´½¨Ê±¼äµÄÊôÐÔ£¬ÒÔ¼°ÆäËûÓû§×Ô¶¨ÒåÊôÐÔ

 

±ßµÄ·½Ïò

ÔÚ ByteGraph µÄÊý¾ÝÄ£ÐÍÖУ¬±ßÊÇÓз½ÏòµÄ£¬Ä¿Ç°Ö§³Ö 3 Öֱߵķ½Ïò:

- ÕýÏò±ß£ºÈç A ¹Ø×¢ B(A -> B)

- ·´Ïò±ß£ºÈç B ±» A ¹Ø×¢(B <- A)

- Ë«Ïò±ß£ºÈç A Óë B ÊǺÃÓÑ(A <-> B)

 

³¡¾°Ê¹ÓÃαÂë¾ÙÀý

¹¹Í¼Íê±Ïºó£¬ÎÒÃǾͿÉÒÔ°ÑÒµÎñÂß¼­Í¨¹ý Gremlin ²éѯÓïÑÔÀ´ÊµÏÖÁË£»Îª±ãÓÚ´ó¼ÒÀí½â£¬ÎÒÃÇÁоټ¸ÖÖµäÐ͵ij¡¾°ÎªÀý¡£

³¡¾°Ò»£º¼Ç¼¹Ø×¢¹ØÏµ A ¹Ø×¢ B

// ´´½¨Óû§AºÍB£¬¿ÉÒÔʹÓà .property('name', 'Alice') Óï¾äÌí¼ÓÓû§ÊôÐÔ

g.addV().property("type", A.type).property("id", A.id)

g.addV().property("type", B.type).property("id", B.id)

// ´´½¨¹Ø×¢¹ØÏµ A -> B£¬ÆäÖÐaddE("¹Ø×¢")ÖÐÖ¸¶¨Á˱ߵÄÀàÐÍÐÅÏ¢£¬fromºÍto·Ö±ðÖ¸¶¨ÆðµãºÍÖյ㣬

g.addE("¹Ø×¢").from(A.id, A.type).to(B.id, B.type).property("ts_us", now)

 

³¡¾°¶þ£º²éѯ A ¹Ø×¢µÄÇÒ¹Ø×¢ÁË C µÄËùÓÐÓû§

Óû§ A ½øÈëÓû§ C µÄÏêÇéÒ³Ãæ£¬Ïë¿´¿´ A ºÍ C Ö®¼äµÄ¶þ¶ÈÖмä½ÚµãÓÐÄÄЩ£¬±ÈÈç A->B,B->C£¬B ÔòΪÖмä½Úµã¡£

// where()±íʾ¶ÔÓÚÉÏÒ»¸östepµÄÿ¸öÖ´Ðнá¹û£¬Ö´ÐÐ×Ó²éѯ¹ýÂËÌõ¼þ£¬Ö»±£Áô¹Ø×¢ÁËCµÄÓû§¡£

g.V().has("type", A.type).has("id", A.id).out("¹Ø×¢").where(out("¹Ø×¢").has("type", C.type).has("id", C.id).count().is(gte(1)))

 

³¡¾°Èý£º²éѯ A µÄºÃÓѵĺÃÓÑ£¨¶þ¶È¹ØÏµ£©

// both("ºÃÓÑ")Ï൱ÓÚin("ºÃÓÑ")ºÍout("ºÃÓÑ")µÄºÏ¼¯

g.V().has("type", A.type).has("id", A.id).both("ºÃÓÑ").both("ºÃÓÑ").toSet()

 

2.3 ϵͳ¼Ü¹¹

Ç°Ãæ¼¸¸öÕ½ڣ¬´ÓÓû§½Ç¶È½éÉÜÁË ByteGraph µÄÊÊÓó¡¾°ºÍ¶ÔÍâʹÓÃ×ËÊÆ¡£ÄÇ ByteGraph ¼Ü¹¹ÊÇÔõÑùµÄ£¬ÄÚ²¿ÊÇÈçºÎ¹¤×÷µÄÄØ£¬ÕâÒ»½Ú¾ÍÀ´´ÓÄÚ²¿ÊµÏÖÀ´×÷½øÒ»²½½éÉÜ¡£

ÏÂÃæÕâÕÅͼչʾÁË ByteGraph µÄÄÚ²¿¼Ü¹¹£¬ÆäÖÐ bg ÊÇ ByteGraph µÄËõд¡£

¾ÍÏñ MySQL ͨ³£¿ÉÒÔ·ÖΪ SQL ²ãºÍÒýÇæ²ãÁ½²ãÒ»Ñù£¬ByteGraph ×ÔÉ϶øÏ·ÖΪ²éѯ²ã (bgdb)¡¢´æ´¢/ÊÂÎñÒýÇæ²ã£¨bgkv£©¡¢´ÅÅÌ´æ´¢²ãÈý²ã£¬Ã¿²ã¶¼ÊÇÓɶà¸ö½ø³ÌʵÀý×é³É¡£ÆäÖÐ bgdb ²ãÓë bgkv ²ã»ìºÏ²¿Ê𣬴ÅÅÌ´æ´¢²ã¶ÀÁ¢²¿Êð£¬ÎÒÃÇÏêϸ½éÉÜÿһ²ãµÄ¹Ø¼üÉè¼Æ¡£

²éѯ²ã(bgdb)

bgdb ²ãºÍ MySQL µÄ SQL ²ãÒ»Ñù£¬Ö÷Òª¹¤×÷ÊÇ×ö¶ÁдÇëÇóµÄ½âÎöºÍ´¦Àí£»ÆäÖУ¬Ëùν¡°´¦Àí¡±¿ÉÒÔ·ÖΪÒÔÏÂÈý¸ö²½Ö裺

½«¿Í»§¶Ë·¢À´µÄ Gremlin ²éѯÓï¾ä×öÓï·¨½âÎö£¬Éú³ÉÖ´Ðмƻ®£»

²¢¸ù¾ÝÒ»¶¨µÄ·ÓɹæÔò£¨ÀýÈçÒ»ÖÂÐÔ¹þÏ££©ÕÒµ½Ä¿±êÊý¾ÝËùÔڵĴ洢½Úµã£¨bgkv£©£¬½«Ö´Ðмƻ®ÖеĶÁдÇëÇó·¢Ë͸ø ¶à¸ö bgkv£»

½« bgkv ¶Áд½á¹û»ã×ÜÒÔ¼°¹ýÂË´¦Àí£¬µÃµ½×îÖÕ½á¹û£¬·µ»Ø¸ø¿Í»§¶Ë¡£

bgdb ²ãûÓÐ״̬£¬¿ÉÒÔˮƽÀ©ÈÝ£¬Óà Go ÓïÑÔ¿ª·¢¡£

´æ´¢/ÊÂÎñÒýÇæ²ã£¨bgkv)

bgkv ²ãÊÇÓɶà¸ö½ø³ÌʵÀý×é³É£¬Ã¿¸öʵÀý¹ÜÀíÕû¸ö¼¯ÈºÊý¾ÝµÄÒ»¸ö×Ó¼¯£¨shard / partition)¡£

bgkv ²ãµÄʵÏֺ͹¦ÄÜÓеãÀàËÆÄÚ´æÊý¾Ý¿â£¬Ìṩ¸ßÐÔÄܵÄÊý¾Ý¶Áд¹¦ÄÜ£¬ÆäÌØµãÊÇ£º

½Ó¿Ú²»Í¬£ºÖ»Ìṩµã±ß¶Áд½Ó¿Ú£»

Ö§³ÖËã×ÓÏÂÍÆ£ºÍ¨¹ý°Ñ¼ÆËã(Ëã×Ó)ÒÆ¶¯µ½´æ´¢£¨bgkv£©ÉÏ£¬Äܹ»ÓÐЧÌáÉý¶ÁÐÔÄÜ£»

¾ÙÀý£º±ÈÈçij¸ö´ó V ×î½üÒ»ÄêÒ»Ö±ÔÚÕÇ·Û£¬bgkv Ö§³Ö²éѯ×î½üµÄ 100 ¸ö·ÛË¿£¬Ôò²»±Ø¶Á³öËùÓеİÙÍò·ÛË¿¡£

»º´æ´æ´¢Óлú½áºÏ£ºÆä×÷Ϊ KV store µÄ»º´æ²ã£¬Ìṩ»º´æ¹ÜÀíµÄ¹¦ÄÜ£¬Ö§³Ö»º´æ¼ÓÔØ¡¢»»³ö¡¢»º´æºÍ´ÅÅÌͬ²½Òì²½ sync µÈ¸´ÔÓ¹¦ÄÜ¡£

´ÓÉÏÊöÃèÊö¿ÉÒÔ¿´³ö£¬bgkv µÄÐÔÄܺÍÄÚ´æÊ¹ÓÃЧÂÊÊǷdz£¹Ø¼üµÄ£¬Òò´Ë²ÉÓà C++ ±àд¡£

´ÅÅÌ´æ´¢²ã(KV Cluster)

ΪÁËÄܹ»Ìṩº£Á¿´æ´¢¿Õ¼äºÍ½Ï¸ßµÄ¿É¿¿ÐÔ¡¢¿ÉÓÃÐÔ£¬Êý¾Ý±ØÐë×îÖÕÂäÈë´ÅÅÌ£¬ÎÒÃÇµ×²ã´æ´¢ÊÇÑ¡ÔñÁ˹«Ë¾×ÔÑеķֲ¼Ê½ KV store¡£

ÈçºÎ°Ñͼ´æ´¢ÔÚ KV Êý¾Ý¿âÖÐ

ÉÏһС½Ú£¬Ö»ÊǽéÉÜÁË ByteGraph ÄÚ²¿Èý²ãµÄ¹ØÏµ£¬Ï¸ÐĵĶÁÕß¿ÉÄÜÒѾ­·¢ÏÖ£¬ByteGraph ÍⲿÊÇͼ½Ó¿Ú£¬µ×²ãÊÇÒÀÀµ KV ´æ´¢£¬ÄÇôÎÊÌâÀ´ÁË£ºÈçºÎ°Ñ¶¯éü°ÙÍò·ÛË¿µÄͼÊý¾Ý´æ´¢ÔÚÒ»¸ö KV ϵͳÉÏÄØ£¿

ÔÚ×Ö½ÚÌø¶¯µÄÒµÎñ³¡¾°ÖУ¬´æÔںܶà·ÃÎÊÈȶȺ͡°Êý¾ÝÃܶȡ±¼«¸ßµÄ³¡¾°£¬±ÈÈç¶¶ÒôµÄ´ó V¡¢ÈÈÃŵÄÎÄÕµȣ¬Æä·ÛË¿Êý»òÕßµãÔÞÊý»á³¬¹ýǧÍò¼¶±ð£»µ«×÷Ϊ KV store£¬Ï£ÍûÒµÎñ·½µÄ KV ¶ÔµÄ´óС£¨Byte Êý£©ÊÇ¿ØÖÆÔÚ KB Á¿¼¶µÄ£¬ÇÒ×îºÃÊÇ´óС¾ùÔȵģº¶ÔÓÚÌ«´óµÄ value£¬ÊÇ»á˲¼ä´òÂú I/O ·¾¶µÄ£¬ÎÞ·¨±£Ö¤ÏßÉÏÎȶ¨ÐÔ£»¶ÔÓÚÌØ±ðСµÄ value£¬Ôò´æ´¢Ð§ÂʱȽϵ͡£ÊÂʵÉÏ£¬Êý¾Ý´óС²»¾ùÔÈÕâ¸öÎÊÌâÀ§ÈÅÁ˺ܶàÒµÎñÍŶӣ¬ÔÚÏßÉÏÒ²»á¾­³£±¬³öʹʡ£

¶ÔÓÚÒ»¸öÓÐǧÍò·ÛË¿µÄ¶¶Òô´ó V£¬Ï൱ÓÚͼÖеÄij¸öµãÓÐǧÍòÌõ±ßµÄ³ö¶È£¬²»½öÒªÄÜ´æ´¢ÏÂÀ´£¬¶øÇÒÒªÄÜÂú×ãÏßÉϺÁÃë¼¶µÄÔöɾ²é¸Ä£¬ÄÇô ByteGraph ÊÇÈçºÎ½â¾öÕâ¸öÎÊÌâµÄÄØ£¿

˼·ÆäʵºÜ¼òµ¥£¬×ܽáÀ´Ëµ£¬¾ÍÊDzÉÓÃÁé»îµÄ±ß¾ÛºÏ·½Ê½£¬Ê¹µÃ KV store ÖÐµÄ value ´óСÊǾùÔȵ쬾ßÌå¿ÉÒÔÓÃÒÔÏÂËÄÌõÀ´ÃèÊö£º

Ò»¸öµã£¨Vertex£©ºÍÆäËùÓÐÏàÁ¬µÄ±ß×é³ÉÁËÒ»Êý¾Ý×飨Group£©£»²»Í¬µÄÆðµãºÍ¼°ÆäÖÕµãÊÇÊôÓÚ²»Í¬µÄ Group£¬ÊÇ´æ´¢ÔÚ²»Í¬µÄ KV ¶ÔµÄ£»±ÈÈçÓû§ A µÄ·ÛË¿ºÍÓû§ B µÄ·ÛË¿£¬¾ÍÊǷֳɲ»Í¬ KV ´æ´¢£»

¶ÔÓÚijһ¸öµãµÄ¼°Æä³ö±ß£¬µ±³ö¶ÈÊýÁ¿±È½ÏС£¨KB ¼¶±ð£©£¬½«ÆäËùÓгö¶È¼´ËùÓÐÖÕµãÐòÁл¯ÎªÒ»¸ö KV ¶Ô£¬ÎÒÃdzÆÖ®ÎªÒ»¼¶´æ´¢·½Ê½£¨ºóÃæ»áÕ¹¿ªÃèÊö£©£»

µ±Ò»¸öµãµÄ³ö¶ÈÖð½¥Ôö¶à£¬±ÈÈçÒ»¸öÆÕͨÓû§Ö𽥳ɳ¤Îª¶¶Òô´ó V£¬ÎÒÃÇÔò²ÉÓ÷ֲ¼Ê½ B-Tree ×éÖ¯Õâ°ÙÍò·ÛË¿£¬ÎÒÃdzÆÖ®Îª¶þ¼¶´æ´¢£»

Ò»¼¶´æ´¢ºÍ¶þ¼¶´æ´¢Ö®¼ä¿ÉÒÔÔÚÏß²¢·¢°²È«µÄ»¥ÏàÇл»£»

Ò»¼¶´æ´¢¸ñʽ

Ò»¼¶´æ´¢¸ñʽÖУ¬Ö»ÓÐÒ»¸ö KV ¶Ô£¬key ºÍ value µÄ±àÂ룺

- key: ij¸öÆðµã id + Æðµã type + ±ß type

- value: ´ËÆðµãµÄËùÓгö±ß£¨Edge£©¼°Æä±ßÉÏÊôÐÔ¾ÛºÏ×÷Ϊ value£¬µ«²»°üÀ¨ÖÕµãµÄÊôÐÔ

 

¶þ¼¶´æ´¢£¨µãµÄ³ö¶È´óÓÚãÐÖµ£©

Èç¹ûÒ»¸ö´ó V ·è¿ñÕÇ·Û£¬Ôò´æ´¢·ÛË¿µÄ value ¾Í»áÔ½À´Ô½´ó£¬½â¾öÕâ¸öÎÊÌâµÄ˼·ҲºÜÆÓËØ£º²ð³É¶à¸ö KV ¶Ô¡£

µ«ÈçºÎ²ðÄØ£¿ByteGraph µÄ·½Ê½¾ÍÊǰÑËùÓгö¶ÈºÍÖÕµã²ð³É¶à¸ö KV ¶Ô£¬ËùÓÐ KV ¶ÔÐγÉÒ»¿ÃÂß¼­Éϵķֲ¼Ê½ B-Tree£¬Ö®ËùÒÔ˵¡°Âß¼­Éϵġ±£¬ÊÇÒòΪÊ÷ÖÐµÄ½Úµã¹ØÏµÊÇ¿¿ KV ÖÐ key À´Ö¸ÏòµÄ£¬²¢·ÇÄÚ´æÖ¸Õ룻B-Tree ÊÇ·Ö²¼Ê½µÄ£¬ÊÇÖ¸¹¹³ÉÕâ¿ÃÊ÷µÄ¸÷¼¶½ÚµãÊÇ·Ö²¼ÔÚ¼¯Èº¶à¸öʵÀýÉϵ쬲¢²»Êǵ¥»úË÷Òý¹ØÏµ¡£¾ßÌå¹ØÏµÈçÏÂͼËùʾ£º

ÆäÖУ¬Õû¿Ã B-Tree Óɶà×é KV ¶Ô×é³É£¬°´ÕÕ¹ØÏµ¿ÉÒÔ·ÖΪÈýÖÖÊý¾Ý£º

¸ù½Úµã£º¸ù½Úµã±¾ÖÊÊÇÒ»¸ö KV ϵͳÖеÄÒ»¸ö key£¬Æä±àÂ뷽ʽºÍÒ»¼¶´æ´¢ÖÐµÄ key Ïàͬ

Meta Êý¾Ý£º

Meta Êý¾Ý±¾ÖÊÊÇÒ»¸ö KV ÖÐµÄ value£¬ºÍ¸ù½Úµã×é³ÉÁË KV ¶Ô£»

Meta ÄÚ²¿´æ´¢Á˶à¸ö PartKey£¬ÆäÖÐÿ¸ö PartKey ¶¼ÊÇÒ»¸ö KV ¶ÔÖÐµÄ key£¬Æä¶ÔÓ¦µÄ value Êý¾Ý¾ÍÊÇÏÂÃæ½éÉÜµÄ Part Êý¾Ý£»

Part Êý¾Ý

¶ÔÓÚ¶þ¼¶´æ´¢¸ñʽ£¬´æÔÚ¶à¸ö Part£¬Ã¿¸ö Part ´æ´¢²¿·Ö³ö±ßµÄÊôÐÔºÍÖÕµã ID

ÿ¸ö Part ¶¼ÊÇÒ»¸ö KV ¶ÔµÄ value£¬Æä¶ÔÓ¦µÄ key ´æ´¢ÔÚ Meta ÖС£

´ÓÉÏÊöÃèÊö¿ÉÒÔ¿´³ö£¬¶ÔÓÚÒ»¸ö³ö¶ÈºÜ¶àµÄµãºÍÆä±ßµÄÊý¾Ý£¨±ÈÈç´ó V ºÍÆä·ÛË¿£©£¬ÔÚ ByteGraph ÖУ¬ÊǴ洢Ϊ¶à¸ö KV µÄ£¬Ãæ¶ÔÔöɾ²é¸ÄµÄÐèÇ󣬶¼ÐèÒªÔÚ B-Tree ÉÏ×ö¶þ·Ö²éÕÒ¡£Ïà±ÈÓÚÒ»Ìõ±ßÒ»¸ö KV ¶Ô»òÕßËùÓбߴ洢³ÉÒ»¸ö KV ¶ÔµÄ·½Ê½£¬B-Tree µÄ×éÖ¯·½Ê½Äܹ»ÓÐЧµÄÔÚ¶Á·Å´óºÍд·Å´óÖ®¼ä×öһЩ¶¯Ì¬µ÷Õû¡£

µ«ÔÚʵ¼ÊÒµÎñ³¡¾°Ï£¬·ÛË¿»á´¦ÓÚ¶¯Ì¬±ä»¯Ö®ÖУºÐµ®ÉúµÄ´ó V »á¿ìËÙÐÂÔö·ÛË¿£¬ÓÐЩ´ó V »á³ÖÐøµô·Û£»Òò´Ë£¬´æ´¢·½Ê½»áÔÚÒ»¼¶´æ´¢ºÍ¶þ¼¶´æ´¢Ö®¼äת»»£¬²¢ÇÒ B-Tree »á³ÖÐøµÄ·ÖÁÑ»òÕߺϲ¢£»Õâ¾Í»áÒý·¢·Ö²¼Ê½µÄ²¢·¢Ôöɾ²é¸ÄÒÔ¼°·ÖÁѺϲ¢µÈ¸´ÔÓµÄÎÊÌ⣬Óлú»á¿ÉÒÔÔÙµ¥¶À·ÖÏíÏÂÕâ¸öÓÐȤµÄÉè¼Æ¡£

ByteGraph ºÍ KV store µÄ¹ØÏµ£¬ÀàËÆÎļþϵͳºÍ¿éÉ豸µÄ¹ØÏµ£¬¿éÉ豸¸ºÔ𽫴洢×ÊÔ´³Ø»¯²¢Ìṩ Low Level µÄ¶Áд½Ó¿Ú£¬ÎļþϵͳÔÚ¿éÉ豸ÉϰÑÔªÊý¾ÝºÍÊý¾Ý×éÖ¯³É¸÷ÖÖÊ÷µÄË÷Òý½á¹¹£¬²¢·â×°·á¸»µÄ POSIX ½Ó¿Ú£¬±ãÓÚÍⲿʹÓá£

2.4 һЩÎÊÌâÉîÈë̽ÌÖ

µÚÈý½Ú½éÉÜÁË ByteGraph µÄÄÚÔڼܹ¹£¬ÏÖÔÚÎÒÃǸü½øÒ»²½£¬À´¿´¿´Ò»¸ö·Ö²¼Ê½´æ´¢ÏµÍ³£¬ÔÚÃæ¶Ô×Ö½ÚÌø¶¯ÍòÒÚÊý¾ÝÉÏÒÚ²¢·¢µÄÒµÎñ³¡¾°ÏÂÁ½¸öÎÊÌâµÄ·ÖÎö¡£

ÈȵãÊý¾Ý¶Áд½â¾ö

ÈȵãÊý¾ÝÔÚ×Ö½ÚÌø¶¯µÄÏßÉÏÒµÎñÖй㷺´æÔÚ£ºÈȵãÊÓÆµ¡¢ÈȵãÎÄÕ¡¢´ó V Óû§¡¢Èȵã¹ã¸æµÈµÈ£»ÈȵãÊý¾Ý¿ÉÄÜ»á³öÏÖ˲ʱ³öÏÖ´óÁ¿¶Áд¡£ByteGraph ÔÚÏßÉÏÒµÎñµÄʵ¼ùÖУ¬´òÄ¥³öÒ»ÕûÌ×Ó¦¶ÔÐÔ·½°¸¡£

Èȵã¶Á

Èȵã¶ÁµÄ³¡¾°Ëæ´¦¿É¼û£¬±ÈÈçÏßÉÏʵ¼Ê³¡¾°£ºÄ³¸öÈȵãÊÓÆµ±»Æµ·±Ë¢Ð£¬²é¿´µãÔÞÊýÁ¿µÈ¡£ÔÚÕâÖÖ³¡¾°Ï£¬Òâζ×Å·ÃÎÊÓкÜÇ¿µÄÊý¾Ý¾Ö²¿ÐÔ£¬»º´æÃüÖÐÂÊ»áºÜ¸ß£¬Òò´Ë£¬ÎÒÃÇÉè¼ÆÊµÏÖÁ˶༶µÄ Query Cache »úÖÆÒÔ¼°ÈȵãÇëÇóת·¢»úÖÆ£»ÔÚ bgdb ²éѯ²ã»º´æ²éѯ½á¹û£¬ bgdb µ¥½Úµã»º´æÃüÖжÁÐÔÄÜ 20w QPS ÒÔÉÏ£¬¶øÇÒ¶à¸ö bgdb ¿ÉÒÔ²¢·¢´¦Àíͬһ¸öÈȵãµÄ¶ÁÇëÇó£¬ÔòϵͳÕûÌåÓ¦¶ÔÈȵã¶ÈµÄ¡°µ¯ÐÔ¡±ÊǷdz£³ä×ãµÄ¡£

Èȵãд

Èȵã¶ÁºÍÈȵãдͨ³£ÊÇÏà°é¶øÉúµÄ£¬ÈȵãдµÄÀý×ÓÒ²ÊÇËæ´¦¿É¼û£¬±ÈÈ磺ÈȵãÐÂÎű»·è¿ñת·¢£¬ ÈȵãÊÓÆµ±»·è¿ñµãÔ޵ȵȡ£¶ÔÓÚÊý¾Ý¿â¶øÑÔ£¬ÈȵãдÈëµ¼ÖµÄÐÔÄÜÍË»¯µÄ±³ºóÔ­Òòͨ³£ÓÐÁ½¸ö£ºÐÐËø³åÍ»¸ß»òÕß´ÅÅÌдÈë IOPS ±»´òÂú£¬ÎÒÃÇ·Ö±ðÀ´·ÖÎö£º

ÐÐËø³åÍ»¸ß£ºÄ¿Ç° ByteGraph Êǵ¥ÐÐÊÂÎñÄ£ÐÍ£¬Ö»ÓÐÄÚ´æ½á¹¹Ëø£¬Õâ¸öËøµÄ²¢·¢Á¿ÊÇÿÃëǧÍò¼¶£¬»ù±¾²»»á¹¹³ÉдÈëÆ¿¾±£»

´ÅÅÌ IOPS ±»´òÂú£º

IOPS£¨I/O Count Per Second£©µÄ¸ÅÄ´ÅÅÌÿÃëµÄдÈëÇëÇóÊýÁ¿ÊÇÓÐÉÏÏ޵쬲»Í¬ÐͺŵĹÌ̬ӲÅÌµÄ IOPS ¸÷Ò죬µ«¶¼ÓÐÒ»¸öÉÏÏÞ£¬µ±ÉÏÓÎдÈëÁ÷Á¿³¬¹ýÕâ¸öãÐֵʱºò£¬ÇëÇó¾Í»áÅŶӣ¬Ôì³ÉÕû¸öÊý¾Ýͨ·¶ÂÈû£¬Ñӳپͻá³ÊÏÖÖ¸ÊýÉÏÕÇ×îÖÕ·þÎñ±ä³É²»¿ÉÓá£

Group Commit ½â¾ö·½°¸£ºGroup Commit ÊÇÊý¾Ý¿âÖеÄÒ»¸ö³ÉÊìµÄ¼¼Êõ·½°¸£¬¼òµ¥À´½²£¬¾ÍÊǶà¸öдÇëÇóÔÚ bgkv ÄÚ´æÖлã¾ÛÆðÀ´£¬¾Û³ÉÒ»¸ö Batch дÈë KV store£¬Ôò¶ÔÍâÌåÏÖµÄдÈëËÙÂʾÍÊÇ BatchSize * IOPS¡£

¶ÔÓÚij¸ö¶ÀÁ¢Êý¾ÝÔ´À´Ëµ£¬Ò»°ãÈȵãдµÄÇëÇó±ÈÈȵã¶Á»áÉٺܶ࣬һ°ã²»»á³¬¹ý 10K QPS£¬Ä¿Ç° ByteGraph ÏßÉÏ»¹Ã»ÓгöÏÖ¹ýÈȵãдÎÊÌâÎÊÌâ¡£

ͼµÄË÷Òý

¾ÍÏñ¹ØÏµÐÍÊý¾Ý¿âÒ»Ñù£¬Í¼Êý¾Ý¿âÒ²¿ÉÒÔ¹¹½¨Ë÷Òý¡£Ä¬ÈÏÇé¿öÏ£¬¶ÔÓÚͬһ¸öÆðµã£¬ÎÒÃÇ»á²ÉÓñßÉϵÄÊôÐÔ£¨Ê±¼ä´Á£©×÷ΪÖ÷¼üË÷Òý£»µ«ÎªÁ˼ÓËÙ²éѯ£¬ÎÒÃÇÒ²Ö§³ÖÆäËûÔªËØ£¨Öյ㡢ÆäËûÊôÐÔ£©À´¹¹½¨¶þ¼¶µÄ¾Û´ØË÷Òý£¬ÕâÑùºÜ¶à²éÕҾʹÓÈ«²¿±éÀúÓÅ»¯³ÉÁ˶þ·Ö²éÕÒ£¬Ê¹µÃ²éѯËÙ¶È´ó·ùÌáÉý¡£

ByteGraph ĬÈϰ´ÕÕ±ßÉϵÄʱ¼ä´Á£¨ts£©À´ÅÅÐò´æ´¢£¬Òò´Ë¶ÔÓÚÒÔÏÂÇëÇ󣬲éѯЧÂʺܸߣº

²éѯ×î½üµÄÈô¸É¸öµãÔÞ

²éѯij¸öÖ¸¶¨Ê±¼ä·¶Î§´°¿ÚÄڼӵĺÃÓÑ

·½ÏòµÄË÷Òý¿ÉÄÜÓÐЩ·Ñ½â£¬¾Ù¸öÀý×Ó˵Ã÷Ï£º¸ø¶¨Á½¸öÓû§À´²éѯÊÇ·ñ´æÔÚ·ÛË¿¹ØÏµ£¬ÆäÖÐÒ»¸öÓû§ÊÇ´ó V£¬ÁíÒ»¸öÊÇÆÕͨÓû§£¬´ó V µÄ·ÛË¿¿É´ïǧÍò£¬µ«ÆÕͨÓû§µÄ¹Ø×¢ÕßÒ»°ã²»»áºÜ¶à£»Òò´Ë£¬Èç¹ûÓÃÆÕͨÓû§×÷ΪÆðµã´ó V ×÷ΪÖյ㣬²éѯ´ú¼Û¾Í»áµÍºÜ¶à¡£Æäʵ£¬ºÜ¶à³¡¾°Ï£¬ÎÒÃÇ»¹ÐèÒªÓû§Äܹ»¸ù¾ÝÈÎÒâÒ»¸öÊôÐÔÀ´¹¹½¨Ë÷Òý£¬Õâ¸öÒ²ÊÇÎÒÃÇÕýÔÚÖ§³ÖµÄÖØÒª¹¦ÄÜÖ®Ò»¡£

2.5 δÀ´Ì½Ë÷

¹ýÈ¥µÄÒ»Äê°ëʱ¼äÀByteGraph ¶¼ÊÇÔÚÓÐÏÞµÄÈËÁ¦Çé¿öÏ£¬ÓÅÏÈÂú×ãÒµÎñÐèÇó£¬ÔÚϵͳÄÜÁ¦¹¹½¨·½Ã滹ÊÇÓÐЩ±¡ÈõµÄ£¬ÓдóÁ¿ÎÊÌâ¶¼ÐèÒªÔÚδÀ´Í»ÆÆ½â¾ö£º

´Óͼ´æ´¢µ½Í¼Êý¾Ý¿â£º¶ÔÓÚÒ»¸öÊý¾Ý¿âϵͳ£¬ÊÇ·ñÖ§³Ö ACID µÄÊÂÎñ£¬ÊÇÒ»¸öºËÐÄÎÊÌ⣬Ŀǰ ByteGraph Ö»½â¾öÁËÔ­×ÓÐÔºÍÒ»ÖÂÐÔ£¬¶ÔÓÚ×ÔӵĸôÀëÐÔ»¹ÍêȫûÓд¥Åö£¬ÕâÊÇÒ»¸ö·Ç³£¸´ÔÓµÄÎÊÌ⣻ÁíÍ⣬ÖйúÐÅͨԺ·¢²¼Á˹úÄÚͼÊý¾Ý¿â¹¦Äܰׯ¤Ê飬ÒԴ˱ê×¼£¬Èç¹ûÏë×öºÃÒ»¸ö¹¦ÄÜÍ걸µÄ¡°Êý¾Ý¿â¡±ÏµÍ³£¬ÎÒÃÇÃæ¶ÔµÄ»¹ÊÇÐdz½´óº££»

±ê×¼µÄͼ²éѯÓïÑÔ£ºÄ¿Ç°£¬Í¼Êý¾Ý¿âµÄ²éѯÓïÑÔÒµ½ç»¹Î´Ðγɱê×¼£¨GQL ¼´½«ÔÚ 2020 Äê·¢²¼£©£¬ByteGraph Ñ¡Ôñ Apache¡¢AWS ¡¢°¢ÀïÔÆµÄ Gremlin ÓïÑÔÌåϵ£¬µ«Ä¿Ç°Ò²Ö»ÊÇÖ§³ÖÁËÒ»¸ö×Ó¼¯£¬¸ü¶àµÄÓï·¨Ö§³Ö¡¢¸üÉîÈëµÄ²éѯÓÅ»¯»¹Î´¿ªÕ¹£»

Cloud Native ´æ´¢¼Ü¹¹Ñݽø£ºÏÖÔÚ ByteGraph »¹Êǹ¹½¨Óë KV ´æ´¢Ö®ÉÏ£¬¶ÀÕ¼ÎïÀí»úÈ«²¿×ÊÔ´£»´Ó×ÊÔ´µ¯ÐÔ²¿Êð¡¢ÔËάÍйܵȽǶÈÊÇ·ñÓÐÆäËû¼Ü¹¹ÑݽøµÄ̽Ë÷¿ÉÄÜ£¬´Ó²éѯµ½ÊÂÎñÔÙµ½´ÅÅÌ´æ´¢ÊÇ·ñÓÐÉî¶È´¹Ö±ÕûºÏÓÅ»¯µÄ¿Õ¼ä£¬Ò²ÊÇÒ»¸öûÓб»»Ø´ðµÄÎÊÌ⣻

ÏÖÔÚ ByteGraph ÊÇÔÚ OLTP ³¡¾°Ï³ÐÔØÁË´óÁ¿ÏßÉÏÊý¾Ý£¬ÕâЩÊý¾ÝͬʱҲ»áÓ¦Óõ½ÍƼö¡¢·ç¿ØµÈ¸´ÔÓ·ÖÎöºÍͼ¼ÆË㳡¾°£¬ÈçºÎ°Ñ TP ºÍÇáÁ¿ AP ²éѯÈÚºÏÔÚÒ»Æð£¬¾ß±¸²¿·Ö HTAP ÄÜÁ¦£¬Ò²ÊÇÒ»¸ö¿Õ¼ä¹ãÀ«µÄÀ¶º£ÁìÓò¡£

3. ͼ¼ÆËãϵͳ½éÉÜÓëʵ¼ù

3.1 ͼ¼ÆËã¼¼Êõ±³¾°

ͼ¼ÆËã¼ò½é

ͼÊý¾Ý¿âÖØµãÃæ¶Ô OLTP ³¡¾°£¬ÒÔÊÂÎñΪºËÐÄ£¬Ç¿µ÷Ôöɾ²é¸Ä²¢ÖØ£¬²¢ÇÒÒ»¸ö²éѯÍùÍùÖ»ÊÇÉæ¼°µ½Í¼ÖеÄÉÙÁ¿Êý¾Ý£»¶øÍ¼¼ÆËãÓëÖ®²»Í¬£¬Êǽâ¾ö´ó¹æÄ£Í¼Êý¾Ý´¦ÀíµÄ·½·¨£¬Ãæ¶Ô OLAP ³¡¾°£¬ÊǶÔÕû¸öͼ×ö·ÖÎö¼ÆË㣬ÏÂͼ£¨ÒýÓÃ×Ô VLDB 2019 keynote ¡¶Graph Processing: A Panaromic View and Some Open Problems¡·£©ÃèÊöÁËͼ¼ÆËãºÍͼÊý¾Ý¿âµÄһЩÁìÓòÇø·Ö¡£

¾Ù¸öͼ¼ÆËãµÄ¼òµ¥Àý×Ó£¬ÔÚÎÒÃDZȽÏÊìϤµÄ Google µÄËÑË÷³¡¾°ÖУ¬ÐèÒª»ùÓÚÍøÒ³Á´½Ó¹ØÏµ¼ÆËãÿ¸öÍøÒ³µÄ PageRank Öµ£¬ÓÃÀ´¶ÔÍøÒ³½øÐÐÅÅÐò¡£ÍøÒ³Á´½Ó¹ØÏµÆäʵ¾ÍÊÇÒ»ÕÅͼ£¬¶ø»ùÓÚÍøÒ³Á´½Ó¹ØÏµµÄ PageRank ¼ÆË㣬Æäʵ¾ÍÊÇÔÚÕâÕÅͼÉÏÔËÐÐͼËã·¨£¬Ò²¾ÍÊÇͼ¼ÆËã¡£

¶ÔÓÚС¹æÄ£µÄͼ£¬ÎÒÃÇ¿ÉÒÔÓõ¥»úÀ´½øÐмÆËã¡£µ«Ëæ×ÅÊý¾ÝÁ¿µÄÔö´ó£¬Ò»°ãÐèÒªÒýÈë·Ö²¼Ê½µÄ¼ÆËãϵͳÀ´½â¾ö£¬²¢ÇÒÒªÄܹ»¸ßЧµØÔËÐи÷ÖÖÀàÐ͵ÄͼËã·¨¡£

Åú´¦Àíϵͳ

´ó¹æÄ£Êý¾Ý´¦ÀíÎÒÃÇÖ±½ÓÏëµ½µÄ¾ÍÊÇʹÓà MapReduce / Spark µÈÅú´¦Àíϵͳ£¬×Ö½ÚÌø¶¯ÔÚ³õÆÚÒ²Óв»ÉÙÒµÎñʹÓà MapReduce / Spark À´ÊµÏÖͼËã·¨¡£µÃÒæÓÚÅú´¦ÀíϵͳµÄ¹ã·ºÊ¹Óã¬ÒµÎñͬѧÄܹ»¿ìËÙʵÏÖ²¢ÉÏÏß×Ô¼ºµÄËã·¨Âß¼­¡£

Åú´¦Àíϵͳ±¾ÉíÊÇΪÁË´¦ÀíÐÐʽÊý¾Ý¶øÉè¼ÆµÄ£¬ÆäÄܹ»ÇáÒ׵ؽ«¹¤×÷¸ºÔØ·ÖÉ¢ÔÚ²»Í¬µÄ»úÆ÷ÉÏ£¬²¢Ðеش¦Àí´óÁ¿µÄÊý¾Ý¡£²»¹ýͼÊý¾Ý±È½ÏÌØÊ⣬ÌìÈ»¾ßÓйØÁªÐÔ£¬ÎÞ·¨ÏñÐÐʽÊý¾ÝÒ»ÑùÖ±½ÓÇиÈç¹ûÓÃÅú´¦ÀíϵͳÀ´ÔËÐÐͼËã·¨£¬¾Í¿ÉÄÜ»áÒýÈë´óÁ¿µÄ Shuffle À´ÊµÏÖ¹ØÏµµÄÁ¬½Ó£¬¶ø Shuffle ÊÇÒ»ÏîºÜÖØµÄ²Ù×÷£¬²»½ö»áµ¼ÖÂÈÎÎñÔËÐÐʱ¼ä³¤£¬²¢ÇÒ»áÀË·ÑºÜ¶à¼ÆËã×ÊÔ´¡£

ͼ¼ÆËãϵͳ

ͼ¼ÆËãϵͳÊÇÕë¶ÔͼËã·¨µÄÌØµã¶øÑÜÉú³öµÄרÓüÆËãÉèÊ©£¬Äܹ»¸ßЧµØÔËÐÐͼËã·¨¡£Òò´ËËæ×ÅÒµÎñµÄ·¢Õ¹£¬ÎÒÃÇÆÈÇÐÐèÒªÒýÈëͼ¼ÆËãϵͳÀ´½â¾öͼÊý¾Ý´¦ÀíµÄÎÊÌ⡣ͼ¼ÆËãÒ²ÊDZȽϳÉÊìµÄÁìÓò£¬ÔÚѧÊõ½çºÍ¹¤Òµ½çÒÑÓдóÁ¿µÄϵͳ£¬ÕâЩϵͳÔÚ²»Í¬³¡¾°£¬Ò²¸÷ÓÐÓÅÁÓÊÆ¡£

ÓÉÓÚÃæÏò²»Í¬µÄÊý¾ÝÌØÕ÷¡¢²»Í¬µÄËã·¨ÌØÐԵȣ¬Í¼¼ÆËãϵͳÔÚÆ½Ì¨¼Ü¹¹¡¢¼ÆËãÄ£ÐÍ¡¢Í¼»®·Ö¡¢Ö´ÐÐÄ£ÐÍ¡¢Í¨ÐÅÄ£Ð͵ȷ½Ãæ¸÷ÓÐÈ¡Éá¡£ÏÂÃæ£¬ÎÒÃÇ´Ó²»Í¬½Ç¶È¶Ôͼ¼ÆËãµÄһЩÏÖÓм¼Êõ×öЩ·ÖÀà·ÖÎö¡£

·Ö²¼¼Ü¹¹

°´ÕÕ·Ö²¼¼Ü¹¹£¬Í¼¼ÆËã¿ÉÒÔ·ÖΪµ¥»ú»ò·Ö²¼Ê½¡¢È«ÄÚ´æ»òʹÓÃÍâ´æ¼¸ÖÖ£¬³£¼ûµÄ¸÷ÖÖͼ¼ÆËãϵͳÈçÏÂͼËùʾ¡£µ¥»ú¼Ü¹¹µÄÓÅÊÆÔÚÓÚÎÞÐ迼ÂÇ·Ö²¼Ê½µÄͨÐÅ¿ªÏú£¬µ«Í¨³£ÄÑÒÔ¿ìËÙ´¦Àí´ó¹æÄ£µÄͼÊý¾Ý£»·Ö²¼Ê½Ôòͨ¹ýͨÐÅ»ò·Ö²¼Ê½¹²ÏíÄڴ潫¿É´¦ÀíµÄÊý¾Ý¹æÄ£À©´ó£¬µ«Í¨³£Ò²»áÒýÈë¾Þ´óµÄ¶îÍ⿪Ïú¡£

¼ÆËãÄ£ÐÍ

°´ÕÕ¼ÆËã¶ÔÏó£¬Í¼Êý¾Ý¼ÆËãÄ£ÐÍ¿ÉÒÔ·ÖΪ½ÚµãÖÐÐļÆËãÄ£ÐÍ¡¢±ßÖÐÐļÆËãÄ£ÐÍ¡¢×ÓͼÖÐÐļÆËãÄ£Ð͵ȡ£

´ó²¿·Öͼ¼ÆËãϵͳ¶¼²ÉÓÃÁ˽ڵãÖÐÐļÆËãÄ£ÐÍ£¨ÕâÀïµÄ½ÚµãָͼÉϵÄÒ»¸öµã£©£¬¸ÃÄ£ÐÍÀ´×Ô Google µÄ Pregel£¬ºËÐÄ˼ÏëÊÇÓû§±à³Ì¹ý³ÌÖУ¬ÒÔͼÖÐÒ»¸ö½Úµã¼°ÆäÁÚ±ß×÷ΪÊäÈëÀ´½øÐÐÔËË㣬¾ßÓбà³Ì¼òµ¥µÄÓÅÊÆ¡£µäÐ͵ĽڵãÖÐÐļÆËãÄ£ÐͰüÀ¨ Pregel Ìá³öµÄ Pregel API ¡¢ PowerGraph Ìá³öµÄ GAS API ÒÔ¼°ÆäËûһЩ API¡£

Pregel ´´ÐÂÐÔµØÌá³öÁË "think like a vertex" µÄ˼Ï룬Óû§Ö»Ðè±àд´¦ÀíÒ»¸ö½ÚµãµÄÂß¼­£¬¼´¿É±»ÍØÕ¹µ½ÕûÕÅͼ½øÐеü´úÔËË㣬ʹÓà Pregel ÃèÊöµÄ PageRank ÈçÏÂͼËùʾ£º

def pagerank(vertex_id, msgs):

// ¼ÆËãÊÕµ½ÏûÏ¢µÄÖµÖ®ºÍ

msg_sum = sum(msgs)

// ¸üе±Ç°PRÖµ

pr = 0.15 + 0.85 * msg_sum

// ÓÃмÆËãµÄPRÖµ·¢ËÍÏûÏ¢

for nr in out_neighbor(vertex_id):

msg = pr / out_degree(vertex_id)

send_msg(nr, msg)

// ¼ì²éÊÇ·ñÊÕÁ²

if converged(pr):

vote_halt(vertex_id)

 

GAS API ÔòÊÇ PowerGraph ΪÁ˽â¾öÃÝÂÉͼ£¨Ò»Ð¡²¿·Ö½ÚµãµÄ¶ÈÊý·Ç³£¸ß£©µÄÎÊÌ⣬½«¶ÔÒ»¸ö½ÚµãµÄ´¦ÀíÂß¼­£¬²ð·ÖΪÁË Gather¡¢Apply¡¢Scatter Èý½×¶Î¡£ÔÚ¼ÆËãÂú×ã½»»»ÂɺͽáºÏÂɵÄÇé¿öÏ£¬Í¨¹ýʹÓà GAS Ä£ÐÍ£¬Í¨Ðųɱ¾´Ó |E| ½µµÍµ½ÁË |V|£¬Ê¹Óà GAS ÃèÊöµÄ PageRank ÈçÏÂͼËùʾ£º

def gather(msg_a, msg_b):

// »ã¾ÛÏûÏ¢

return msg_a + msg_b

def apply(vertex_id, msg_sum):

// ¸üÐÂPRÖµ

pr = 0.15 + 0.85 * msg_sum

// ÅжÏÊÇ·ñÊÕÁ²

if converged(pr):

vote_halt(vertex_id)

def scatter(vertex_id, nr):

// ·¢ËÍÏûÏ¢

return pr / out_degree(vertex_id)

 

ͼ»®·Ö

¶ÔÓÚµ¥»úÎÞ·¨´¦ÀíµÄ³¬¼¶´óͼ£¬ÔòÐèÒª½«Í¼Êý¾Ý»®·Ö³É¼¸¸ö×Óͼ£¬²ÉÓ÷ֲ¼Ê½¼ÆË㷽ʽ£¬Òò´Ë£¬»áÉæ¼°µ½Í¼»®·ÖµÄÎÊÌ⣬¼´ÈçºÎ½«Ò»ÕûÕÅͼÇиî³É×Óͼ£¬²¢·ÖÅ䏸²»Í¬µÄ»úÆ÷½øÐзֲ¼Ê½µØ¼ÆËã¡£³£¼ûµÄͼ»®·Ö·½Ê½ÓÐÇб߷¨£¨Edge-Cut£©ºÍÇе㷨£¨Vertex-Cut£©£¬ÆäʾÒâͼÈçÏÂËùʾ£º

Çб߷¨¹ËÃû˼Ò壬»á´ÓÒ»Ìõ±ßÖмäÇпª£¬Á½±ßµÄ½Úµã»á·Ö²¼ÔÚ²»Í¬µÄͼ·ÖÇø£¬Ã¿¸ö½ÚµãÈ«¾ÖÖ»»á³öÏÖÒ»´Î£¬µ«Çб߷¨¿ÉÄܻᵼÖÂÒ»Ìõ±ßÔÚÈ«¾Ö³öÏÖÁ½´Î¡£ÈçÉÏ×óͼËùʾ£¬½Úµã A Óë½Úµã B Ö®¼äÓÐÒ»Ìõ±ß£¬Çб߷¨»áÔÚ A ºÍ B ÖмäÇпª£¬A ÊôÓÚͼ·ÖÇø 1£¬B ÊôÓÚͼ·ÖÇø 2¡£

Çе㷨ÔòÊǽ«Ò»¸ö½ÚµãÇпª£¬¸Ã½ÚµãÉϲ»Í¬µÄ±ß»á·Ö²¼ÔÚ²»Í¬µÄͼ·ÖÇø£¬Ã¿Ìõ±ßÈ«¾ÖÖ»»á³öÏÖÒ»´Î£¬µ«Çе㷨»áµ¼ÖÂÒ»¸ö½ÚµãÔÚÈ«¾Ö³öÏÖ¶à´Î¡£ÈçÉÏͼÓÒͼËùʾ£¬½Úµã A ±»ÇзÖΪ 3 ·Ý£¬ÆäÖÐ±ß AB ÊôÓÚ·ÖÇø 2£¬±ß AD ÊôÓÚͼ·ÖÇø 3¡£

ͼ»®·Ö»¹»áÉæ¼°µ½·Öͼ²ßÂÔ£¬±ÈÈçÇе㷨»áÓи÷ÖÖ²ßÂÔµÄÇз¨£º°´±ßËæ»ú¹þÏ£¡¢Edge1D¡¢Edge2D µÈµÈ¡£ÓÐЩ²ßÂÔÊÇ¿ÉÈ«¾Ö²¢ÐÐÖ´ÐзÖͼµÄ£¬Ëٶȿ죬µ«¸ºÔؾùºâºÍ¼ÆËãʱµÄͨÐÅЧÂʲ»ÀíÏ룻ÓÐЩÊÇÐèÒª´®ÐÐÖ´Ðеĵ«¸ºÔؾùºâ¡¢Í¨ÐÅЧÂÊ»á¸üºÃ£¬¸÷ÖÖ²ßÂÔÐèÒª¸ù¾Ý²»Í¬µÄÒµÎñ³¡¾°½øÐÐÑ¡Ôñ¡£

Ö´ÐÐÄ£ÐÍ

Ö´ÐÐÄ£Ðͽâ¾öµÄÊDz»Í¬µÄ½ÚµãÔÚµü´ú¹ý³ÌÖУ¬ÈçºÎЭµ÷µü´ú½ø¶ÈµÄÎÊÌ⡣ͼ¼ÆËãͨ³£ÊÇȫͼ¶àÂÖµü´úµÄ¼ÆË㣬±ÈÈç PageRank Ëã·¨£¬ÐèÒª³ÖÐøµü´úÖ±ÖÁȫͼËùÓнڵãÊÕÁ²²Å»á½áÊø¡£

ÔÚͼ»®·ÖÍê³Éºó£¬Ã¿¸ö×Óͼ»á±»·ÖÅäµ½¶ÔÓ¦µÄ»úÆ÷½øÐд¦Àí£¬ÓÉÓÚ²»Í¬»úÆ÷¼äÔËËã»·¾³¡¢¼ÆËã¸ºÔØµÄ²»Í¬£¬²»Í¬»úÆ÷µÄÔËËãËÙ¶ÈÊDz»Í¬µÄ£¬µ¼ÖÂͼÉϲ»Í¬½Úµã¼äµÄµü´úËÙ¶ÈÒ²ÊDz»Í¬µÄ¡£ÎªÁËÓ¦¶Ô²»Í¬½Úµã¼äµü´úËٶȵIJ»Í¬£¬ÓÐͬ²½¼ÆËã¡¢Òì²½¼ÆËã¡¢ÒÔ¼°°ëͬ²½¼ÆËãÈýÖÖÖ´ÐÐÄ£ÐÍ¡£

ͬ²½¼ÆËãÊÇȫͼËùÓнڵãÍê³ÉÒ»ÂÖµü´úÖ®ºó£¬²Å¿ªÆôÏÂÒ»ÂÖµü´ú£¬ÒòΪͨ³£Ã¿¸ö½Úµã¶¼»áÒÀÀµÆäËû½ÚµãÔÚÉÏÒ»ÂÖµü´ú²úÉúµÄ½á¹û£¬Òò´Ëͬ²½¼ÆËãµÄ½á¹ûÊÇÕýÈ·µÄ¡£

Òì²½¼ÆËãÔòÊÇÿ¸ö½Úµã²»µÈ´ýÆäËû½ÚµãµÄµü´ú½ø¶È£¬ÔÚ×Ô¼º¼ÆËãÍêÒ»ÂÖµü´úºóÖ±½Ó¿ªÆôÏÂÒ»ÂÖµü´ú£¬ËùÒԾͻᵼÖºܶà½Úµã»¹Ã»ÓÐÍêÈ«Äõ½ÉÏÒ»ÂֵĽá¹û¾Í¿ªÊ¼ÁËÏÂÒ»ÂÖ¼ÆËã¡£

°ëͬ²½¼ÆËãÊÇÁ½ÕßµÄ×ۺϣ¬Æä˼ÏëÊÇÔÊÐíÒ»¶¨µÄ²»Í¬²½£¬µ«µ±¼ÆËã×î¿ìµÄ½ÚµãÓë¼ÆËã×îÂýµÄ½ÚµãÏà²îÒ»¶¨µü´úÂÖÊýʱ£¬×î¿ìµÄ½Úµã»á½øÐеȴý¡£Í¬²½¼ÆËãºÍÒì²½¼ÆËãµÄʾÒâͼÈçÏÂͼ£º

ͬ²½¼ÆËãºÍÒì²½¼ÆËã¸÷ÓÐÓÅÁÓ£¬Æä¶Ô±ÈÈçϱíËùʾ£¬°ëͬ²½ÊÇÁ½ÕßÕÛÖС£¶àÊýͼ¼ÆËãϵͳ¶¼²ÉÓÃÁËͬ²½¼ÆËãÄ£ÐÍ£¬ËäÈ»¼ÆËãЧÂʱÈÒì²½¼ÆËãÈõһЩ£¬µ«Ëü¾ßÓÐÒ×ÓÚÀí½â¡¢¼ÆËãÎȶ¨¡¢½á¹û׼ȷ¡¢¿É½âÊÍÐÔÇ¿µÈ¶à¸öÖØÒªµÄÓŵ㡣

ͨÐÅÄ£ÐÍ

ΪÁËʵÏÖÍØÕ¹ÐÔ£¬Í¼¼ÆËã²ÉÓÃÁ˲»Í¬µÄͨÐÅÄ£ÐÍ£¬´óÖ¿ɷÖΪ·Ö²¼Ê½¹²ÏíÄÚ´æ¡¢Push ÒÔ¼° Pull¡£·Ö²¼Ê½¹²ÏíÄڴ潫Êý¾Ý´æ´¢ÔÚ¹²ÏíÄÚ´æÖУ¬Í¨¹ýÖ±½Ó²Ù×÷¹²ÏíÄÚ´æÍê³ÉÐÅÏ¢½»»¥£»Push Ä£ÐÍÊÇÑØ×ųö±ß·½ÏòÖ÷¶¯ÍÆËÍÏûÏ¢£»Pull ÔòÊÇÑØ×ÅÈë±ß·½ÏòÖ÷¶¯ÊÕÏûÏ¢¡£ÈýÕßÓÅÁÓ¶Ô±ÈÈçϱí¸ñËùʾ£º

3.2 ¼¼ÊõÑ¡ÐÍ

ÓÉÓÚ×Ö½ÚÌø¶¯Òª´¦ÀíµÄÊÇÊÀ½ç¼¶µÄ³¬´ó¹æÄ£Í¼£¬Í¬Ê±»¹¶Ô¼ÆËãÈÎÎñÔËÐÐʱ³¤ÓÐÒªÇó£¬Òò´ËÖ÷Òª¿¼ÂǸßÐÔÄÜ¡¢¿ÉÍØÕ¹ÐÔÇ¿µÄͼ¼ÆËãϵͳ¡£¹¤Òµ½çʹÓñȽ϶àµÄϵͳÖ÷ÒªÓÐÒÔϼ¸Àࣺ

Pregel & Giraph

Google Ìá³öÁË Pregel À´½â¾öͼËã·¨ÔÚ MapReduce ÉÏÔËÐеÍЧµÄÎÊÌ⣬µ«Ã»ÓпªÔ´¡£Facebook ¸ù¾Ý Pregel µÄ˼··¢Õ¹ÁË¿ªÔ´ÏµÍ³ Giraph£¬µ« Giraph ÓÐÁ½¸öÎÊÌ⣺һÊÇ Giraph µÄÉçÇø²»ÊǺܻîÔ¾£»¶þÊÇÏÖʵÉú»îÖеÄͼ¶¼ÊÇ·ûºÏÃÝÂÉ·Ö²¼µÄͼ£¬¼´ÓÐһС²¿·ÖµãµÄ±ßÊý·Ç³£¶à£¬ÕâЩµãÔÚ Pregel µÄ¼ÆËãģʽϺÜÈÝÒ×ÍÏÂýÕû¸ö¼ÆËãÈÎÎñ¡£

GraphX

GraphX ÊÇ»ùÓÚ Spark ¹¹½¨µÄͼ¼ÆËãϵͳ£¬ÈÚºÏÁ˺ܶà PowerGraph µÄ˼Ï룬²¢¶Ô Spark ÔÚÔËÐÐͼËã·¨¹ý³ÌÖеĶàÓà Shuffle ½øÐÐÁËÓÅ»¯¡£GraphX ¶Ô±ÈÔ­Éú Spark ÔÚÐÔÄÜ·½ÃæÓкܴóÓÅÊÆ£¬µ« GraphX ·Ç³£·ÑÄڴ棬Shuffle ЧÂÊÒ²²»ÊǺܸߣ¬µ¼ÖÂÔËÐÐʱ¼äÒ²±È½Ï³¤¡£

Gemini

Gemini ÊÇ 16 Äê·¢±íÔÙÔÚ OSDI µÄһƪͼ¼ÆËãϵͳÂÛÎÄ£¬½áºÏÁ˶àÖÖͼ¼ÆËãϵͳµÄÓÅÊÆ£¬²¢ÇÒÓпªÔ´ÊµÏÖ£¬×÷Ϊ×î¿ìµÄͼ¼ÆËãÒýÇæÖ®Ò»£¬µÃµ½ÁËÒµ½çµÄÆÕ±éÈϿɡ£

ÕýÈç¡¶Scalability! But at what COST? ¡·Ò»ÎÄÖ¸³ö£¬¶àÊýµÄͼ¼ÆËãϵͳΪÁËÍØÕ¹ÐÔ£¬ºöÊÓÁ˵¥»úµÄÐÔÄÜ£¬¼ÓÖ®·Ö²¼Ê½´øÀ´µÄ¾Þ´óͨÐÅ¿ªÏú£¬µ¼Ö¶à»ú»·¾³ÏµļÆËãÐÔÄÜÓÐʱÉõÖÁ·´¶ø²»Èçµ¥»ú»·¾³¡£Õë¶ÔÕâЩÎÊÌ⣬Gemini µÄ×öÁËÕë¶ÔÐÔÓÅ»¯Éè¼Æ£¬¼òµ¥×ܽáΪ£º

ͼ´æ´¢¸ñʽÓÅ»¯Äڴ濪Ïú£º²ÉÓà CSC ºÍ CSR µÄ·½Ê½´æ´¢Í¼£¬²¢¶Ô CSC/CSR ½øÒ»²½½¨Á¢Ë÷Òý½µµÍÄÚ´æÕ¼Óã»

Hierarchical Chunk-Based Partitioning£ºÍ¨¹ýÔÚ Node¡¢Numa¡¢Socket ¶à¸öά¶È×öÇøÓò¸ÐÖªµÄͼÇз֣¬¼õÉÙͨÐÅ¿ªÏú£»

×ÔÊÊÓ¦µÄ Push / Pull ¼ÆË㣺²ÉÓÃÁË˫ģʽͨÐŲßÂÔ£¬Äܸù¾Ýµ±Ç°»îÔ¾½ÚµãµÄÊýÁ¿¶¯Ì¬µØÇл»µ½³íÃÜ»òÏ¡Êèģʽ¡£

¼æ¹Ëµ¥»úÐÔÄܺÍÀ©Õ¹ÐÔ£¬Ê¹µÃ Gemini ´¦ÓÚͼ¼ÆËãÐÔÄÜ×îÇ°ÑØ£¬Í¬Ê±£¬Gemini ÍŶÓÒ²³ÉÁ¢ÁËÉÌÒµ¹«Ë¾×¨×¢Í¼Êý¾ÝµÄ´¦Àí¡£

3.3 »ùÓÚ¿ªÔ´µÄʵ¼ù

Tencent Plato ÊÇ»ùÓÚ Gemini ˼ÏëµÄ¿ªÔ´Í¼¼ÆËãϵͳ£¬²ÉÓÃÁË Gemini µÄºËÐÄÉè¼ÆË¼Â·£¬µ«Ïà±È Gemini µÄ¿ªÔ´°æ±¾Óиü¼ÓÍêÉÆµÄ¹¤³ÌʵÏÖ£¬ÎÒÃÇ»ùÓÚ´Ë£¬×öÁË´óÁ¿Öع¹ºÍ¶þ´Î¿ª·¢£¬½«ÆäÓ¦Óõ½Éú³É»·¾³ÖУ¬ÕâÀï·ÖÏíÏÂÎÒÃǵÄʵ¼ù¡£

¸ü´óÊý¾Ý¹æÄ£µÄ̽Ë÷

¿ªÔ´ÊµÏÖÖÐÓиö·Ç³£¹Ø¼üµÄ¼ÙÉ裺һÕÅͼÖеĵãµÄÊýÁ¿²»Äܳ¬¹ý 40 ÒÚ¸ö£»µ«×Ö½ÚÌø¶¯²¿·ÖÒµÎñ³¡¾°µÄÊý¾Ý¹æÄ£Ô¶³¬³öÁËÕâ¸öÊý¶î¡£ÎªÁËÖ§³ÖǧÒÚÍòÒÚµãµÄ¹æÄ££¬ÎÒÃǽ«²úÉúÄÚ´æÆ¿¾±µÄµ¥»ú´¦ÀíÄ£¿é£¬Öع¹Îª·Ö²¼Ê½ÊµÏÖ¡£

µã ID µÄ±àÂë

Gemini µÄÒ»¸öÖØÒª´´Ð¾ÍÊÇÌá³öÁË»ùÓÚ Chunk µÄͼ·ÖÇø·½·¨¡£ÕâÖÖͼ·ÖÇø·½·¨ÐèÒª½«µã id ´Ó 0 ¿ªÊ¼Á¬ÐøµÝÔö±àÂ룬µ«ÊäÈëµÄͼÊý¾ÝÖУ¬µã id ÊÇËæ»úÉú³ÉµÄ£¬Òò´ËÐèÒª¶Ôµã id ½øÐÐÒ»´ÎÓ³É䣬±£Ö¤ÆäÁ¬ÐøµÝÔö¡£¾ßÌåʵÏÖ·½·¨ÊÇ£¬ÔÚ¼ÆËãÈÎÎñ¿ªÊ¼Ö®Ç°½«Ô­Ê¼µÄÒµÎñ id ת»»Îª´ÓÁ㿪ʼµÄµÝÔö id£¬¼ÆËã½áÊøºóÔÙ½« id Ó³Éä»ØÈ¥£¬ÈçÏÂͼËùʾ£º

ÔÚ¿ªÔ´ÊµÏÖÖУ¬ÊǼÙÉèͼÖеãµÄÊýÁ¿²»¿É³¬¹ý 40 ÒÚ£¬40 ÒÚµÄ id Êý¾ÝÊÇ¿ÉÒÔ´æ´¢ÔÚµ¥»úÄÚ´æÖУ¬Òò´Ë²ÉÓñȽϼòµ¥µÄʵÏÖ·½Ê½£º·Ö²¼Ê½¼ÆË㼯ȺÖеÄÿ̨»úÆ÷ÈßÓà´æ´¢ÁËËùÓеã id µÄÓ³Éä¹ØÏµ¡£È»¶ø£¬µ±µãµÄÊýÁ¿´Ó 40 ÒÚµ½Ç§ÒÚ¼¶±ð£¬Ã¿Ì¨»úÆ÷½ö id Ó³Éä±í¾ÍÐèÒªÊý°Ù GB µÄÄڴ棬µ¥»ú´æ´¢·½°¸¾Í±äµÃ²»ÔÙ¿ÉÐУ¬Òò´ËÐèÒª½«Ó³Éä±í·Ö³É shard ·Ö²¼Ê½µØ´æ´¢£¬¾ßÌåʵÏÖ·½Ê½ÈçÏ£º

ÎÒÃÇͨ¹ý¹þÏ£½«Ô­Ê¼ÒµÎñµã id ´òÉ¢ÔÚ²»Í¬µÄ»úÆ÷£¬²¢ÐеطÖÅäÈ«¾Ö´Ó 0 ¿ªÊ¼Á¬ÐøµÝÔöµÄ id¡£Éú³É id Ó³Éä¹ØÏµºó£¬Ã¿Ì¨»úÆ÷¶¼»á´æÓÐ id Ó³Éä±íµÄÒ»²¿·Ö¡£ËæºóÔÙ½«±ßÊý¾Ý·Ö±ð°´ÆðµãºÍÖÕµã¹þÏ££¬·¢Ë͵½¶ÔÓ¦µÄ»úÆ÷½øÐбàÂ룬×îÖյõ½µÄÊý¾Ý¼´Îª¿ÉÓÃÓÚ¼ÆËãµÄÊý¾Ý¡£µ±¼ÆËãÔËÐнáÊøºó£¬ÐèÒªÊý¾ÝÐèÒªÓ³Éä»ØÒµÎñ id£¬Æä¹ý³ÌºÍÉÏÊöÒ²ÊÇÀàËÆµÄ¡£

ÉÏÃæÃèÊöµÄ½ö½öÊÇͼ±àÂ벿·Ö£¬40 ÒÚµãµÄÖµÓòÏÞÖÆ»¹¹ã·º´æÔÚÓÚ¹¹Í¼ºÍʵ¼Ê¼ÆËã¹ý³ÌÖУ¬ÎÒÃǶ¼¶Ô´Ë×öÁËÖØ¹¹¡£ÁíÍâÔÚÎÒÃǵĹæÄ£Ï£¬Ò²Åöµ½ÁËһЩÈÎÎñ¸ºÔز»¾ù£¬²»¹»Îȶ¨£¬¼ÆËãЧÂʲ»¸ßµÈÎÊÌ⣬ÎÒÃǶԴ˶¼×öÁ˲¿·ÖÓÅ»¯ºÍÖØ¹¹¡£

ͨ¹ý¶Ô¿ªÔ´ÊµÏֵĸÄÔ죬×Ö½ÚÌø¶¯µÄͼ¼ÆËãϵͳÒѾ­ÔÚÏßÉÏÖ§³ÅÁ˶àÌõ²úÆ·ÏߵļÆËãÈÎÎñ£¬×î´ó¹æÄ£´ïµ½ÊýÍòÒڱߡ¢ÊýǧÒÚµãµÄÊÀ½ç¼¶³¬´óͼ£¬ÕâÊÇÒµÄÚº±¼ûµÄ¡£Í¬Ê±£¬Ãæ¶Ô²»¶ÏÔö³¤µÄÒµÎñ£¬²¢ÇÒÎÒÃÇ»¹ÔÚ³ÖÐøÀ©´óϵͳµÄ±ß½ç£¬À´Ó¦¶Ô¸ü´ó¹æÄ£µÄÌôÕ½¡£

×Ô¶¨ÒåË㷨ʵÏÖ

ÔÚ³£¼ûͼ¼ÆËãËã·¨Ö®Í⣬×Ö½ÚÌø¶¯¶àÔªµÄÒµÎñÖУ¬ÓдóÁ¿µÄÆäËûͼËã·¨ÐèÇóÒÔ¼°ÏÖÓÐËã·¨µÄ¸ÄÔìÐèÇ󣬱ÈÈçÐèҪʵÏÖ¸üÊʺ϶þ·ÖͼµÄ LPA Ëã·¨£¬ÐèÒª¸ÄÔì PageRank Ë㷨ʹ֮¸üÈÝÒ×ÊÕÁ²¡£

ÓÉÓÚµ±Ç°Í¼¼ÆËãϵͳ±©Â¶µÄ API »¹Ã»Óзdz£ºÃµÄ·â×°£¬Ê¹µÃ±àдËã·¨µÄÓû§»áÖ±½Ó¸ÐÖªµ½µ×²ãµÄÄÚ²¿»úÖÆ£¬±ÈÈ粻ͬµÄͨÐÅģʽ¡¢Í¼±íʾ·½Ê½µÈ£¬Õâ¹ÌÈ»·½±ãÁË×öͼ¼ÆËãË㷨ʵÏֵĵ÷ÓÅ£¬µ«Ò²µ¼ÖÂÒµÎñͬѧÓÐÒ»¶¨³É±¾£»ÁíÍ⣬ÒòÎªÉæ¼°³¬´ó¹æÄ£Êý¾ÝµÄ¸ßÐÔÄܼÆË㣬һ¸öϸ½Ú£¨±ÈÈç hotpath ÉϵÄÒ»¸öÐ麯Êýµ÷Óã¬Ò»´ÎÏß³Ìͬ²½£©¿ÉÄܾͶÔÐÔÄÜÓÐÖÁ¹ØÖØÒªµÄÓ°Ï죬ÐèÒªÒµÎñͬѧ¶Ô¼ÆËã»úÌåϵ½á¹¹ÓÐÒ»¶¨Á˽⡣»ùÓÚÉÏÊöÁ½¸öÔ­Òò£¬Ä¿Ç°Ëã·¨ÊÇͼ¼ÆËãÒýÇæÍ¬Ñ§ºÍͼ¼ÆËãÓû§Ò»Æð¿ª·¢£¬µ«³¤ÆÚÀ´¿´£¬ÎÒÃÇ»á·â×°³£ÓüÆËãËã×Ó²¢±©Â¶ Python Binding £¬»òÕßÒýÈë DSL À´½µµÍÒµÎñµÄѧϰ³É±¾¡£

3.4 δÀ´Õ¹Íû

Ãæ¶Ô×Ö½ÚÌø¶¯µÄ³¬´ó¹æÄ£Í¼´¦Àí³¡¾°£¬ÎÒÃÇÔÚ°ëÄêÄÚ¿ìËÙ¿ªÆôÁËͼ¼ÆËã·½Ïò£¬Ö§³ÖÁËËÑË÷¡¢·ç¿ØµÈ¶à¸öÒµÎñµÄ´ó¹æÄ£Í¼¼ÆËãÐèÇó£¬È¡µÃÁ˲»´íµÄ½øÕ¹£¬µ«»¹ÓÐÖÚ¶àÐèÒªÎÒÃÇ̽Ë÷µÄÎÊÌ⣺

´ÓÈ«ÄÚ´æ¼ÆËãµ½»ìºÏ´æ´¢¼ÆË㣺ΪÁËÖ§³Ö¸ü´ó¹æÄ£µÄÊý¾ÝÁ¿£¬Ìṩ¸ü¼ÓµÍ³É±¾µÄ¼ÆËãÄÜÁ¦£¬ÎÒÃǽ«Ì½Ë÷ÐÂÐÍ´æ´¢Ó²¼þ£¬°üÀ¨ AEP / NVMe µÈÄÚ´æ»òÍâ´æÉ豸£¬À©´óϵͳÄÜÁ¦£»

¶¯Ì¬Í¼¼ÆË㣺ĿǰµÄϵͳֻ֧³Ö¾²Ì¬Í¼¼ÆË㣬¼´¶ÔÍêÕûͼµÄÈ«Á¿Êý¾Ý½øÐмÆË㡣ʵ¼ÊÒµÎñÖеÄͼÿʱÿ¿Ì¶¼ÊÇÔڱ仯µÄ£¬Òò´ËʹÓÃÏÖÓÐϵͳ±ØÐëÔÚÿ´Î¼ÆËã¶¼ÌṩÕûÕÅͼ¡£¶ø¶¯Ì¬Í¼¼ÆËãÄܹ»±È½ÏºÃµØ´¦ÀíÔöÁ¿µÄÊý¾Ý£¬ÎÞÐè¶ÔÒѾ­´¦Àí¹ýµÄÊý¾Ý½øÐÐÖØ¸´¼ÆË㣬Òò´ËÎÒÃǽ«ÔÚһЩ³¡¾°Ì½Ë÷¶¯Ì¬Í¼¼ÆË㣻

Òì¹¹¼ÆË㣺ͼ¼ÆËãϵͳÊôÓÚ¼ÆËãÃܼ¯ÐÍϵͳ£¬ÔÚ²¿·Ö³¡¾°¶Ô¼ÆËãÐÔÄÜÓм«¸ßµÄÒªÇó¡£Òò´ËÎÒÃǻ᳢ÊÔÒì¹¹¼ÆË㣬°üÀ¨Ê¹Óà GPU / FPGA µÈÓ²¼þ¶Ô¼ÆËã½øÐмÓËÙ£¬ÒÔ×·Çó׿ԽµÄ¼ÆËãÐÔÄÜ£»

ͼ¼ÆËãÓïÑÔ£ºÒµÎñÖ±½Ó½Ó´¥µ×²ã¼ÆËãÒýÇæÓкܶà±×¶Ë£¬±ÈÈçÒµÎñÂß¼­Óë¼ÆËãÒýÇæÇ¿ñîºÏ£¬ÎÞ·¨¸üÁé»îµØ¶Ô²»Í¬Ëã·¨½øÐÐÐÔÄÜÓÅ»¯¡£¶øÍ¨¹ýͼ¼ÆËãÓïÑÔ¶ÔËã·¨½øÐÐÃèÊö£¬ÔÙ¶ÔÆä±àÒëÉú³É¼ÆËãÒýÇæµÄÖ´ÐдúÂ룬¿ÉÒÔ½«ÒµÎñÂß¼­Óë¼ÆËãÒýÇæ½âñÄܸüºÃµØ¶Ô²»Í¬Ëã·¨½øÐÐ×Ô¶¯µØµ÷ÓÅ£¬½«ÐÔÄÜ·¢»Óµ½¼«Ö¡£

4. ×ܽá

Ëæ×Å×Ö½ÚÌø¶¯ÒµÎñÁ¿¼¶µÄ·ÉËÙÔö³¤ºÍÒµÎñÐèÇóµÄ²»¶Ï·á¸»£¬ÎÒÃÇÔÚ¶Ìʱ¼äÄÚ¹¹½¨ÁËͼ´æ´¢ÏµÍ³ºÍͼ¼ÆËãϵͳ£¬ÔÚʵ¼ÊÉú²úϵͳÖнâ¾öÁË´óÁ¿µÄÎÊÌ⣬µ«Í¬Ê±ÈÔÃæÁÙמ޴óµÄ¼¼ÊõÌôÕ½£¬ÎÒÃǽ«³ÖÐøÑݽø£¬´òÔìÒµ½ç¶¥¼âµÄһջʽͼ½â¾ö·½°¸¡£Î´À´ÒÑÀ´£¬¿Õ¼ä¹ãÀ«£¬Ï£Íû¸ü¶àÓÐÐËȤµÄͬѧ¼ÓÈë½øÀ´£¬ÓÃÓÐȤµÄ·Ö²¼Ê½¼¼ÊõÀ´Ó°Ï켸ÒÚÈ˵Ļ¥ÁªÍøÉú»î¡£

 

   
2854 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

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

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

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
InfluxDB¸ÅÄîºÍ»ù±¾²Ù×÷
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾ÝдÈë
Éî¶ÈÂþ̸Êý¾Ýϵͳ¼Ü¹¹¡ª¡ªLambda architecture
Lambda¼Ü¹¹Êµ¼ù
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾Ý¶ÁÈ¡
×îпγÌ
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯¡¢¼Ü¹¹Éè¼ÆºÍÔËÐÐά»¤
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
NoSQLÊý¾Ý¿â£¨Ô­Àí¡¢Ó¦Óá¢×î¼Ñʵ¼ù£©
ÆóÒµ¼¶Hadoop´óÊý¾Ý´¦Àí×î¼Ñʵ¼ù
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯×î¼Ñʵ¼ù
³É¹¦°¸Àý
ij½ðÈÚ¹«Ë¾ Mysql¼¯ÈºÓëÐÔÄÜÓÅ»¯
±±¾© ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
ÖªÃûijÐÅϢͨÐŹ«Ë¾ NoSQL»º´æÊý¾Ý¿â¼¼Êõ
±±¾© oracleÊý¾Ý¿âSQLÓÅ»¯
ÖйúÒÆ¶¯ IaaSÔÆÆ½Ì¨-Ö÷Á÷Êý¾Ý¿â¼°´æ´¢¼¼Êõ