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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
·Ö²¼Ê½Í¼Êý¾Ý¿â Nebula Graph µÄ Index ʵ¼ù
 
  2069  次浏览      28
2021-3-4
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª¶Ô Nebula GraphµÄË÷Òý¹¦ÄÜ×öÒ»¸öÏêϸ½éÉÜ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

µ¼¶Á

Ë÷ÒýÊÇÊý¾Ý¿âϵͳÖв»¿É»òȱµÄÒ»¸ö¹¦ÄÜ£¬Êý¾Ý¿âË÷ÒýºÃ±ÈÊÇÊéµÄĿ¼£¬ÄܼӿìÊý¾Ý¿âµÄ²éѯËÙ¶È£¬ÆäʵÖÊÊÇÊý¾Ý¿â¹ÜÀíϵͳÖÐÒ»¸öÅÅÐòµÄÊý¾Ý½á¹¹¡£²»Í¬µÄÊý¾Ý¿âϵͳÓв»Í¬µÄÅÅÐò½á¹¹£¬Ä¿Ç°³£¼ûµÄË÷ÒýʵÏÖÀàÐÍÈç B-Tree index¡¢B+-Tree index¡¢B*-Tree index¡¢Hash index¡¢Bitmap index¡¢Inverted index µÈµÈ£¬¸÷ÖÖË÷ÒýÀàÐͶ¼Óи÷×ÔµÄÅÅÐòËã·¨¡£

ËäÈ»Ë÷Òý¿ÉÒÔ´øÀ´¸ü¸ßµÄ²éѯÐÔÄÜ£¬µ«ÊÇÒ²´æÔÚһЩȱµã£¬ÀýÈ磺

  • ´´½¨Ë÷ÒýºÍά»¤Ë÷ÒýÒªºÄ·Ñ¶îÍâµÄʱ¼ä,ÍùÍùÊÇËæ×ÅÊý¾ÝÁ¿µÄÔö¼Ó¶øÎ¬»¤³É±¾Ôö´ó
  • Ë÷ÒýÐèÒªÕ¼ÓÃÎïÀí¿Õ¼ä
  • ÔÚ¶ÔÊý¾Ý½øÐÐÔöɾ¸ÄµÄ²Ù×÷ʱÐèÒªºÄ·Ñ¸ü¶àµÄʱ¼ä,ÒòΪË÷ÒýÒ²Òª½øÐÐͬ²½µÄά»¤
  • Nebula Graph ×÷Ϊһ¸ö¸ßÐÔÄܵķֲ¼Ê½Í¼Êý¾Ý¿â£¬¶ÔÓÚÊôÐÔÖµµÄ¸ßÐÔÄܲéѯ£¬Í¬ÑùҲʵÏÖÁËË÷Òý¹¦ÄÜ¡£±¾ÎĽ«¶Ô Nebula GraphµÄË÷Òý¹¦ÄÜ×öÒ»¸öÏêϸ½éÉÜ¡£

    ͼÊý¾Ý¿â Nebula Graph ÊõÓï

    ¿ªÊ¼Ö®Ç°£¬ÕâÀïÂÞÁÐһЩ¿ÉÄÜ»áʹÓõ½µÄͼÊý¾Ý¿âºÍ Nebula Graph רÓÐÊõÓ

    1.Tag£ºµãµÄÊôÐԽṹ£¬Ò»¸ö Vertex ¿ÉÒÔ¸½¼Ó¶àÖÖ tag£¬ÒÔ TagID ±êʶ¡££¨Èç¹ûÀà±È SQL£¬¿ÉÒÔÀí½âΪһÕŵã±í£©

    2.Edge£ºÀàËÆÓÚ Tag£¬EdgeType ÊDZßÉϵÄÊôÐԽṹ£¬ÒÔ EdgeType ±êʶ¡££¨Èç¹ûÀà±È SQL£¬¿ÉÒÔÀí½âΪһÕÅ±ß±í£©

    3.Property£ºtag / edge ÉϵÄÊôÐÔÖµ£¬ÆäÊý¾ÝÀàÐÍÓÉ tag / edge µÄ½á¹¹È·¶¨¡£

    4.Partition£ºNebula Graph µÄ×îСÂß¼­´æ´¢µ¥Ôª£¬Ò»¸ö StorageEngine ¿É°üº¬¶à¸ö Partition¡£Partition ·ÖΪ leader ºÍ follower µÄ½ÇÉ«£¬Raftex ±£Ö¤ÁË leader ºÍ follower Ö®¼äµÄÊý¾ÝÒ»ÖÂÐÔ¡£

    5.Graph space£ºÃ¿¸ö Graph Space ÊÇÒ»¸ö¶ÀÁ¢µÄÒµÎñ Graph µ¥Ôª£¬Ã¿¸ö Graph Space ÓÐÆä¶ÀÁ¢µÄ tag ºÍ edge ¼¯ºÏ¡£Ò»¸ö Nebula Graph ¼¯ÈºÖпɰüº¬¶à¸ö Graph Space¡£

    6.Index£º±¾ÎÄÖгöÏÖµÄ Index Ö¸ nebula graph ÖеãºÍ±ßÉϵÄÊôÐÔË÷Òý¡£ÆäÊý¾ÝÀàÐÍÒÀÀµÓÚ tag / edge¡£

    7.TagIndex£º»ùÓÚ tag ´´½¨µÄË÷Òý£¬Ò»¸ö tag ¿ÉÒÔ´´½¨¶à¸öË÷Òý¡£Ä¿Ç°£¨2020.3£©Ôݲ»Ö§³Ö¿ç tag µÄ¸´ºÏË÷Òý£¬Òò´ËÒ»¸öË÷ÒýÖ»¿ÉÒÔ»ùÓÚÒ»¸ö tag¡£

    8.EdgeIndex£º»ùÓÚ Edge ´´½¨µÄË÷Òý¡£Í¬Ñù£¬Ò»¸ö Edge ¿ÉÒÔ´´½¨¶à¸öË÷Òý£¬µ«Ò»¸öË÷ÒýÖ»¿ÉÒÔ»ùÓÚÒ»¸ö edge¡£

    9.Scan Policy£ºIndex µÄɨÃè²ßÂÔ£¬ÍùÍùÒ»Ìõ²éѯÓï¾ä¿ÉÒÔÓжàÖÖË÷ÒýµÄɨÃ跽ʽ£¬µ«¾ßÌåʹÓÃÄÄÖÖɨÃ跽ʽÐèÒª Scan Policy À´¾ö¶¨¡£

    10.Optimizer£º¶Ô²éѯÌõ¼þ½øÐÐÓÅ»¯£¬ÀýÈç¶Ô where ×Ó¾äµÄ±í´ïʽÊ÷½øÐÐ×Ó±í´ïʽ½ÚµãµÄÅÅÐò¡¢·ÖÁÑ¡¢ºÏ²¢µÈ¡£ÆäÄ¿µÄÊÇ»ñÈ¡¸ü¸ßµÄ²éѯЧÂÊ¡£

    Ë÷ÒýÐèÇó·ÖÎö

    Nebula Graph ÊÇÒ»¸öͼÊý¾Ý¿âϵͳ£¬²éѯ³¡¾°Ò»°ãÊÇÓÉÒ»¸öµã³ö·¢£¬ÕÒ³öÖ¸¶¨±ßÀàÐ͵ÄÏà¹ØµãµÄ¼¯ºÏ£¬ÒÔ´ËÀàÍÆ½øÐУ¨¹ã¶ÈÓÅÏȱéÀú£©N ¶È²éѯ¡£ÁíÒ»ÖÖ²éѯ³¡¾°ÊǸø¶¨Ò»¸öÊôÐÔÖµ£¬ÕÒ³ö·ûºÏÕâ¸öÊôÐÔÖµµÄËùÓеĵã»ò±ß¡£ÔÚºóÃæÕâÖÖ³¡¾°ÖУ¬ÐèÒª¶ÔÊôÐÔÖµ½øÐиßÐÔÄܵÄɨÃ裬²é³öÓë´ËÊôÐÔÖµ¶ÔÓ¦µÄ±ß»òµã£¬ÒÔ¼°±ß»òµãÉÏµÄÆäËüÊôÐÔ¡£ÎªÁËÌá¸ßÊôÐÔÖµµÄ²éѯЧÂÊ£¬ÔÚÕâÀïÒýÈëÁËË÷ÒýµÄ¹¦ÄÜ¡£¶Ô±ß»òµãµÄÊôÐÔÖµ½øÐÐÅÅÐò£¬ÒÔ±ã¿ìËٵĶ¨Î»µ½Ä³¸öÊôÐÔÉÏ¡£ÒԴ˱ÜÃâÁËÈ«±íɨÃè¡£

    ¿ÉÒÔ¿´µ½¶ÔͼÊý¾Ý¿â Nebula Graph µÄË÷ÒýÒªÇó£º

    1.Ö§³Ö tag ºÍ edge µÄÊôÐÔË÷Òý

    2.Ö§³ÖË÷ÒýµÄɨÃè²ßÂԵķÖÎöºÍÉú³É

    3.Ö§³ÖË÷ÒýµÄ¹ÜÀí£¬È磺н¨Ë÷Òý¡¢Öؽ¨Ë÷Òý¡¢É¾³ýË÷Òý¡¢list | show Ë÷ÒýµÈ¡£

    ϵͳ¼Ü¹¹¸ÅÀÀ

    ͼÊý¾Ý¿â Nebula Graph ´æ´¢¼Ü¹¹

    ´Ó¼Ü¹¹Í¼¿ÉÒÔ¿´µ½£¬Ã¿¸öStorage Server ÖпÉÒÔ°üº¬¶à¸ö Storage Engine, ÿ¸ö Storage EngineÖпÉÒÔ°üº¬¶à¸öPartition, ²»Í¬µÄPartitionÖ®¼äͨ¹ý Raft ЭÒé½øÐÐÒ»ÖÂÐÔͬ²½¡£Ã¿¸ö Partition ÖмȰüº¬ÁË data£¬Ò²°üº¬ÁË index£¬Í¬Ò»¸öµã»ò±ßµÄ data ºÍ index ½«±»´æ´¢µ½Í¬Ò»¸ö Partition ÖС£

    ÒµÎñ¾ßÌå·ÖÎö

    Êý¾Ý´æ´¢½á¹¹

    ΪÁ˸üºÃµÄÃèÊöË÷ÒýµÄ´æ´¢½á¹¹£¬ÕâÀォͼÊý¾Ý¿â Nebula Graph ԭʼÊý¾ÝµÄ´æ´¢½á¹¹Ò»ÆðÄóöÀ´·ÖÎöÏ¡£

    µãµÄ´æ´¢½á¹¹

    µãµÄ Data ½á¹¹

    µãµÄ Index ½á¹¹

    Vertex µÄË÷Òý½á¹¹ÈçÉϱíËùʾ£¬ÏÂÃæÀ´ÏêϸµØ½²ÊöÏÂ×ֶΣº

    PartitionId£ºÒ»¸öµãµÄÊý¾ÝºÍË÷ÒýÔÚÂß¼­ÉÏÊÇ´æ·Åµ½Í¬Ò»¸ö·ÖÇøÖеġ£Ö®ËùÒÔÕâô×öµÄÔ­ÒòÖ÷ÒªÓÐÁ½µã£º

    µ±É¨ÃèË÷Òýʱ£¬¸ù¾ÝË÷ÒýµÄ key ÄÜ¿ìËٵػñÈ¡µ½Í¬Ò»¸ö·ÖÇøÖеĵã data£¬ÕâÑù¾Í¿ÉÒÔ·½±ãµØ»ñÈ¡Õâ¸öµãµÄÈκÎÒ»ÖÖÊôÐÔÖµ£¬¼´Ê¹Õâ¸öÊôÐÔÁв»ÊôÓÚ±¾Ë÷Òý¡£

    Ŀǰ edge µÄ´æ´¢ÊÇÓÉÆðµãµÄ ID Hash ·Ö²¼£¬»»¾ä»°Ëµ£¬Ò»¸öµãµÄ³ö±ß´æ´¢ÔÚÄÄÊÇÓɸõãµÄ VertexId ¾ö¶¨µÄ£¬Õâ¸öµãºÍËüµÄ³ö±ßÈç¹û±»´æ´¢µ½Í¬Ò»¸ö partition ÖУ¬µãµÄË÷ÒýɨÃèÄÜ¿ìËٵض¨Î»¸ÃµãµÄ³ö±ß¡£

    IndexId£ºindex µÄʶ±ðÂ룬ͨ¹ý indexId ¿É»ñȡָ¶¨ index µÄÔªÊý¾ÝÐÅÏ¢£¬ÀýÈ磺index Ëù¹ØÁªµÄ TagId£¬index ËùÔÚÁеÄÐÅÏ¢¡£

    Index binary£ºindex µÄºËÐÄ´æ´¢½á¹¹£¬ÊÇËùÓÐ index Ïà¹ØÁÐÊôÐÔÖµµÄ×Ö½Ú±àÂ룬Ïêϸ½á¹¹½«ÔÚ±¾ÎÄµÄ #Index binary# Õ½ÚÖн²½â¡£

    VertexId£ºµãµÄʶ±ðÂ룬ÔÚʵ¼ÊµÄ data ÖУ¬Ò»¸öµã¿ÉÄÜ»áÓв»Í¬ version µÄ¶àÐÐÊý¾Ý¡£µ«ÊÇÔÚ index ÖУ¬index ûÓÐ Version µÄ¸ÅÄindex ʼÖÕÓë×îРVersion µÄ Tag Ëù¶ÔÓ¦¡£

    ÉÏÃæ½²Íê×ֶΣ¬ÎÒÃÇÀ´¼òµ¥µØÊµ¼ù·ÖÎöÒ»²¨£º

    ¼ÙÉè PartitionId Ϊ _100£¬TagId ÓÐ tag_1 ºÍ tag_2£¬_ÆäÖÐ tag_1 °üº¬ÈýÁÐ £ºcol_t1_1¡¢col_t1_2¡¢col_t1_3£¬tag_2 °üº¬Á½ÁУºcol_t2_1¡¢col_t2_2¡£

    ÏÖÔÚÎÒÃÇÀ´´´½¨Ë÷Òý£º

    i1 = tag_1 (col_t1_1, col_t1_2) £¬¼ÙÉè i1 µÄ ID Ϊ 1£»

    i2 = tag_2(col_t2_1, col_t2_2), ¼ÙÉè i2 µÄ ID Ϊ 2£»

    ¿ÉÒÔ¿´µ½ËäÈ» tag_1 ÖÐÓÐ col_t1_3 ÕâÁУ¬µ«Êǽ¨Á¢Ë÷ÒýµÄʱºò²¢Ã»ÓÐʹÓõ½ col_t1_3£¬ÒòΪÔÚͼÊý¾Ý¿â Nebula Graph ÖÐË÷Òý¿ÉÒÔ»ùÓÚ Tag µÄÒ»Áлò¶àÁнøÐд´½¨¡£

    ²åÈëµã

    // VertexId = hash("v_t1_1")£¬¼ÙÈçΪ 50
    INSERT VERTEX tag_1(col_t1_1, col_t1_2, col_t1_3), tag_2(col_t2_1, col_t2_2) \
    VALUES hash("v_t1_1"):("v_t1_1", "v_t1_2", "v_t1_3", "v_t2_1", "v_t2_2");

    ´ÓÉÏ¿ÉÒÔ¿´µ½ VertexId ¿ÉÓÉ ID ±êʶ¶ÔÓ¦µÄÊýÖµ¾­¹ý Hash µÃµ½£¬Èç¹û±êʶ¶ÔÓ¦µÄÊýÖµ±¾ÉíÒѾ­Îª int64£¬ÔòÎÞÐè½øÐÐ Hash »òÕ߯äËûת»¯ÊýֵΪ int64 µÄÔËËã¡£¶ø´ËʱÊý¾Ý´æ´¢ÈçÏ£º

    ´ËʱµãµÄ Data ½á¹¹

    ´ËʱµãµÄ Index ½á¹¹

    ˵Ã÷£ºindex ÖÐ row ºÍ key ÊÇÒ»¸ö¸ÅÄΪË÷ÒýµÄΨһ±êʶ£»

    ±ßµÄ´æ´¢½á¹¹

    ±ßµÄË÷Òý½á¹¹ºÍµãË÷Òý½á¹¹Ô­ÀíÀàËÆ£¬ÕâÀï²»ÔÙ׸Êö¡£µ«ÓÐÒ»µãÐèҪ˵Ã÷£¬ÎªÁËʹË÷Òý key µÄΨһÐÔ³ÉÁ¢£¬Ë÷ÒýµÄ key µÄÉú³É½èÖúÁ˲»ÉÙ data ÖеÄÔªËØ£¬ÀýÈç VertexId¡¢SrcVertexId¡¢Rank µÈ£¬ÕâÒ²ÊÇΪʲôµãË÷ÒýÖв¢Ã»ÓÐ TagId ×ֶΣ¨±ßË÷ÒýÖÐҲûÓÐ EdgeType ×ֶΣ©£¬ÕâÊÇÒòΪ** IndexId ±¾Éí´øÓÐ VertexId µÈÐÅÏ¢¿ÉÖ±½ÓÇø·Ö¾ßÌåµÄ tagId »ò EdgeType**¡£

    ±ßµÄ Data ½á¹¹

    ±ßµÄ Index ½á¹¹

    Index binary ½éÉÜ

    Index binary ÊÇ index µÄºËÐÄ×ֶΣ¬ÔÚ index binary ÖÐÇø·Ö¶¨³¤×ֶκͲ»¶¨³¤×ֶΣ¬int¡¢double¡¢bool Ϊ¶¨³¤×ֶΣ¬string ÔòΪ²»¶¨³¤×ֶΡ£ÓÉÓÚ** index binary Êǽ«ËùÓÐ index column µÄÊôÐÔÖµ±àÂëÁ¬½Ó´æ´¢**£¬ÎªÁ˾«È·µØ¶¨Î»²»¶¨³¤×ֶΣ¬Nebula Graph ÔÚ index binary ĩβÓà int32 ¼Ç¼Á˲»¶¨³¤×ֶεij¤¶È¡£

    ¾Ù¸öÀý×Ó£º

    ÎÒÃÇÏÖÔÚÓÐÒ»¸ö index binary Ϊ index1£¬ÊÇÓÉ int ÀàÐ͵ÄË÷ÒýÁÐ1 c1¡¢string ÀàÐ͵ÄË÷ÒýÁÐ c2£¬string ÀàÐ͵ÄË÷ÒýÁÐ c3 ×é³É£º

    index1 (c1:int, c2:string, c3:string)

    ¼ÙÈçË÷ÒýÁÐ c1¡¢c2¡¢c3 ijһÐжÔÓ¦µÄ property Öµ·Ö±ðΪ£º23¡¢"abc"¡¢"here"£¬ÔòÔÚ index1 ÖÐÕâЩË÷ÒýÁн«±»´æ´¢ÎªÈçÏ£¨ÔÚʾÀýÖÐΪÁ˱ãÓÚÀí½â£¬ÎÒÃÇÖ±½ÓÓÃÔ­Öµ£¬Êµ¼Ê´æ´¢ÖÐÊÇÔ­Öµ»á¾­¹ý±àÂëÔÙ´æ´¢£©£º

    length = sizeof("abc") = 3

    length = sizeof("here") = 4

    ËùÒÔ index1 ¸Ã row ¶ÔÓ¦µÄ key ÔòΪ 23abchere34£»

    »Øµ½ÎÒÃÇ Index binary Õ½ڿªÆªËµµÄ index binary ¸ñʽÖдæÔÚ Variable-length field lenght ×ֶΣ¬ÄÇôÕâ¸ö×ֶεĵľßÌå×÷ÓÃÊÇÊ²Ã´ÄØ£¿ÎÒÃÇÀ´¼òµ¥µØ¾Ù¸öÀý£º

    ÏÖÔÚÎÒÃÇÓÖÓÐÁËÒ»¸ö index binary£¬ÎÒÃǸøËüÈ¡ÃûΪ index2£¬ËüÓÉ string ÀàÐ͵ÄË÷ÒýÁÐ1 c1¡¢string ÀàÐ͵ÄË÷ÒýÁÐ c2£¬string ÀàÐ͵ÄË÷ÒýÁÐ c3 ×é³É£º

    index2 (c1:string, c2:string, c3:string)

    ¼ÙÉèÎÒÃÇÏÖÔÚ c1¡¢c2¡¢c3 ·Ö±ðÓÐÁ½×éÈçϵÄÊýÖµ£º

    row1 : ("ab", "ab", "ab")

    row2: ("aba", "ba", "b")

    ¿ÉÒÔ¿´µ½ÕâÁ½ÐÐµÄ prefix£¨ÉÏͼºìÉ«²¿·Ö£©ÊÇÏàͬ£¬¶¼ÊÇ "ababab"£¬ÕâʱºòÔõÃ´Çø·ÖÕâÁ½¸ö row µÄ index binary µÄ key ÄØ£¿±ðµ£ÐÄ£¬ÎÒÃÇÓÐ Variable-length field lenght ¡£

    ÈôÓöµ½ where c1 == "ab" ÕâÑùµÄÌõ¼þ²éѯÓï¾ä£¬ÔÚ Variable-length field length ÖпÉÖ±½Ó¸ù¾Ý˳Ðò¶ÁÈ¡³ö c1 µÄ³¤¶È£¬ÔÙ¸ù¾ÝÕâ¸ö³¤¶ÈÈ¡³ö row1 ºÍ row2 ÖÐ c1 µÄÖµ£¬·Ö±ðÊÇ "ab" ºÍ "aba" £¬ÕâÑùÎÒÃǾ;«×¼µØÅжϳöÖ»ÓÐ row1 ÖÐµÄ "ab" ÊÇ·ûºÏ²éѯÌõ¼þµÄ¡£

    Ë÷ÒýµÄ´¦ÀíÂß¼­

    Index write

    µ± Tag / EdgeÖеÄÒ»Áлò¶àÁд´½¨ÁËË÷Òýºó£¬Ò»µ©Éæ¼°µ½ Tag / Edge Ïà¹ØµÄд²Ù×÷ʱ£¬¶ÔÓ¦µÄË÷Òý±ØÐëÁ¬Í¬Êý¾ÝÒ»Æð±»Ð޸ġ£ÏÂÃæ½«¶ÔË÷ÒýµÄwrite²Ù×÷ÔÚstorage²ãµÄ´¦ÀíÂß¼­½øÐмòµ¥½éÉÜ£º

    INSERT¡ª¡ª²åÈëÊý¾Ý

    µ±Óû§²úÉú²åÈëµã/±ß²Ù×÷ʱ£¬insertProcessor Ê×ÏÈ»áÅжÏËù²åÈëµÄÊý¾ÝÊÇ·ñÓдæÔÚË÷ÒýµÄ Tag ÊôÐÔ / Edge ÊôÐÔ¡£Èç¹ûûÓйØÁªµÄÊôÐÔÁÐË÷Òý£¬Ôò°´³£¹æ·½Ê½Éú³ÉРVersion£¬²¢½«Êý¾Ý put µ½ Storage Engine£»Èç¹ûÓйØÁªµÄÊôÐÔÁÐË÷Òý£¬Ôòͨ¹ýÔ­×Ó²Ù×÷дÈë Data ºÍ Index£¬²¢Åжϵ±Ç°µÄ Vertex / Edge ÊÇ·ñÓоɵÄÊôÐÔÖµ£¬Èç¹ûÓУ¬ÔòÒ»²¢ÔÚÔ­×Ó²Ù×÷ÖÐɾ³ý¾ÉÊôÐÔÖµ¡£

    DELETE¡ª¡ªÉ¾³ýÊý¾Ý

    µ±Óû§·¢Éú Drop Vertex / Edge ²Ù×÷ʱ£¬deleteProcessor »á½« Data ºÍ Index£¨Èç¹û´æÔÚ£©Ò»²¢É¾³ý£¬ÔÚɾ³ýµÄ¹ý³ÌÖÐͬÑùÐèҪʹÓÃÔ­×Ó²Ù×÷¡£

    UPDATE¡ª¡ª¸üÐÂÊý¾Ý

    Vertex / Edge µÄ¸üвÙ×÷¶ÔÓÚ Index À´Ëµ£¬ÔòÊÇ drop ºÍ insert µÄ²Ù×÷£ºÉ¾³ý¾ÉµÄË÷Òý£¬²åÈëеÄË÷Òý£¬ÎªÁ˱£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ£¬Í¬ÑùÐèÒªÔÚÔ­×Ó²Ù×÷ÖнøÐС£µ«ÊǶÔÓ¦ÆÕͨµÄ Data À´Ëµ£¬½ö½öÊÇ insert ²Ù×÷£¬Ê¹ÓÃ×îРVersion µÄ Data ¸²¸Ç¾É Version µÄ data ¼´¿É¡£

    Index scan

    ÔÚͼÊý¾Ý¿â Nebula Graph ÖÐÊÇÓà LOOKUP Óï¾äÀ´´¦Àí index scan ²Ù×÷µÄ£¬LOOKUP Óï¾ä¿Éͨ¹ýÊôÐÔÖµ×÷ΪÅжÏÌõ¼þ£¬²é³öËùÓзûºÏÌõ¼þµÄµã/±ß£¬Í¬Ñù LOOKUP Óï¾äÖ§³Ö WHERE ºÍ YIELD ×Ӿ䡣

    LOOKUP ʹÓü¼ÇÉ

    ÕýÈç¸ù¾Ý±¾ÎÄ#Êý¾Ý´æ´¢½á¹¹#Õ½ÚËùÃèÊöÄÇÑù£¬index ÖеÄË÷ÒýÁÐÊǰ´ÕÕ´´½¨ index ʱµÄÁÐ˳Ðò¾ö¶¨¡£

    ¾Ù¸öÀý×Ó£¬ÎÒÃÇÏÖÔÚÓÐ tag (col1, col2)£¬¸ù¾ÝÕâ¸ö tag ÎÒÃÇ¿ÉÒÔ´´½¨²»Í¬µÄË÷Òý£¬ÀýÈ磺

    index1 on tag(col1)

    index2 on tag(col2)

    index3 on tag(col1, col2)

    index4 on tag(col2, col1)

    ÎÒÃÇ¿ÉÒÔ¶Ô clo1¡¢col2 ½¨Á¢¶à¸öË÷Òý£¬µ«ÔÚ scan index ʱ£¬ÉÏÊöËĸö index ·µ»Ø½á¹û´æÔÚ²îÒ죬ÉõÖÁÊÇÍêÈ«²»Í¬£¬ÔÚʵ¼ÊÒµÎñÖоßÌåʹÓÃÄĸö index£¬¼° index µÄ×îÓÅÖ´ÐвßÂÔ£¬ÔòÊÇͨ¹ýË÷ÒýÓÅ»¯Æ÷¾ö¶¨¡£

    ÏÂÃæÎÒÃÇÔÙÀ´¸ù¾Ý¸Õ²Å 4 ¸ö index µÄÀý×ÓÉîÈë·ÖÎöÒ»²¨£º

    lookup on tag where tag.col1 ==1 # ×îÓÅµÄ index ÊÇ index1
    lookup on tag where tag.col2 == 2 # ×îÓÅµÄ index ÊÇindex2
    lookup on tag where tag.col1 > 1 and tag.col2 == 1
    # index3 ºÍ index4 ¶¼ÊÇÓÐЧµÄ index£¬¶ø index1 ºÍ index2 ÔòÎÞЧ

    ÔÚÉÏÊöµÚÈý¸öÀý×ÓÖУ¬index3 ºÍ index4 ¶¼ÊÇÓÐЧ index£¬µ«×îÖÕ±ØÐëÒª´ÓÁ½ÕßÖÐÑ¡³öÀ´Ò»¸ö×÷Ϊ index£¬¸ù¾ÝÓÅ»¯¹æÔò£¬ÒòΪ tag.col2 == 1 ÊÇÒ»¸öµÈ¼Û²éѯ£¬Òò´ËÓÅÏÈʹÓà tag.col2 »á¸ü¸ßЧ£¬ËùÒÔÓÅ»¯Æ÷Ó¦¸ÃÑ¡³ö index4 Ϊ×îÓÅ index¡£

    ʵ²ÙÒ»ÏÂͼÊý¾Ý¿â Nebula Graph Ë÷Òý

    ÔÚÕⲿ·ÖÎÒÃǾͲ»¾ßÌå½²½âij¸öÓï¾äµÄÓÃ;ÊÇʲôÁË£¬Èç¹ûÄã¶ÔÓï¾ä²»Çå³þµÄ»°¿ÉÒÔȥͼÊý¾Ý¿â Nebula Graph µÄ¹Ù·½ÂÛ̳½øÐÐÌáÎÊ£ºhttps://discuss.nebula-graph.io/

    CREATE¡ª¡ªË÷ÒýµÄ´´½¨

    (user@127.0.0.1:6999) [(none)]> CREATE SPACE my_space(partition_num=3, replica_factor=1);
    Execution succeeded (Time spent: 15.566/16.602 ms)
    Thu Feb 20 12:46:38 2020
    (user@127.0.0.1:6999) [(none)]> USE my_space;
    Execution succeeded (Time spent: 7.681/8.303 ms)
    Thu Feb 20 12:46:51 2020
    (user@127.0.0.1:6999) [my_space]> CREATE TAG lookup_tag_1(col1 string, col2 string, col3 string);
    Execution succeeded (Time spent: 12.228/12.931 ms)
    Thu Feb 20 12:47:05 2020
    (user@127.0.0.1:6999) [my_space]> CREATE TAG INDEX t_index_1 ON lookup_tag_1(col1, col2, col3);
    Execution succeeded (Time spent: 1.639/2.271 ms)
    Thu Feb 20 12:47:22 2020

    DROP¡ª¡ªÉ¾³ýË÷Òý

    (user@127.0.0.1:6999) [my_space]> DROP TAG INDEX t_index_1;
    Execution succeeded (Time spent: 4.147/5.192 ms)
    Sat Feb 22 11:30:35 2020

    REBUILD¡ª¡ªÖؽ¨Ë÷Òý

    Èç¹ûÄãÊÇ´Ó½ÏÀϰ汾µÄ Nebula Graph Éý¼¶ÉÏÀ´£¬»òÕßÓà Spark Writer ÅúÁ¿Ð´Èë¹ý³ÌÖУ¨ÎªÁËÐÔÄÜ£©Ã»Óдò¿ªË÷Òý£¬ÄÇôÕâЩÊý¾Ý»¹Ã»Óн¨Á¢¹ýË÷Òý£¬Õâʱ¿ÉÒÔʹÓà REBUILD INDEX ÃüÁîÀ´ÖØÐÂÈ«Á¿½¨Á¢Ò»´ÎË÷Òý¡£Õâ¸ö¹ý³Ì¿ÉÄÜ»áºÄʱ±È½Ï¾Ã£¬ÔÚ rebuild index Íê³Éǰ£¬¿Í»§¶ËµÄ¶ÁдËٶȶ¼»á±äÂý¡£

    REBUILD {TAG | EDGE} INDEX <index_name> [OFFLINE]

    LOOKUP¡ª¡ªÊ¹ÓÃË÷Òý

    ÐèҪ˵Ã÷һϣ¬Ê¹Óà LOOKUP Óï¾äǰ£¬ÇëÈ·±£ÒѾ­½¨Á¢¹ýË÷Òý£¨CREATE INDEX »ò REBUILD INDEX£©¡£

    (user@127.0.0.1:6999) [my_space]> INSERT VERTEX
    lookup_tag_1(col1, col2, col3) VALUES 200:("col1_200",
    "col2_200", "col3_200"), 201:("col1_201", "col2_201",
    "col3_201"), 202:("col1_202", "col2_202", "col3_202");
    Execution succeeded (Time spent: 18.185/19.267 ms)
    Thu Feb 20 12:49:44 2020
    (user@127.0.0.1:6999) [my_space]> LOOKUP ON
    lookup_tag_1 WHERE lookup_tag_1.col1 == "col1_200";
    ============
    | VertexID |
    ============
    | 200 |
    ------------
    Got 1 rows (Time spent: 12.001/12.64 ms)
    Thu Feb 20 12:49:54 2020
    (user@127.0.0.1:6999) [my_space]> LOOKUP ON lookup_tag_1
    WHERE lookup_tag_1.col1 == "col1_200" YIELD lookup_tag_1.col1,
    lookup_tag_1.col2, lookup_tag_1.col3;
    ====================================================
    ====================
    | VertexID | lookup_tag_1.col1 | lookup_tag_1.col2 |
    lookup_tag_1.col3 |
    ==================================================
    ======================
    | 200 | col1_200 | col2_200 | col3_200 |
    --------------------------------------------------
    ----------------------
    Got 1 rows (Time spent: 3.679/4.657 ms)
    Thu Feb 20 12:50:36 2020

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

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

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

    Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
    MongoDBʵս¿Î³Ì
    ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
    PostgreSQLÊý¾Ý¿âʵսÅàѵ
    ×îл¼Æ»®
    DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
    DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
    UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
    AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
    »ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
    ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
     
    ×îÐÂÎÄÕÂ
    InfluxDB¸ÅÄîºÍ»ù±¾²Ù×÷
    InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾ÝдÈë
    Éî¶ÈÂþ̸Êý¾Ýϵͳ¼Ü¹¹¡ª¡ªLambda architecture
    Lambda¼Ü¹¹Êµ¼ù
    InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾Ý¶ÁÈ¡
    ×îпγÌ
    OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯¡¢¼Ü¹¹Éè¼ÆºÍÔËÐÐά»¤
    ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
    NoSQLÊý¾Ý¿â£¨Ô­Àí¡¢Ó¦Óá¢×î¼Ñʵ¼ù£©
    ÆóÒµ¼¶Hadoop´óÊý¾Ý´¦Àí×î¼Ñʵ¼ù
    OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯×î¼Ñʵ¼ù
    ³É¹¦°¸Àý
    ij½ðÈÚ¹«Ë¾ Mysql¼¯ÈºÓëÐÔÄÜÓÅ»¯
    ±±¾© ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
    ÖªÃûijÐÅϢͨÐŹ«Ë¾ NoSQL»º´æÊý¾Ý¿â¼¼Êõ
    ±±¾© oracleÊý¾Ý¿âSQLÓÅ»¯
    ÖйúÒÆ¶¯ IaaSÔÆÆ½Ì¨-Ö÷Á÷Êý¾Ý¿â¼°´æ´¢¼¼Êõ