±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½áºÏInfluxDBÔ´Âë¶Ô²éѯ¾ÛºÏÇëÇóÔÚ·þÎñÆ÷¶ËµÄ´¦Àí¿ò¼Ü½øÐÐÁËϵͳÀíÂÛ½éÉܵȵȣ¬Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ôhbasefly£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼¡¢ÍƼö¡£ |
|
ÈκÎÒ»¸öÊý¾Ý¿âϵͳÄں˹Ø×¢µÄÖØµãÎÞ·Ç£ºÊý¾ÝÔÚÄÚ´æÖÐÈçºÎ´æ´¢¡¢ÔÚÎļþÖÐÈçºÎ´æ´¢¡¢Ë÷Òý½á¹¹ÈçºÎ´æ´¢¡¢Êý¾ÝдÈëÁ÷³ÌÒÔ¼°Êý¾Ý¶ÁÈ¡Á÷³Ì¡£¹ØÓÚInfluxDB´æ´¢Äںˣ¬±ÊÕßÔÚ֮ǰµÄÎÄÕÂÖÐÒѾ±È½ÏÈ«ÃæµÄ½éÉÜÁËÊý¾ÝµÄÎļþ´æ´¢¸ñʽ¡¢µ¹ÅÅË÷Òý´æ´¢ÊµÏÖÒÔ¼°Êý¾ÝдÈëÁ÷³Ì£¬±¾ÆªÎÄÕÂÖØµã½éÉÜInfluxDBÖÐʱÐòÊý¾ÝµÄ¶ÁÈ¡Á÷³Ì¡£
InfluxDBÖ§³ÖÀàSQL²éѯ£¬³ÆÎªInfluxQL¡£InfluxQLÖ§³Ö»ù±¾µÄDDL²Ù×÷ºÍDML²Ù×÷Óï¾ä£¬Ïê¼ûInfluxQL_Spec£¬±ÈÈçSelectÓï¾ä£º
select_stmt =
"SELECT" fields from_clause [ into_clause
] [ where_clause ]
[ group_by_clause ] [ order_by_clause ] [ limit_clause
]
[ offset_clause ] [ slimit_clause ] [ soffset_clause
] . |
ʹÓÃInfluxQL¿ÉÒԷdz£·½±ã¡¢ÈËÐÔ»¯µØ¶ÔInfluxDBÖеÄʱÐòÊý¾Ý½øÐжàά¾ÛºÏ·ÖÎö¡£ÄÇInfluxDBÄÚ²¿ÊÇÈçºÎ´¦ÀíQueryÇëÇóµÄÄØ£¿½ÓÏÂÀ´±ÊÕß½áºÏÔ´Âë¶ÔInfluxDBµÄ²éѯÁ÷³Ì×öÒ»¸öÆÊÎö¡£ÁíÍ⣬Èç¹û¿´¹Ù¶ÔÔ´ÂëÕⲿ·Ö¸ÐÐËȤ£¬ÍƼöÏÈÔĶÁ¹Ù·½Îĵµ¶ÔÓ¦²¿·Ö£ºhttps://docs.influxdata.com/influxdb/v1.0
/query_language/spec/#query-engine-internals
±¾ÎÄÆª·ùÏà¶Ô½Ï³¤¡£ÎªÁË·½±ãÔĶÁ£¬±¾ÎÄ·ÖΪÉÏÏÂÁ½²¿·Ö£¬Éϰ벿·Ö»á´ÓÔÀí²ãÃæ½éÉÜInfluxDBµÄÊý¾Ý¶ÁÈ¡Á÷³Ì£¬Ï°벿·Ö»á¾ÙÒ»¸öÀý×ÓÄ£ÄâÕû¸öÊý¾Ý¶ÁÈ¡µÄ¹ý³Ì¡£
Éϰ벿·Ö£ºInfluxDBÊý¾Ý¶ÁÈ¡Á÷³ÌÔÀí
LSM(TSM)ÒýÇæ¶ÔÓÚ¶ÁÁ÷³ÌµÄ´¦Àíͨ³£À´Ëµ¶¼±È½Ï¸´ÔÓ£¬½¨Òé±£³Ö×ã¹»µÄÄÍÐĺÍרעÁ¦¡£ÀíÂÛ²¿·Ö»á·ÖÁ½¸öСģ¿é½øÐнéÉÜ£¬µÚÒ»¸öÄ£¿é»á´Óºê¹Û¿ò¼Ü²ãÃæ¼òµ¥ÊáÀíÕû¸ö¶ÁÈ¡Á÷³Ì£¬µÚ¶þ¸öÄ£¿é»á´Ó΢¹Ûϸ½Ú²ãÃæ·ÖÎöTSM´æ´¢ÒýÇæ£¨TSDB£©ÄÚ²¿ÏêϸµÄÖ´ÐÐÂß¼¡£
InfluxDB¶ÁÈ¡Á÷³Ì¿ò¼Ü
±ÊÕß¶ÔÕÕÔ´Âë¶ÔÕû¸öÁ÷³Ì×öÁËÒ»¸ö¼òµ¥µÄÊáÀí£¨ÏÂͼ¶ÁÕß¿ÉÄÜ¿´²»Çå³þ£¬ÎÄÄ©¸½ÓиÃͼµÄ¸ßÇå°æ£©£º

Õû¸ö¶ÁÈ¡Á÷³Ì´Óºê¹ÛÉÏ·ÖΪËĸö²¿·Ö£º
1. Query£ºInfluxQLÔÊÐíÓû§Ê¹ÓÃÀàSQLÓï¾äÖ´Ðвéѯ·ÖÎö¾ÛºÏ£¬InfluxQLÓï·¨Ïê¼û£ºhttps://docs.influxdata.com/influxdb/
v1.0/query_language/spec/
2. QueryParser£ºInfluxQL½øÈëϵͳ֮ºó£¬ÏµÍ³Ê×ÏÈ»á¶ÔInfluxQLÖ´ÐÐÇдʲ¢½âÎöΪ³éÏóÓï·¨Ê÷£¨AST£©£¬³éÏóÊ÷Öбêʾ³öÁËÊý¾ÝÔ´¡¢²éѯÌõ¼þ¡¢²éѯÁÐÒÔ¼°¾ÛºÏº¯ÊýµÈµÈ£¬·Ö±ð¶ÔÓ¦ÉÏͼÖÐSource¡¢ConditionÒÔ¼°Aggration¡£InfluxQLûÓÐʹÓÃͨÓõĵÚÈý·½AST½âÎö¿â£¬×Ô¼ºÊµÏÖÁËÒ»Ì×½âÎö¿â£¬¶Ôϸ½Ú¸ÐÐËȤµÄ¿ÉÒԲο¼£ºhttps://github.com/influxdata/influxql¡£½Ó×ÅInfluxDB»á½«³éÏóÊ÷ת»¯ÎªÒ»¸öQueryʵÌå¶ÔÏ󣬹©ºóÐø²éѯÖÐʹÓá£
3. BuildIterators£ºInfluxQLÓï¾äת»»ÎªQueryʵÌå¶ÔÏóÖ®ºó£¬¾Í½øÈë¶ÁÈ¡Á÷³ÌÖÐ×îÖØÒª×îºËÐĵÄÒ»¸ö»·½Ú
¨C ¹¹½¨IteratorÌåϵ¡£¹¹½¨IteratorÌåϵÊÇÒ»¸ö·Ç³£¸´ÔÓµÄÂß¼¹ý³Ì£¬ÆäÖÐϸ½Ú·Ç³£·±¸´£¬±ÊÕß¾¡¿ÉÄÜ»¯·±Îª¼ò£¬½«ÆäÖеÄÖ÷Ïß³é³öÀ´¡£ÎªÁË·½±ãÀí½â£¬±ÊÕß½«IteratorÌåϵ·ÖΪÈý¸ö×ÓÌåϵ£º¶¥²ãIterator×ÓÌåϵ¡¢Öмä²ãIterator×ÓÌåϵÒÔ¼°µ×²ãIterator×ÓÌåϵ¡£
£¨1£©¶¥²ãIterator×ÓÌåϵ
InfluxDB»áΪInfluxQLÖÐËùÓвéѯfield¹¹ÔìÒ»¸öFieldIterator£¬FieldIterator±íʾÿ¸ö²éѯÁж¼»á´´½¨Ò»¸öIterator£¨³ÆÎªExprIterator£©£¬ÕâÊÇÒòΪInfluxDBÊÇÁÐʽ´æ´¢ÏµÍ³£¬ËùÓеÄÁж¼ÊǶÀÁ¢´æ´¢µÄ£¬Òò´Ë»ùÓÚÁзֱ𹹽¨Iterator·½±ãÖ´Ðвéѯ¾ÛºÏ²Ù×÷¡£±ÈÈçsum(click)£¬sum(impressions)ºÍsum(revenue)Èý¸ö²éѯÁоͷֱð¶ÔÓ¦Ò»¸öExprIterator¡£
ExprIterator¸ù¾Ý²éѯÁÐÖµÊÇ·ñÐèÒª¾ÛºÏ¿ÉÒÔ·ÖΪVarRefIteratorºÍCallIterator£¬Ç°Õß±íʾÁÐÖµ¿ÉÒÔÖ±½Ó²éѯ·µ»Ø£¬²»ÐèÒª¾ÛºÏ£»ºóÕß±íʾ²éѯÁÐÐèÒªÖ´ÐÐijЩ¾ÛºÏ²Ù×÷¡£Ê¾ÀýÖвéѯsum(click)¾ÍÊǵäÐ͵ÄCallIterator£¬CallIteratorʵ¼ÊʵÏÖ·ÖΪÁ½²½£¬Ê×ÏÈͨ¹ýVarRefIterator°Ñ¶ÔÓ¦µÄÁÐÖµ²éѯµ½£¬ÔÙͨ¹ý¶ÔÓ¦µÄReduceº¯ÊýÖ´ÐÐÏàÓ¦¾ÛºÏ¡£±ÈÈçsum(click)Õâ¸öCallIterator¾ÍÐèÒª¹ÍÓ¶Ò»¸öVarRefIterator°ÑÂú×ãÌõ¼þµÄclickÁÐÖµÄÃÉÏÀ´£¬ÔÙÖ´ÐÐReduceº¯ÊýsumÖ´ÐоۺϲÙ×÷¡£
£¨2£©Öмä²ãIterator×ÓÌåϵ
InfluxDBÖÐÒ»¸ö²éѯÁеÄÖµ¿ÉÄÜ·Ö²¼ÔÚ²»Í¬µÄShardÉÏ£¬ÐèÒª¸ù¾ÝTimeRange¾ö¶¨¸ø¶¨Ê±¼ä¶ÎÔÚÄÄЩshardÉÏ£¬²¢ÎªÃ¿¸öShard¹¹½¨Ò»¸öIterator£¬¹ÍÓ¶Õâ¸öÂß¼Iterator¸ºÔð²éѯÕâ¸öshardÉ϶ÔÓ¦ÁеÄÁÐÖµ¡£Ä¿Ç°µ¥»ú°æËùÓÐshard¶¼ÔÚͬһ¸öInfluxDBʵÀýÉÏ£¬Èç¹ûʵÏÖ·Ö²¼Ê½¹ÜÀí£¬ÐèÒªÔÚÕâÒ»²ã×ö´¦Àí¡£
£¨3£©µ×²ãIterator×ÓÌåϵ
µ×²ãIterator×ÓÌåϵ¸ºÔ𵥸öshard(engine)ÉÏÂú×ãÌõ¼þµÄijһÁÐÖµµÄ²éÕÒ»òÕßµ¥»ú¾ÛºÏ£¬ÊÇIteratorÌåϵÖÐʵ¼Ê¸É»îµÄIterator¡£±ÈÈçÂú×ãwhere
advertiser = ¡°baidu.com¡± Õâ¸öÌõ¼þ¾ÍÐèÒªÏÈÔÚµ¹ÅÅË÷ÒýÖиù¾Ýadvertiser
= ¡°baidu.com¡±²éµ½°üº¬¸ÃtagµÄËùÓÐseries£¬ÔÙΪÿ¸öseries¹¹½¨Ò»¸öTagsetIteratorÈ¥²éÕÒ¶ÔÓ¦µÄÁÐÖµ£¬TagsetIterator»á½«²éÕÒÖ¸ÕëÖÃÓÚ×îСµÄÁÐÖµ´¦¡£
×ݹÛÕû¸öIteratorÌåϵµÄ¹¹½¨£¬ÕûÌåÂß¼»¹ÊǺÜÇåÎúµÄ¡£×ܽáÆðÀ´¾ÍÊÇ£¬²éѯ°´ÕÕ²éѯÁй¹½¨×î¶¥²ãFieldIterator£¬Ã¿¸öFieldIterator»á¸ù¾ÝTimeRange¹ÍÓ¶¶à¸öShardIteratorÈ¥´¦Àíµ¥¸öShardÉÏÃæ¶ÔÓ¦ÁÐÖµµÄ²éÕÒ£¬¶Ô²éÕÒµ½µÄֵҪôֱ½Ó·µ»ØÒªÃ´Ö´ÐÐReduceº¯Êý½øÐоۺϲÙ×÷¡£Ã¿¸öShardÄÚ²¿Ê×ÏÈ»á¸ù¾Ý²éѯÌõ¼þÀûÓõ¹ÅÅË÷Òý¶¨Î»µ½ËùÓÐÂú×ãÌõ¼þµÄseries£¬ÔÙΪÿ¸öseries¹¹½¨Ò»¸öTagsetIteratorÓÃÀ´²éÕÒ¾ßÌåµÄÁÐÖµÊý¾Ý¡£Òò´Ë£¬TagsetIteratorÊÇÕû¸öÌåϵÖÐΨһ¸É»îµÄIterator£¬ËùÓÐÆäËûÉϲãIterator¶¼ÊÇÂß¼Iterator¡£
ÁíÒ»¸ö·Ç³£ÖØÒªµÄµãÊÇ£¬Í¬Ò»¸öShardÄÚµÄËùÓÐTagsetIteratorÔÚ¹¹½¨Íê³É»áºÏ²¢³ÉÒ»¸öShardIterator£¬Õâ¸öºÏ²¢¹ý³ÌÊǶÔÕâЩTagsetIterator½øÐÐÅÅÐòµÄ¹ý³Ì£¬ÅÅÐò¹æÔòÊǰ´ÕÕseriesÓÉСµ½´óÅÅÐò»òÕßÓÉ´óµ½Ð¡ÅÅÐò£¨ÓÉÓû§SQL¶Ô²éѯ½á¹ûÊÇÓÉСµ½´óÅÅÐò»¹ÊÇÓÉ´óµ½Ð¡ÅÅÐò¾ö¶¨£©¡£Í¬Àí£¬Ò»¸öÁÐÖµ¶ÔÓ¦µÄ¶à¸öShardIterator¹¹½¨Íê³ÉÖ®ºó»áºÏ²¢³ÉÒ»¸öFieldIterator£¬ºÏ²¢¹ý³ÌÒàÊÇÒ»¸öÅÅÐò¹ý³Ì£¬²»¹ýÅÅÐòÊÇÕë¶ÔËùÓÐShardÖеÄTagsetIterator½øÐеģ¬ÅÅÐò¹æÔòÊÇÏȱȽÏseries£¬ÔٱȽÏʱ¼ä¡£¿É¼û£¬Ò»¸öFieldIterator×îÖÕÊÇÓÉһϵÁÐÅÅÐò¹ýµÄTagsetIterator¹¹³ÉµÄ¡£
4. Emitter.Emit£ºIteratorÌåϵ¹¹½¨Íê³ÉÖ®ºó¾ÍÍê³ÉÁ˲éѯ¾ÛºÏǰµÄ×¼±¸¹¤×÷£¬½ÓÏÂÀ´¾Í¿ªÊ¼¸É»îÁË¡£¸É»îÂß¼¼òµ¥À´½²ÊDZéÀúËùÓÐFieldIterator£¬¶Ôÿ¸öFieldIteratorÖ´ÐÐÒ»´ÎNextº¯Êý£¬¾Í»á·µ»ØÃ¿¸ö²éѯÁеĽá¹ûÖµ£¬×é×°µ½Ò»Æð¾ÍÊÇÒ»ÐÐÊý¾Ý¡£FieldIteratorÖ´ÐÐNext()º¯Êý»á´«µÝµ½×îµ×²ãµÄTagsetIterator£¬TagsetIteratorÖ´ÐÐNextº¯Êýʵ¼Ê·µ»ØÕæÊµµÄʱÐòÊý¾Ý¡£
TSDB´æ´¢ÒýÇæÖ´ÐÐÂß¼
TSDB´æ´¢ÒýÇæ£¨Êµ¼ÊÉϾÍÊÇÒ»¸öShard£©¸ù¾ÝÓû§µÄ²éѯÇëÇóÖ´ÐÐÔʼÊý¾ÝµÄ²éѯ¾ÍÊÇÉÏÎÄÖÐÌáµ½µÄµ×²ãIterator×ÓÌåϵµÄ¹¹½¨¡£²éѯ¹ý³Ì·ÖΪÁ½¸ö²¿·Ö£ºµ¹ÅÅË÷Òý²éѯ¹ýÂËÒÔ¼°TSMÊý¾Ý²ã²éѯ£¬Ç°Õßͨ¹ýQueryÖеÄwhereÌõ¼þ½áºÏµ¹ÅÅË÷Òý¹ýÂ˵ô²»Âú×ãÌõ¼þµÄSeriesKey£»ºóÕ߸ù¾ÝÁôϵÄSeriesKeyÒÔ¼°whereÌõ¼þÖÐʱ¼ä¶ÎÐÅÏ¢£¨TimeRange£©ÔÚTSMFileÖÐÒÔ¼°ÄÚ´æÖвé³ö×îÖÕÂú×ãÌõ¼þµÄÊýÖµÁС£TSDB´æ´¢ÒýÇæ»á½«²éѯµ½µÄËùÓÐÂú×ãÌõ¼þµÄÔʼÊýÖµÁзµ»Ø¸øÉϲ㣬Éϲã¸ù¾Ý¾ÛºÏº¯Êý¶ÔÔʼÊý¾Ý½øÐоۺϲ¢½«¾ÛºÏ½á¹û·µ»Ø¸øÓû§¡£Õû¸ö¹ý³ÌÈçÏÂͼËùʾ£º

ÉÏͼÐèÒª´Óµ×²¿ÏòÉÏä¯ÀÀ£¬Õû¸öÁ÷³Ì¿ÉÒÔÕûÀíΪÈçÏ£º
1. ¸ù¾Ýwhere conditionÒÔ¼°ËùÓе¹ÅÅË÷ÒýÎļþ²é´¦ËùÓÐÂú×ãÌõ¼þµÄSeriesKey
2. ½«Âú×ãÌõ¼þµÄSeriesKey¸ù¾ÝGroupByά¶ÈÁнøÐзÖ×飬²»Í¬·Ö×éºóÐøµÄËùÓвÙ×÷¶¼¿ÉÒÔ¶ÀÁ¢²¢·¢Ö´ÐУ¬Òò´Ë¿ÉÒÔ¶àÏ̴߳¦Àí
3. Õë¶Ôij¸ö·Ö×éµÄSeriesKey¼¯ºÏÒÔ¼°´ý²éѯÁУ¬¸ù¾ÝÖ¸¶¨²éѯʱ¼ä¶Î£¨TimeRange£©ÔÚËùÓÐTSMFileÖиù¾ÝB+Ê÷Ë÷Òý¹¹½¨²éѯiterator
4. ½«Âú×ãÌõ¼þµÄÔʼÊý¾Ý·µ»Ø¸øÉÏ²ã½øÐоۺÏÔËË㣬²¢½«¾ÛºÏÔËËãµÄ½á¹û·µ»Ø¸øÓû§
ʵ¼ÊÖ´ÐеĹý³Ì¿ÉÄܱȽϳéÏó£¬ÎªÁ˸üºÃµÄÀí½â£¬±ÊÕßÔÚϰ벿·Ö¾ÙÁËÒ»¸öʾÀý¡£Ã»ÓÐÀí½âÉÏÃæµÄÂ߼û¹ØÏµ£¬¿ÉÒÔÏÈ¿´ÏÂÃæµÄʾÀý£¬¿´ÍêÖ®ºóÔÙ¿´ÉÏÃæµÄÀíÂÛÂß¼ÏàÐÅ»á¸ü¼ÓÈÝÒ×Àí½â¡£
ϰ벿·Ö£ºInfluxDB²éѯÁ÷³ÌʾÀý
ÎÄÕÂÉϰ벿·Ö´ÓÀíÂÛ²ãÃæ¶ÔInfluxDB²éѯÁ÷³Ì½øÐÐÁ˽éÉÜ¡£ÎªÁË·½±ãÀí½âTSDB´æ´¢ÒýÇæ´¦Àí²éѯÁ÷³ÌµÄÂß¼£¬±ÊÕßͨ¹ýÈçÏÂÒ»¸öÕæÊµÊ¾Àý½«ÆäÖеĺËÐIJ½Öè½øÐÐ˵Ã÷¡£Ï±íΪÔʼʱÐòÊý¾Ý±í£¬±íÖÐÓÐ3¸öά¶ÈÁУºpublisher¡¢advertiserÒÔ¼°gender£¬3¸öÊýÖµÁУºimpression¡¢clickÒÔ¼°revenue£º

ÏÖÔÚÓû§Ïë²éѯ2018Äê1Ô·ݷ¢²¼ÔÚbaidu.comƽ̨ÉϵIJ»Í¬¹ã¸æÉÌµÄÆØ¹âÁ¿¡¢µã»÷Á¿ÒÔ¼°×ÜÊÕÈ룬SQLÈçÏÂËùʾ£º
select sum(click),sum(impression),sum(revenue)
from table group by publisher where advertiser
= "baidu.com" and timestamp > "2018-01-01"
and timestamp < "2018-02-01" |
²½ÖèÒ»£ºµ¹ÅÅË÷Òý¹ýÂË+groupby·Ö×é
Ôʼ²éѯÓï¾ä£ºselect ¡. from ad_datasource where advertiser
= ¡°baidu.com¡± ¡¡ ¡£µ¹ÅÅË÷Òý¼´¸ù¾ÝÌõ¼þadvertiser=¡±baidu.com¡±ÔÚËùÓÐIndex
FileÖбéÀú²éѯ°üº¬¸ÃtagµÄËùÓÐSeriesKey£¬¾ßÌåÔÀí£¨Ïê¼û¡¶Ê±ÐòÊý¾Ý¿â¼¼ÊõÌåϵ ¨C InfluxDB
¶àά²éѯ֮µ¹ÅÅË÷Òý¡·£©ÈçÏ£º
1. ¸ù¾ÝIndex FileÖÐMeasurement Block¸ù¾Ý¡±ad_datasource¡±½øÐйýÂË£¬¿ÉÒÔÖ±½Ó¶¨Î»µ½¸ø¶¨source¶ÔÓ¦µÄËùÓÐTagKeyËùÔÚµÄÎļþoffset|size¡£
2. ¼ÓÔØ³ö¶ÔÓ¦TagKeyÇøÓòµÄHash Index£¬Ê¹Óøø¶¨TagKey£¨¡±advertiser¡±£©½øÐÐhash¿ÉÒÔÖ±½Ó¶¨Î»µ½¸ÃTagKey¶ÔÓ¦µÄTagValueµÄÎļþoffset|size¡£
3. ¼ÓÔØ³öTagKey¶ÔÓ¦TagValueÇøÓòµÄHash Index£¬Ê¹ÓùýÂËÌõ¼þTagValue£¨¡±baidu.com¡±£©½øÐÐhash¿ÉÒÔÖ±½Ó¶¨Î»µ½¸ÃTagValue¶ÔÓ¦µÄËùÓÐSeriesID¡£
4. SeriesID¾ÍÊǶÔÓ¦SeriesKeyÔÚË÷ÒýÎļþÖеÄoffset£¬Ö±½Ó¸ù¾ÝSeriesID¿ÉÒÔ¼ÓÔØ³ö¶ÔÓ¦µÄSeriesKey¡£
Âú×ãÌõ¼þµÄËùÓÐSeriesKeyÈçϱíËùʾ£¬¹²ÓÐ3¸ö£º

¸ù¾Ýµ¹ÅÅË÷Òý²éѯµÃµ½ËùÓеÄSeriesKeyÖ®ºó£¬ÕâÀïÓÐÒ»¸ö·Ç³£ÖØÒªµÄ²½Ö裺¸ù¾ÝgroupbyÌõ¼þ¶ÔSeriesKey½øÐзÖ×飬·Ö×éË㷨Ϊhash¡£Ê¾Àý²éѯÖоۺÏÌõ¼þΪgroup
by publisher£¬Òò´ËÐèÒª½«ÉÏÃæµÃµ½µÄ3¸öSeriesKey°´ÕÕpublisherµÄ²»Í¬·Ö³ÉÈçÏÂÁ½×飺

ÔÚµ¹ÅÅË÷ÒýÖ®ºóÖ´ÐзÖ×éÒâÒå·Ç³£Öش󣬷Ö×éºó²»Í¬groupµÄSeriesKeyÊÇ¿ÉÒÔ²¢ÐжÀÁ¢Ö´Ðвéѯ²¢×îÖÕÖ´Ðоۺϵģ¬Òò´ËºóÐøµÄËùÓвÙ×÷¶¼¿ÉÒÔʹÓöà¸öÏ̲߳¢·¢Ö´ÐУ¬¼«´óÌáÉýÕû¸ö²éѯÐÔÄÜ¡£
²½Öè¶þ£ºTSMÎļþÊý¾Ý¼ìË÷
µ½ÕâÒ»²½£¬ÎÒÃÇÒѾ°´ÕÕgroupbyµÃµ½·Ö×éºóµÄSeriesKey¼¯ºÏ¡£½ÓÏÂÀ´ÐèÒª¸ù¾ÝSeriesKeyÒÔ¼°TimeRangeÔÚTSMÊý¾ÝÎļþÖвéÕÒÂú×ãÌõ¼þµÄ´ý²éѯÁС£ÔÚTSMÊý¾ÝÎļþÖиù¾ÝSeriesKeyÒÔ¼°TimeRange²éѯfieldµÄ¾ßÌå¹ý³ÌÈçÏ£º
ÉÏͼÖÐÖм䲿·ÖΪË÷Òý²ã£¬TSMÔÚÆô¶¯Ö®ºó¾Í»á½«TSMÎļþµÄË÷Òý²¿·Ö¼ÓÔØµ½Äڴ棬Êý¾Ý²¿·ÖÒòΪ̫´ó²¢²»»áÖ±½Ó¼ÓÔØµ½ÄÚ´æ¡£Óû§²éѯ¿ÉÒÔ·ÖΪÈý²½£º
1. Ê×Ïȸù¾ÝKey£¨SeriesKey+fieldKey£©ÕÒµ½¶ÔÓ¦µÄSeriesIndex Block£¬ÒòΪKeyÊÇÓÐÐòµÄ£¬ËùÒÔ¿ÉÒÔʹÓöþ·Ö²éÕÒÀ´¾ßÌåʵÏÖ
2. ÕÒµ½SeriesIndex BlockÖ®ºóÔÙ¸ù¾Ý²éÕÒµÄʱ¼ä·¶Î§£¬Ê¹ÓÃ[MinTime, MaxTime]Ë÷Òý¶¨Î»µ½¿ÉÄܵÄSeries
Data BlockÁбí
3. ½«Âú×ãÌõ¼þµÄSeries Data Block¼ÓÔØµ½ÄÚ´æÖнâѹ½øÒ»²½Ê¹Óöþ·Ö²éÕÒËã·¨²éÕÒ¼´¿ÉÕÒµ½
ÔÚTSMÖвéѯÂú×ãTimeRangeÌõ¼þµÄSeriesKey¶ÔÓ¦µÄ´ý²éѯÁÐÖµ£¬ÒòΪInfluxDB»á¸ù¾Ý²»Í¬µÄ²éѯÁÐÉèÖöÀÁ¢µÄFieldIterator£¬Òò´Ë²éѯÁÐÓжàÉÙ¾ÍÓжàÉÙ¸öFieldIterator£¬ÈçÏÂËùʾ£º

²½ÖèÈý£ºÔʼÊý¾Ý¾ÛºÏ
²éѯµ½Âú×ãÌõ¼þµÄËùÓÐÔʼÊý¾ÝÖ®ºó£¬InfluxDB»á¸ù¾Ý²éѯ¾ÛºÏº¯Êý¶ÔÔʼÊý¾Ý½øÐоۺϣ¬ÈçÏÂͼËùʾ£º

ÎÄÕÂ×ܽá
±¾ÎÄÖ÷Òª½áºÏInfluxDBÔ´Âë¶Ô²éѯ¾ÛºÏÇëÇóÔÚ·þÎñÆ÷¶ËµÄ´¦Àí¿ò¼Ü½øÐÐÁËϵͳÀíÂÛ½éÉÜ£¬Í¬Ê±ÉîÈë½éÉÜÁËInfluxDB
Shard EngineÊÇÈçºÎÀûÓõ¹ÅÅË÷Òý¡¢Ê±ÐòÊý¾Ý´æ´¢Îļþ£¨TSMFile£©´¦ÀíÓû§µÄ²éѯÇëÇó¡£×îºó£¬¾ÙÁËÒ»¸öʾÀý¶ÔShard
EngineµÄÖ´ÐÐÁ÷³Ì½øÐÐÁËÐÎÏó»¯ËµÃ÷¡£Õû¸ö¶ÁÈ¡µÄʾÒâͼ¸½¼þ£º
InfluxDB×îаæ(1.6)²éѯ¾ÛºÏ¿ò¼Ü |