±à¼ÍƼö: |
±¾ÎÄÖ÷Òª¶Ô
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 |
|