±à¼ÍƼö: |
±¾ÆªÎÄÕÂÖ÷Òª¼¯ÖнéÉÜÔÚ´æ´¢ÎļþµÄ»ù´¡ÉÏ·Ö±ð½éÉÜInfluxDBÊÇÈçºÎ´¦ÀíÓû§µÄдÈ루ɾ³ý£©ÇëÇóºÍ¶ÁÈ¡ÇëÇóµÄ¡£Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ôhbasefly£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼¡¢ÍƼö¡£ |
|
InfluxDBдÈë×ÜÌå¿ò¼Ü
InfluxDBÌṩÁ˶àÖÖ½Ó¿ÚÐÒ鹩ÍⲿӦÓÃдÈ룬±ÈÈç¿ÉÒÔʹÓÃcollected²É¼¯Êý¾ÝÉÏ´«£¬¿ÉÒÔʹÓÃopentsdb×÷ΪÊäÈ룬Ҳ¿ÉÒÔʹÓÃhttpÐÒéÒÔ¼°udpÐÒéÅúÁ¿Ð´ÈëÊý¾Ý¡£ÅúÁ¿Êý¾Ý½øÈëµ½InfluxDBÖ®ºó×ÜÌå»á¾¹ýÈý¸ö²½ÖèµÄ´¦Àí£¬ÈçÏÂͼËùʾ£º
ÅúÁ¿Ê±ÐòÊý¾Ýshard·ÓÉ£ºInfluxDBÊ×ÏȻὫÕâЩÊý¾Ý¸ù¾ÝshardµÄ²»Í¬·Ö³É²»Í¬µÄ·Ö×飬ÿ¸ö·Ö×éµÄʱÐòÊý¾Ý»á·¢Ë͵½¶ÔÓ¦µÄshard¡£Ã¿¸öshardÏ൱ÓÚHBaseÖÐregionµÄ¸ÅÄÊÇInfluxDBÖд¦ÀíÓû§¶ÁдÇëÇóµÄµ¥»úÒýÇæ¡£
µ¹ÅÅË÷ÒýÒýÇæ¹¹½¨µ¹ÅÅË÷Òý£ºInfluxDBÖÐshardÓÉÁ½¸öLSMÒýÇæ¹¹³É ¨C µ¹ÅÅË÷ÒýÒýÇæºÍTSMÒýÇ档ʱÐòÊý¾ÝÊ×ÏȻᾹýµ¹ÅÅË÷ÒýÒýÇæ¹¹½¨µ¹ÅÅË÷Òý£¬µ¹ÅÅË÷ÒýÓÃÀ´ÊµÏÖInfluxDBµÄ¶àά²éѯ¡£
TSMÒýÇæ³Ö¾Ã»¯Ê±ÐòÊý¾Ý£ºµ¹ÅÅË÷Òý¹¹½¨³É¹¦Ö®ºóʱÐòÊý¾Ý»á½øÈëTSM Engine´¦Àí¡£TMS Engine´¦ÀíÁ÷³ÌºÍͨÓÃLSM Engine»ù±¾Ò»Ñù£¬ÏȽ«Ð´ÈëÇëÇó×·¼ÓдÈëWALÈÕÖ¾£¬ÔÙдÈëcache£¬Ò»µ©Âú×ãÌض¨Ìõ¼þ»á½«cacheÖеÄʱÐòÊý¾ÝÖ´ÐÐflush²Ù×÷ÂäÅÌÐγÉTSM File¡£
ÅúÁ¿Ê±ÐòÊý¾ÝShard·ÓÉ
ͨ³£À´ËµÊ±ÐòÊý¾Ý¶¼»áÒÔÅúÁ¿µÄÐÎʽдÈëÊý¾Ý¿â£¬ºÜÉÙ»áÏñ¹ØϵÐÍÊý¾Ý¿âÄÇÑùÒ»ÌõÒ»ÌõдÈ룬Õâ¶ÔÓÚ×·Çó¸ßÍÌ͵ÄʱÐòϵͳÀ´ËµÖÁ¹ØÖØÒª¡£ÅúÁ¿Êý¾ÝдÈëInfluxDBÖ®ºó×öµÄµÚÒ»¼þÊÂÇéÊÇ·Ö×飬½«Ê±ÐòÊý¾Ýµã°´ÕÕËùÊôshard»®·ÖΪ¶à×飨³ÆΪShard Map£©£¬Ã¿×éʱÐòÊý¾Ýµã½«»á·¢Ë͸ø¶ÔÓ¦µÄshardÒýÇæ²¢·¢´¦Àí¡£
ÕâÀïÎÒÃǼòµ¥»Ø¹ËÏÂInfluxDBµÄSharding²ßÂÔ£¨Ïê¼ûÎÄÕ¡¶Ê±ÐòÊý¾Ý¿â¼¼ÊõÌåϵ ¨C ³õʶInfluxDB¡·ÖÐSharding²ßÂÔÒ»½Ú£©¡£InfluxDBËä˵Êǵ¥»úÊý¾Ý¿â£¬µ«ÊÇÿ¸ö±íÒÀÈ»»á±»·ÖΪ¶à¸öshard¡£¼òµ¥À´Ëµ£¬InfluxDBÖÐshardingÊôÓÚÁ½²ãsharding£ºÊ×ÏÈ°´ÕÕʱ¼ä½øÐÐRange Sharding£¬¼´°´Ê±¼ä·ÖƬ£¬±ÈÈç7ÌìÒ»¸ö·ÖƬµÄ»°£¬×î½ü7ÌìµÄÊý¾Ý»á·Öµ½Ò»¸öshard£¬Ò»ÖÜÇ°µ½Á½ÖÜÇ°µÄÊý¾Ý»á±»·Öµ½ÉÏÒ»¸öshard£¬ÒÔ´ËÀàÍÆ£»ÔÚʱ¼ä·ÖƬµÄ»ù´¡ÉÏ»¹¿ÉÒÔÔÙÖ´ÐÐHash Sharding£¬°´ÕÕSeriesKeyÖ´ÐÐHash£¨±£Ö¤Í¬Ò»¸öSeriesKey¶ÔÓ¦µÄËùÓÐÊý¾Ý¶¼Â䵽ͬһ¸öshard£©£¬ÔÙ½«Êý¾Ý·ÖÉ¢µ½Ö¸¶¨µÄ¶à¸öshardÖС£
µ±È»£¬¾¹ý±ÊÕßÉî½øÒ»²½Á˽⣬·¢ÏÖµ¥»úInfluxDBÖ»ÓеÚÒ»²ãsharding£¬¼´Ö»Óиù¾Ýʱ¼ä½øÐÐRange Sharding£¬²¢Ã»ÓÐÖ´ÐÐHash Sharding¡£Hash ShardingÖ»»áÔÚ·Ö²¼Ê½InfluxDBÖвŻáÓõ½¡£
µ¹ÅÅË÷ÒýÒýÇæ¹¹½¨µ¹ÅÅË÷Òý
InfluxDBÖе¹ÅÅË÷ÒýÒýÇæʹÓÃLSMÒýÇæ¹¹½¨£¬ÉÏƪÎÄÕ¡¶Ê±ÐòÊý¾Ý¿â¼¼ÊõÌåϵ ¨C InfluxDB ¶àά²éѯ֮µ¹ÅÅË÷Òý¡·ÆäʵÒѾ¶ÔÒýÇæµÄ¹¤×÷ÔÀí½øÐÐÁËÉîÈëµÄ½éÉÜ¡£ÕâÀïÖص㽫Õû¸öÁ÷³Ì×öÒ»¸ö´®ÁªÊáÀí£¬ÆäÖÐϸ½Ú²¿·Ö²»»áÕ¹¿ªÀ´½²£¬ÓÐÐËȤµÄ»°¿ÉÒԲο¼ÉÏһƪÎÄÕ¡£
ÕâÀïÊ×ÏÈ˼¿¼Ò»¸öÎÊÌ⣺ΪʲôInfluxDBµ¹ÅÅË÷ÒýÐèÒª¹¹½¨³ÉLSMÒýÇ棿ÆäʵºÜ¼òµ¥£¬LSMÒýÇæÌìÉú¶ÔдÓѺã¬Ð´¶à¶ÁÉÙµÄϵͳµÚһѡÔñ¾ÍÊÇLSMÒýÇ棬ËùÒÔ´óÊý¾Ýʱ´úµÄ¸÷ÖÖÊý¾Ý´æ´¢ÏµÍ³¾ÍÊÇLSMÒýÇæµÄÌìÏ£¬HBase¡¢Kudu¡¢Druid¡¢TiKVÕâЩϵͳÎÞÒ»²»ÊÇÕâÑù¡£InfluxDB×÷Ϊһ¸öʱÐòÊý¾Ý¿â¸üÊÇд¶à¶ÁÉٵĵäÐÍ£¬ÎÞÂÛµ¹ÅÅË÷ÒýÒýÇ滹ÊÇʱÐòÊý¾Ý´¦ÀíÒýÇæÑ¡ÓÃLSMÒýÇæ¸üÊÇÎ޿ɺñ·Ç¡£
¼ÈÈ»ÊÇLSMÒýÇ棬¹¤×÷»úÖƱØÈ»ÊÇÕâÑùµÄ£ºÊ×ÏȽ«Êý¾Ý×·¼ÓдÈëWALÔÙдÈëCache¾Í¿ÉÒÔ·µ»Ø¸øÓû§Ð´Èë³É¹¦£¬WAL¿ÉÒÔ±£Ö¤¼´Ê¹·¢ÉúÒ쳣崻úÒ²¿ÉÒÔ»Ö¸´³öÀ´CacheÖжªÊ§µÄÊý¾Ý¡£Ò»µ©Âú×ãÌض¨Ìõ¼þϵͳ»á½«CacheÖеÄʱÐòÊý¾ÝÖ´ÐÐflush²Ù×÷ÂäÅÌÐγÉÎļþ¡£ÎļþÊýÁ¿³¬¹ýÒ»¶¨ãÐֵϵͳ»á½«ÕâЩÎļþºÏ²¢ÐγÉÒ»¸ö´óÎļþ¡£ÄǾßÌåµ½µ¹ÅÅË÷ÒýÒýÇæÕû¸öÁ÷³ÌÊÇʲôÑùµÄ£¬¼òµ¥À´¿´Ò»Ï£º
1.WAL×·¼ÓдÈ룺Inverted Index WAL¸ñʽºÜ¼òµ¥£¬ÓÉÒ»¸öÒ»¸öLogEntry¹¹³É£¬ÈçÏÂͼËùʾ£º
ÿ¸öLogEntryÓÉFlag¡¢Measurement¡¢Ò»ÏµÁÐKey\ValueÒÔ¼°Checksum×é³É¡£ÆäÖÐFlag±íʾ¸üÐÂÀàÐÍ£¬°üÀ¨Ð´È롢ɾ³ýµÈ£¬Measurement±íʾÊý¾Ý±í£¬Key\Value±íʾдÈëµÄTag SetÒÔ¼°Checksum£¬ÆäÖÐChecksumÓÃÓÚ¸ù¾ÝWAL»Ø·ÅÊý¾ÝʱÑéÖ¤LogEntryµÄÍêÕûÐÔ¡£×¢Ò⣬LogEntryÖв¢Ã»ÓÐʱÐòÊý¾ÝÁУ¬Ö»ÓÐά¶ÈÁУ¨Tag Set£©¡£
2. Inverted IndexÔÚÄÚ´æÖй¹½¨
£¨1£©Æ´SeriesKey£º ʱÐòÊý¾ÝдÈ뵽ϵͳ֮ºóÏȽ«measurementºÍËùÓеÄά¶Èֵƴ³ÉÒ»¸öseriesKey
£¨2£©È·ÈÏSeriesKeyÊÇ·ñÒѾ¹¹½¨¹ýË÷Òý£ºÔÚÎļþÖÐÈ·ÈϸÃseriesKeyÊÇ·ñÒѾ´æÔÚ£¬Èç¹ûÒѾ´æÔھͺöÂÔ£¬²»ÐèÒªÔÙ½«Æä¼ÓÈëµ½ÄÚ´æµ¹ÅÅË÷Òý¡£ÄÇÎÊÌâת»¯ÎªÈçºÎÔÚÎļþÖвéÕÒij¸öseriesKeyÊÇ·ñÒѾ´æÔÚ£¿Õâ¾ÍÊÇSeries BlockÖÐBloom FilterµÄºËÐÄ×÷Óã¬Ê×ÏÈʹÓÃBloom Filter½øÐÐÅжϣ¬Èç¹û²»´æÔÚ£¬¿Ï¶¨²»´æÔÚ¡£Èç¹û´æÔÚ£¬²»Ò»¶¨´æÔÚ£¬ÐèÒª½øÒ»²½Åжϡ£ÔÙ½øÒ»²½Ê¹ÓÃB+Ê÷ÒÔ¼°HashIndex½øÒ»²½²éÕÒÅжϡ£
£¨3£©Èç¹ûseriesKeyÔÚÎļþÖв»´æÔÚ£¬ÐèÒª½«ÆäдÈëÄÚ´æ¡£µ¹ÅÅË÷ÒýÄÚ´æ½á¹¹Ö÷Òª°üº¬Á½¸öMap£º< measurement, List< tagKey>> ºÍ < tagKey, < tagValue, List< SeriesKey >>>£¬Ç°Õß±íʾʱÐò±íÓë¶ÔӦά¶È¼¯ºÏµÄÓ³É䣬¼´Õâ¸ö±íÖÐÓжàÉÙά¶ÈÁС£ºóÕß±íʾÿ¸öά¶ÈÁж¼ÓÐÄÄЩ¿Éö¾ÙµÄÖµ£¬ÒÔ¼°ÕâЩֵ¶¼¶ÔÓ¦ÄÄЩSeriesKey¡£InfluxDBÖÐSeriesKey¾ÍÊÇÒ»°ÑÔ¿³×£¬Ö»ÓÐÄõ½Õâ°ÑÔ¿³×²ÅÄÜÕÒµ½Õâ¸öSeriesKey¶ÔÓ¦µÄÊý¾Ý¡£¶øµ¹ÅÅË÷Òý¾ÍÊǸù¾ÝһЩÏßË÷È¥ÕÒÕâ°ÑÔ¿³×¡£
3. Inverted Index Cache FlushÁ÷³Ì
£¨1£©´¥·¢Ê±»ú£ºµ±Inverted Index WALÈÕÖ¾µÄ´óС³¬¹ýãÐÖµ£¨Ä¬ÈÏ5M£©£¬¾Í»áÖ´ÐÐflush²Ù×÷½«»º´æÖеÄÁ½¸öMapд³ÉÎļþ
£¨2£©»ù±¾Á÷³Ì£º
»º´æMapÅÅÐò£º< measurement, List< tagKey >>ÒÔ¼°< tagKey, < tagValue, List< SeriesKey >>¶¼ÐèÒª¾¹ýÅÅÐò´¦Àí£¬ÅÅÐòµÄÒâÒåÔÚÓÚÓÐÐòÊý¾Ý¿ÉÒÔ½áºÏHash IndexʵÏÖ·¶Î§²éѯ£¬ÁíÍâSeries BlockÖÐB+Ê÷µÄ¹¹½¨Ò²ÐèÒªSeriesKeyÅÅÐò¡£
¹¹½¨²¢³Ö¾Ã»¯Series Block£ºÔÚÅÅÐòµÄ»ù´¡ÉÏÊ×Ïȳ־û¯< tagKey, tagValue, List< SeriesKey >>½á¹¹ÖÐËùÓеÄSeriesKey£¬Ò²¾ÍÊÇÏȹ¹½¨Series Block¡£ÒÀ´Î³Ö¾Ã»¯SeriesKeyµ½SeriesKeyChunk£¬µ±ChunkÂúÁËÖ®ºó£¬¸ù¾ÝChunkÖÐ×îСµÄSeriesKey¹¹½¨B+Ê÷ÖеÄIndex Entry½Úµã¡£µ±È»£¬Hash IndexÒÔ¼°Bloom FilterÊÇÐèҪʵʱ¹¹½¨µÄ¡£ÐèҪעÒâµÄÊÇ£¬Series BlockÔÚ¹¹½¨µÄͬʱÐèÒª¼Ç¼ÏÂSeriesKeyÓë¸ÃKeyÔÚÎļþÖÐÆ«ÒÆÁ¿µÄ¶ÔÓ¦¹Øϵ£¬¼´< SeriesKey, SeriesKeyOffset >£¬ÕâÒ»µãÖÁ¹ØÖØÒª¡£
ÄÚ´æÖн«SeriesKeyÓ³ÉäΪSeriesId£º½«< tagKey, < tagValue, List< SeriesKey >>½á¹¹ÖÐËùÓеÄSeriesKeyÓÉÉÏÒ»²½Öеõ½µÄ< SeriesKey, SeriesKeyOffset >ÖеÄSeriesKeyOffset´úÌæ¡£ÐγÉеĽṹ£º< tagKey, < tagValue, List< SeriesKeyOffset >>£¬¼´< tagKey, < tagValue, List< SeriesKeyId >>>£¬ÆäÖÐSeriesKeyId¾ÍÊÇSeriesKeyOffset¡£
¹¹½¨²¢³Ö¾Ã»¯Tag Block£ºÔÚнṹ< tagKey, < tagValue, List< SeriesKeyId >>>µÄ»ù´¡ÉÏÊ×Ïȳ־û¯tagValue£¬½«Í¬Ò»¸ötagKeyϵÄËùÓÐtagValue³Ö¾Ã»¯ÔÚÒ»Æð²¢Éú³É¶ÔÓ¦Hash IndexдÈëÎļþ£¬½Ó×ų־û¯ÏÂÒ»¸ötagKeyµÄËùÓÐtagValue¡£ËùÓÐtagValue¶¼³Ö¾Ã»°Íê³ÉÖ®ºóÔÙÒÀ´Î³Ö¾Ã»¯ËùÓеÄtagKey£¬ÐγÉTag Block¡£
¹¹½¨²¢³Ö¾Ã»¯Measurement Block£º×îºó³Ö¾Ã»¯measurementÐγÉMeasurement Block¡£
ʱÐòÊý¾ÝдÈëÁ÷³Ì
ʱÐòÊý¾ÝµÄά¶ÈÐÅÏ¢¾¹ýµ¹ÅÅË÷ÒýÒýÇæ¹¹½¨Íê³ÉÖ®ºó£¬½ÓמÍÐèÒª½«Êý¾ÝдÈëϵͳ¡£ºÍµ¹ÅÅË÷ÒýÒýÇæÒ»Ñù£¬Êý¾ÝдÈëÒýÇæÒ²ÊÇÒ»¸öLSMÒýÇ棬»ù±¾Á÷³ÌÒ²ÊÇÏÈдWAL£¬ÔÙдCache£¬×îºóÂú×ãÒ»¶¨ãÐÖµÌõ¼þÖ®ºó½«CacheÖеÄÊý¾Ýflushµ½Îļþ¡£
1. WAL×·¼ÓдÈ룺ʱ¼äÏßÊý¾ÝÊý¾Ý»á¾¹ýÁ½ÖØ´¦Àí£¬Ê×Ïȸñʽ»¯ÎªWriteWALEntry¶ÔÏ󣬸öÔÏó×Ö¶ÎÔªËØÈçÏÂͼËùʾ¡£È»ºó¾¹ýsnappyѹËõºóдÈëWAL²¢³Ö¾Ã»°µ½Îļþ¡£
2. ʱÐòÊý¾ÝдÈëÄÚ´æ½á¹¹
£¨1£©Ê±ÐòÊý¾Ýµã¸ñʽ»¯£º½«ËùÓÐʱ¼äÐòÁÐÊý¾Ýµã°´Ê±¼äÏß×éÖ¯ÐγÉÒ»¸öMap£º< SeriesKey+FieldKey, List< Value >>£¬¼´½«ÏàͬKey(SeriesKey+FieldKey)µÄʱÐòÊý¾Ý¼¯ÖзÅÔÚÒ»¸öListÖС£
£¨2£©Ê±ÐòÊý¾ÝµãдÈëCache£ºInfluxDBÖÐCacheÊÇÒ»¸öcrude hash ring£¬Õâ¸öringÓÉ256¸öpartition¹¹³É£¬Ã¿¸öpartition¸ºÔð´æ´¢Ò»²¿·ÖʱÐòÊý¾ÝKey¶ÔÓ¦µÄÖµ¡£¾ÍÏ൱ÓÚÊý¾ÝдÈëCacheµÄʱºòÓÖ¸ù¾ÝKey HashÁËÒ»´Î£¬¸ù¾ÝHash½á¹ûÓ³Éäµ½²»Í¬µÄpartition¡£ÎªÊ²Ã´ÒªÕâô´¦Àí£¿¸öÈËÈÏΪÓеãÏñJavaÖÐConcurrentHashMapµÄ˼·£¬½«Ò»¸ö´óHashMapÇзֳɶà¸öСHashMap£¬Ã¿¸öHashMapÄÚ²¿ÔÚдµÄʱºòÐèÒª¼ÓËø¡£ÕâÑù´¦Àí¿ÉÒÔ¼õСËøÁ£¶È£¬Ìá¸ßдÐÔÄÜ¡£
3. Data Cache FlushÁ÷³Ì(²Î¿¼engine.compactCache)
£¨1£©´¥·¢Ê±»ú£ºCacheÖ´ÐÐflush²Ù×÷ÓÐÁ½¸ö»ù±¾´¥·¢Ìõ¼þ£¬ÆäÒ»Êǵ±cache´óС³¬¹ýÒ»¶¨ãÐÖµ£¬¿ÉÒÔͨ¹ý²ÎÊý¡¯cache-snapshot-memory-size¡¯ÅäÖã¬Ä¬ÈÏÊÇ25M´óС£»Æä¶þÊdz¬¹ýÒ»¶¨Ê±¼äãÐֵûÓÐʱÐòÊý¾ÝдÈëWALÒ²»á´¥·¢flush£¬Ä¬ÈÏʱ¼äãÐֵΪ10·ÖÖÓ£¬¿ÉÒÔͨ¹ý²ÎÊý¡¯cache-snapshot-write-cold-duration¡¯ÅäÖá£
£¨2£©»ù±¾Á÷³Ì£ºÔÚÁ˽âÁËTSMÎļþµÄ»ù±¾½á¹¹Ö®ºó£¬ÎÒÃÇÔÙ¼òµ¥¿´¿´Ê±ÐòÊý¾ÝÊÇÈçºÎ´ÓÄÚ´æÖеÄMap³Ö¾Ã»¯³ÉTSMÎļþµÄ£¬Õû¸ö¹ý³Ì¿ÉÒÔ±íÊöΪ£º
ÄÚ´æÖй¹½¨Series Data Block£ºË³Ðò±éÀúÄÚ´æMapÖеÄʱÐòÊý¾Ý£¬·Ö±ð¶ÔʱÐòÊý¾ÝµÄʱ¼äÁкÍÊýÖµÁнøÐÐÏàÓ¦µÄ±àÂ룬°´ÕÕSeries Data BlockµÄ¸ñʽ½øÐÐ×éÖ¯£¬µ±Block´óС³¬¹ýÒ»¶¨ãÐÖµ¾Í¹¹½¨³É¹¦¡£²¢¼Ç¼Õâ¸öBlockÄÚʱ¼äÁеÄ×îСʱ¼äMinTimeÒÔ¼°×î´óʱ¼äMaxTime¡£
½«¹¹½¨ºÃµÄSeries Data BlockдÈëÎļþ£ºÊ¹ÓÃÊä³öÁ÷½«ÄÚ´æÖÐÊý¾ÝÊä³öµ½Îļþ£¬²¢·µ»Ø¸ÃBlockÔÚÎļþÖеÄÆ«ÒÆÁ¿OffsetÒÔ¼°×Ü´óСSize¡£
¹¹½¨Îļþ¼¶±ðB+Ë÷Òý£ºÔÚÄÚ´æÖÐΪ¸ÃSeries Data Block¹¹½¨Ò»¸öË÷Òý½ÚµãIndex Entry£¬Ê¹ÓÃÊý¾ÝBlockÔÚÎļþÖеÄÆ«ÒÆÁ¿Offset¡¢×Ü´óСSizeÒÔ¼°MinTime¡¢MaxTime¹¹½¨Ò»¸öIndex Entry¶ÔÏó£¬Ð´Èëµ½ÄÚ´æSeries Index Block¶ÔÏó¡£
ÕâÑù£¬Ã¿¹¹½¨Ò»¸öSeries Data Block²¢Ð´ÈëÎļþÖ®ºó¶¼»áÔÚÄÚ´æÖÐ˳Ðò¹¹½¨Ò»¸öIndex Entry£¬Ð´ÈëÄÚ´æSeries Index Block¶ÔÏó¡£Ò»µ©Ò»¸öKey¶ÔÓ¦µÄËùÓÐʱÐòÊý¾Ý¶¼³Ö¾Ã»¯Íê³É£¬Ò»¸öSeries Index Block¾Í¹¹½¨Íê³É£¬¹¹½¨Íê³ÉÖ®ºóÌî³äIndex Block MetaÐÅÏ¢¡£½Ó×Åн¨Ò»¸öеÄSeries Index Block¿ªÊ¼¹¹½¨ÏÂÒ»¸öKey¶ÔÓ¦µÄÊý¾ÝË÷ÒýÐÅÏ¢¡£
InfluxDBÊý¾Ýɾ³ý²Ù×÷£¨DropMeasurement£¬DropTagKey£©
Ò»°ãLSMÒýÇæ´¦Àíɾ³ýͨ³£¶¼²ÉÓÃTag±ê¼ÇµÄ·½Ê½£¬¼´É¾³ý²Ù×÷ºÍдÈë²Ù×÷Á÷³Ì»ù±¾Ò»Ö£¬Ö»ÊÇÊý¾ÝÉÏ»á¶àÒ»¸öTag±ê¼Ç ¨C deleted£¬±íʾ¸ÃÖµÒѾ±»deleted¡£ÕâÖÖ´¦Àí·½°¸¿ÉÒÔ×îС»¯É¾³ý´ú¼Û£¬µ«ÍòÎïÓеñØÓÐʧ£¬¼õСÁËдÈë´ú¼Û±ØÈ»»áÔö¼Ó¶ÁÈ¡´ú¼Û£¬Tag±êÇ©·½°¸ÔÚ¶ÁÈ¡µÄʱºòÐèÒª¶Ô±ê¼ÇÓÐdeletedµÄÊýÖµ½øÐÐÌØÊâ´¦Àí£¬Õâ¸ö´ú¼Û»¹ÊǺܴóµÄ¡£HBaseÖÐɾ³ý²Ù×÷¾ÍÊDzÉÓÃTag±ê¼Ç·½°¸¡£
InfluxDB±È½ÏÆæÝ⣬¶ÔÓÚɾ³ý²Ù×÷´¦ÀíµÄ±È½ÏÒìÀ࣬ͨ³£InfluxDB²»»áɾ³ýÒ»Ìõ¼Ç¼£¬¶øÊÇ»áɾ³ýij¶Îʱ¼äÄÚ»òÕßij¸öά¶ÈϵÄËùÓмǼ£¬ÉõÖÁÒ»ÕűíµÄËùÓмǼ£¬ÕâºÍͨ³£µÄÊý¾Ý¿âÓÐËù²»Í¬¡£±ÈÈ磺
DROP SERIES FROM
h2o_feet WHERE location = ¡®santa_monica'
DELETE FROM "cpu" DELETE FROM "cpu"
WHERE time < '2000-01-01T00:00:00Z' DELETE
WHERE time < '2000-01-01T00:00:00Z' |
ÉÏÎÄÎÒÃÇÖªµÀInfluxDBÖÐÒ»¸öshardÓÐÁ½¸öLSMÒýÇ棬һ¸öÊǵ¹ÅÅË÷ÒýÒýÇ棨´æ´¢Î¬¶ÈÁе½SeriesKeyµÄÓ³Éä¹Øϵ£¬·½±ã¶àά²éÕÒ£©£¬Ò»¸öÊÇTSM Engine£¬ÓÃÀ´´æ´¢Êµ¼ÊµÄʱÐòÊý¾Ý¡£Èç¹ûÊÇɾ³ýÒ»Ìõ¼Ç¼£¬Í¨³£Ö»ÐèÒªTSM EngineÖ´ÐÐɾ³ý¾Í¿ÉÒÔ£¬µ¹ÅÅË÷ÒýÒýÇæÊDz»ÐèÒªÖ´ÐÐɾ³ýµÄ¡£¶øÈç¹ûÊÇDrop MeasurementÕâÑùµÄ²Ù×÷£¬ÄÇôÁ½¸öLSMÒýÇ涼ÐèÒªÖ´ÐÐÏàÓ¦µÄɾ³ý¡£ÎÊÌâÊÇ£¬ÕâÁ½¸öÒýÇæµÄɾ³ý²ßÂÔÍêÈ«²»Í¬£¬TSM Engine²ÉÓÃÁËÒ»ÖÖͬ²½É¾³ý²ßÂÔ£¬Inverted Index Engine²ÉÓÃÁ˱ê¼Çɾ³ý²ßÂÔ¡£ÈçÏÂͼËùʾ£º
1. TSM Engineͬ²½É¾³ý²ßÂÔ£¬Õû¸öɾ³ýÁ÷³Ì¿ÉÒÔ·ÖΪÈçÏÂËIJ½£º
£¨1£©É¾³ýËùÓÐTSM FileÖÐÂú×ãÌõ¼þµÄseries£¬ÏµÍ³»á±éÀúµ±Ç°shardÖÐËùÓÐTSM File£¬¼ì²é¸ÃFileÖÐÊÇ·ñ´æÔÚÂú×ãɾ³ýÌõ¼þµÄFile£¬Èç¹ûÓлáÖ´ÐÐÈçÏÂÁ½¸ö²Ù×÷£º
TSM File IndexÏà¹Ø´¦Àí£ºÔÚÄÚ´æÖÐɾ³ýÂú×ãÌõ¼þµÄIndex Entry£¬Í¨³£É¾³ý»á´øÓÐTime RangeÒÔ¼°Key Range£¬¶øÇÒTSM File Index»áÔÚÒýÇæÆô¶¯Ö®ºó¼ÓÔص½ÄÚ´æ¡£Òò´Ëɾ³ý²Ù×÷»á½«Âú×ãÌõ¼þµÄIndex Entry´ÓÄÚ´æÖÐɾ³ý¡£
Éú³ÉtombstonerÎļþ£ºtombstonerÎļþ»á¼Ç¼µ±Ç°TSM FileÖÐËùÓб»É¾³ýµÄʱÐòÊý¾Ý£¬Ê±ÐòÊý¾ÝÓÃ[key, min, max]Èý¸ö×ֶαíʾ£¬ÆäÖÐkey¼´SeriesKey+FieldKey£¬£Ûmin, max£Ý±íʾҪɾ³ýµÄʱ¼ä¶Î¡£ÈçÏÂͼËùʾ£º
£¨2£©É¾³ýCacheÖÐÂú×ãÌõ¼þµÄseries
£¨3£©ÔÚWALÖÐÉú³ÉÒ»Ìõɾ³ýseriesµÄ¼Ç¼²¢³Ö¾Ã»¯µ½Ó²ÅÌ
2. Inverted Index Engine ±ê¼ÇTagɾ³ý²ßÂÔ£¬±ê¼ÇTagɾ³ý·Ç³£¼òµ¥£¬ºÍÒ»´ÎдÈëÁ÷³Ì»ù±¾Ïàͬ£º
£¨1£©ÔÚWALÖÐÉú³ÉÒ»ÌõflagΪdeletedµÄLogEntry²¢³Ö¾Ã»¯µ½Ó²ÅÌ
£¨2£©½«ÒªÉ¾³ýµÄά¶ÈÐÅϢдÈëCache£¬ÐèÒª±ê¼Çdeleted£¨ÉèÖÃtype=deleted£©
£¨3£©µ±WAL´óС³¬¹ýãÐÖµÖ®ºó±ê¼ÇΪdeletedµÄά¶ÈÐÅÏ¢»áËæCache Flushµ½µ¹ÅÅË÷ÒýÎļþ
£¨4£©ºÍHBaseÒ»Ñù£¬Inverted Index EngineÖÐË÷ÒýÐÅÏ¢ÕæÕý±»É¾³ý·¢ÉúÔÚcompact½×¶Î
×ܽá
InfluxDBÒòΪÆäÌØÓеÄË«LSMÒýÇæ¶øÏÔµÃÄÚ²¿½á¹¹¸ü¼Ó¸´ÔÓ£¬Ð´ÈëÁ÷³ÌÏà±ÈÆäËûÊý¾Ý¿âÀ´Ëµ¸ü¼Ó·±Ëö¡£µ«Ö»ÒªÀí½âÁËËüµÄÊý¾ÝÎļþÄÚ²¿×éÖ¯¸ñʽÒÔ¼°µ¹ÅÅË÷ÒýÎļþÄÚ²¿×éÖ¯¸ñʽ£¬ÏàÐŶÔÓÚÕûÌåµÄ°ÑÎÕÒ²²¢²»ÊǺÜÄÑ¡£ÕâƪÎÄÕ½«Ö®Ç°½²¹ýµÄÏà¹Ø֪ʶµãͨ¹ýдÈëÁ÷³ÌϵͳµØ´®ÁªÁËÆðÀ´£¬Ï£Íû¿´¹ÙÄܹ»½è´ËÉîÈëÀí½âInfluxDBµÄ¹¤×÷ÔÀí¡£
|