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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʱÐòÊý¾Ý¿â Apache-IoTDB Ô´Âë½âÎöÖ®ÎļþË÷Òý¿é£¨Î壩
 
 
  1958  次浏览      27
2021-3-30 
 
±à¼­ÍƼö:
±¾½ÚÖ÷Òª½éÉÜTsFileË÷Òý¿éµÄ×é³É¡¢Ë÷Òý¿éµÄ²éѯ¹ý³Ì¡¢Ë÷Òý¿éĿǰÔÚ×öµÄ¸Ä½øÏî¡£
±¾ÎÄÀ´×Ô¿ªÔ´²©¿Í £¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ÉÏÒ»ÕÂÁĵ½ TsFile µÄÎļþ×é³É£¬ÒÔ¼°Êý¾Ý¿éµÄÏêϸ½éÉÜ¡£ÏêÇéÇë¼û£º

ʱÐòÊý¾Ý¿â Apache-IoTDB Ô´Âë½âÎöÖ®ÎļþÊý¾Ý¿é£¨ËÄ£©

Ë÷Òý¿é

Ë÷Òý¿éÓÉÁ½´ó²¿·Ö×é³É£¬ÆäдÈëµÄ·½Ê½ÊÇ´Ó×óµ½ÓÒдÈ룬Ҳ¾ÍÊÇ´ÓÎļþÍ·ÏòÎļþβдÈë¡£µ«¶Á³öµÄ·½Ê½ÊÇÏȶÁ³öTsFileMetaData ÔÙ¶Á³ö TsDeviceMetaDataList ÖеľßÌåÒ»²¿·Ö¡£ÎÒÃǰ´ÕÕ¶ÁÈ¡Êý¾ÝµÄ˳Ðò½éÉÜ£º

TsFileMetaData

TsFileMetaDataÊôÓÚÎļþµÄ 1 ¼¶Ë÷Òý£¬ÓÃÀ´Ë÷Òý Device ÊÇ·ñ´æÔÚ¡¢ÔÚÄÄÀïµÈÐÅÏ¢£¬ÆäÖÐÖ÷Òª±£´æÁË£º

DeviceMetaDataIndexMap£ºMap½á¹¹£¬Key ÊÇÉ豸Ãû£¬Value ÊÇ TsDeviceMetaDataIndex £¬±£´æÁ˰üº¬ÄÄЩ Device£¨Âß¼­¸ÅÄîÉϵÄÒ»¸ö¼¯ºÏÒ»¶Îʱ¼äÄÚµÄÊý¾Ý£¬ÀýÈçǰ¼¸ÕÂÎÒÃǽ²µ½µÄ£ºÕÅÈý¡¢ÀîËÄ¡¢ÍõÎ壩ÒÔ¼°ËûÃǵĿªÊ¼Ê±¼ä¼°½áÊøÊ±¼ä¡¢ÔÚ×ó²à TsDeviceMetaDataList Îļþ¿éÖÐµÄÆ«ÒÆÁ¿µÈ¡£

MeasurementSchemaMap£ºMap½á¹¹£¬Key ÊDzâµãµÄÒ»¸öȫ·¾¶£¬Value ÊÇ measurementSchema £¬±£´æÁ˰üº¬µÄ²âµãÊý¾Ý(Âß¼­¸ÅÄîÉϵÄijһÀàÊý¾ÝµÄ¼¯ºÏ,ÈçÌåÎÂÊý¾Ý)µÄÔ­ÐÅÏ¢£¬È磺ѹËõ·½Ê½£¬Êý¾ÝÀàÐÍ£¬±àÂ뷽ʽµÈ¡£

×îºóÊÇÒ»¸ö²¼Â¡¹ýÂËÆ÷£¬¿ìËÙ¼ì²âijһ¸ö ʱ¼äÐòÁÐ ÊDz»ÊÇ´æÔÚÓÚÎļþÄÚ(ÕâÀïµÈÁĵ½ server Ä£¿éдÎļþµÄ²ßÂÔʱºòÔÙÁÄ)¡£ÎÒÃÇÖªµÀÕâ¸ö¹ýÂËÆ÷µÄÌØµã¾ÍÊÇ£ºÃ»ÓеÄÒ»¶¨Ã»ÓУ¬µ«ÓеIJ»Ò»¶¨ÓС£ÎªÁ˱£Ö¤×¼È·ÐԺ͹ýÂËÆ÷ÐòÁл¯ºóµÄ´óС¾ùºâ£¬ÕâÀïÌṩÁËÒ»¸ö 1% - 10% ´íÎóÂʵĿÉÅäÖ㬵±Îª 1% ´íÎóÂÊʱ£¬±£´æ 1 Íò¸ö²âµãÐÅÏ¢£¬´ó¸ÅÊÇ 11.7 K¡£

ÎÒÃÇÔÙ»ØÏë SQL £ºSELECT ÌåΠFROM ÍõÎå WHERE time = 1 ¡£¶ÁÎļþµÄ¹ý³Ì¾ÍÓ¦¸ÃÊÇ£º

ÏÈÓò¼Â¡¹ýÂËÆ÷ÅжÏÎļþÄÚÊÇ·ñÓÐÍõÎåµÄÌåÎÂÁУ¬Èç¹ûûÓУ¬²éÕÒÏÂÒ»¸öÎļþ¡£

´Ó DeviceMetaDataIndexMap ÖÐÕÒµ½ÍõÎåµÄ TsDeviceMetaDataIndex £¬´Ó¶øµÃµ½ÁËÍõÎåµÄ TsDeviceMetadata µÄ offset£¬½ÓÏÂÀ´¾ÍѰµÀÖÁÕâ¸ö offset °ÑÍõÎåµÄ TsDeviceMetadata ¶Á³öÀ´¡£

MeasurementSchemaMap ²»ÓùØ×¢£¬Ö÷ÒªÊǸø Spark ʹÓõģ¬ChunkHeader ÖÐÒ²±£´æÁËÕâЩÐÅÏ¢¡£

TsDeviceMetaDataList

TsDeviceMetaDataList ÊôÓÚÎļþµÄ 2 ¼¶Ë÷Òý£¬ÓÃÀ´Ë÷Òý¾ßÌåµÄ²âµãÊý¾ÝÊDz»ÊÇ´æÔÚ¡¢ÔÚÄÄÀïµÈÐÅÏ¢¡£ÆäÖÐÖ÷Òª±£´æÁË£º

ChunkGroupMetaData£ºChunkGroup µÄË÷ÒýÐÅÏ¢£¬Ö÷Òª°üº¬ÁËÿ¸ö ChunkGroup Êý¾Ý¿éµÄÆðֹλÖÃÒÔ¼°°üº¬µÄËùÓеIJâµãÔªÐÅÏ¢£¨ChunkMetaData£©¡£

ChunkMetaData £ºChunk µÄË÷ÒýÐÅÏ¢£¬Ö÷Òª°üº¬ÁËÿ¸öÉ豸µÄ²âµãÔÚÎļþÖÐµÄÆðֹλÖᢿªÊ¼½áÊøÊ±¼ä¡¢Êý¾ÝÀàÐͺÍÔ¤¾ÛºÏÐÅÏ¢¡£

ÉÏÃæµÄÀý×ÓÖУ¬´Ó TsFileMetadata ÒѾ­Äõ½ÁËÍõÎåµÄ TsDeviceMetadataIndex£¬ÕâÀï¾Í¿ÉÒÔÖ±½Ó¶Á³öÍõÎåµÄ TsDeviceMetadata£¬²¢ÇÒ±éÀúÀï±ßµÄ ChunkGroupMetadata ÖÐµÄ ChunkMetadata£¬ÕÒµ½ÌåζÔÓ¦µÄËùÓÐµÄ ChunkMetadata¡£Í¨¹ýÔ¤¾ÛºÏÐÅÏ¢¶Ôʱ¼ä¹ýÂË£¬ÅжÏÄÜ·ñʹÓõ±Ç°µÄ Chunk »òÕßÄÜ·ñÖ±½ÓʹÓÃÔ¤¾ÛºÏÐÅÏ¢Ö±½Ó·µ»ØÊý¾Ý(µÈ½éÉܵ½ server µÄ²éѯÒýÇæÊ±ºòϸÁÄ)¡£

Èç¹û²»ÄÜÖ±½Ó·µ»Ø£¬ÒòΪ ChunkMetaData °üº¬ÁËÕâ¸ö Chunk ¶ÔÓ¦µÄÎļþµÄÆ«ÒÆÁ¿£¬Ö»ÐèҪʹÓà seek(offSet) ¾Í»áÌø×ªµ½Êý¾Ý¿é£¬Ê¹ÓÃÉÏÒ»Õ½éÉܵĶÁÈ¡·½·¨½øÐбéÀú¾ÍÍê³ÉÁËÕû¸ö¶ÁÈ¡¡£

Ô¤¾ÛºÏÐÅÏ¢£¨Statistics£©

ÎÄÖжà´ÎÌáµ½ÁËÔ¤¾ÛºÏÔÚÕâÀïÏêϸ½éÉÜÒ»ÏÂËüµÄÊý¾Ý½á¹¹¡£

// ËùÊôÎļþ¿éµÄ¿ªÊ¼Ê±¼ä
private long startTime;
// ËùÊôÎļþ¿éµÄ½áÊøÊ±¼ä
private long endTime;
// ËùÊôÎļþ¿éµÄÊý¾ÝÀàÐÍ
private TSDataType tsDataType;
// ËùÊôÎļþ¿éµÄ×îСֵ
private int minValue;
// ËùÊôÎļþ¿éµÄ×î´óÖµ
private int maxValue;
// ËùÊôÎļþ¿éµÄµÚÒ»¸öÖµ
private int firstValue;
// ËùÊôÎļþ¿éµÄ×îºóÒ»¸öÖµ
private int lastValue;
// ËùÊôÎļþ¿éµÄËùÓÐÖµµÄºÍ
private double sumValue;

Õâ¸ö½á¹¹Ö÷Òª±£´æÔÚ ChunkMetaData ºÍ PageHeader ÖУ¬ÕâÑù×öµÄºÃ´¦¾ÍÊÇ£¬Äã²»±Ø´ÓÓ²ÅÌÖжÁÈ¡¾ßÌåµÄPage »òÕß Chunk µÄÎļþÄÚÈݾͿÉÒÔ»ñµÃ×îÖյĽá¹û£¬ÀýÈ磺SELECT SUM(ÌåÎÂ) FROM ÍõÎå £¬µ±¶¨Î»µ½ ChunkMetaData ʱ£¬ÅжÏÄÜ·ñÖ±½ÓʹÓÃÕâ¸ö Statistics ÐÅÏ¢£¨¾ßÌåÔõôÅжϣ¬Ö®ºó»áÔÚ½éÉÜ server ʱ¾ßÌå½éÉÜ£©£¬Èç¹ûÄÜʹÓã¬ÄÇôֱ½Ó·µ»Ø sumValue¡£ÕâÑù·µ»ØµÄËÙ¶È£¬ÎÞÂÛ´æÁ˶àÉÙÊý¾Ý£¬ËüµÄ¾ÛºÏ½á¹ûÏìӦʱ¼ä¼òÖ±¾ÍÊÇ 1 ºÁÃëÒÔÄÚ¡£

ÑùÀýÊý¾Ý

ÎÒÃǼÌÐøÊ¹ÓÃÉÏÒ»ÕÂÁĵ½µÄʾÀýÊý¾ÝÀ´Õ¹Ê¾¡£

ʱ¼ä´Á ÈËÃû ÌåΠÐÄÂÊ
1580950800 ÍõÎå 36.7 100
1580950911 ÍõÎå 36.6 90

ÍêÕûµÄÎļþÐÅÏ¢ÈçÏ£º

POSITION| CONTENT
-------- -------
0| [magic head] TsFile
6| [version number] 000002
// Êý¾Ý¿é¿ªÊ¼
||||||||||||||||||||| [Chunk Group] of wangwu begins at pos 12, ends at pos 253, version:0, num of Chunks:2
12| [Chunk] of xinlv, numOfPoints:1, time range: [1580950800,1580950800], tsDataType:INT32,
[minValue:100,maxValue:100, firstValue:100, lastValue:100, sumValue:100.0]
| [marker] 1
| [ChunkHeader]
| 1 pages
121| [Chunk] of tiwen, numOfPoints: 1, time range: [1580950800,1580950800], tsDataType: FLOAT,
[minValue:36.7,maxValue:36.7, firstValue:36.7, lastValue:36.7, sumValue: 36.70000076293945]
| [marker] 1
| [ChunkHeader]
| 1 pages
230| [Chunk Group Footer]
| [marker] 0
| [deviceID] wangwu
| [dataSize] 218
| [num of chunks] 2
||||||||||||||||||||| [Chunk Group] of wangwu ends
// Ë÷Òý¿é¿ªÊ¼
253| [marker] 2
254| [TsDeviceMetadata] of wangwu, startTime:1580950800, endTime:1580950800
| [startTime] 1580950800
| [endTime] 1580950800
| [ChunkGroupMetaData] of wangwu, startOffset12, endOffset253, version:0, numberOfChunks:2
| [ChunkMetaData] of xinlv, startTime:1580950800, endTime:1580950800, offsetOfChunkHeader:12, dataType:INT32, statistics:[minValue:100, maxValue:100,firstValue:100, lastValue:100,sumValue:100.0]
| [ChunkMetaData] of tiwen, startTime:1580950800, endTime:1580950800, offsetOfChunkHeader: 121, dataType:FLOAT, statistics:[minValue: 36.7, maxValue: 36.7, firstValue:36.7, lastValue:36.7, sumValue: 36.70000076293945]
446| [TsFileMetaData]
| [num of devices] 1
| [TsDeviceMetadataIndex] of wangwu, startTime: 1580950800, endTime: 1580950800, offSet:254, len:192
| [num of measurements] 2
| 2 key& measurementSchema
| [createBy isNotNull] false
| [totalChunkNum] 2
| [invalidChunkNum] 0
//²¼Â¡¹ýÂËÆ÷
| [bloom filter bit vector byte array length] 30
| [bloom filter bit vector byte array]
| [bloom filter number of bits] 256
| [bloom filter number of hash functions] 5
599| [TsFileMetaDataSize] 153
603| [magic tail] TsFile
609| END of TsFile

 

µ±Ö´ÐУº SELECT ÌåΠFROM ÍõÎå ʱ£º

´Ó 599 ¿ªÊ¼¶Á£¬1 ¼¶Ë÷Òý³¤¶ÈΪ 153.

599 - 153 = 446 ¾ÍÊÇ 1 ¼¶Ë÷Òý¶Á¿ªÊ¼Î»Ö㬲¢¶Á³ö TsDeviceMetadataIndex of ÍõÎ壬ÆäÖмǼÁË£¬ÍõÎåÉ豸µÄ 2 ¼¶Ë÷ÒýµÄ offset Ϊ 254.

Ìøµ½ 254 ¿ªÊ¼¶Á 2 ¼¶Ë÷Òý£¬ÕÒµ½ ChunkMetaData of ÌåΣ¬ ÆäÖмǼÁËÌåÎÂÊý¾ÝµÄ Chunk µÄoffset Ϊ 121

Ìøµ½ 121 £¬ÕâÀï½øÈëÁËÊý¾Ý¿é£¬´Ó 121 ¶ÁÈ¡µ½ 230 £¬¶Á³öµÄÊý¾Ý¾ÍÈ«²¿ÊÇÌåÎÂÊý¾Ý¡£

¸Ä½øÏî

1. Ö»¶ÁͶӰÁÐ

Ç°ÃæµÚ 3 ²½ÖУ¬¶ÁÈ¡ 2 ¼¶Ë÷Òýʱºò£¬»á½«Õâ¸öÉ豸ϵÄËùÓвâµãÊý¾ÝÈ«²¿¶Á³öÀ´£¬ÕâÒÀÈ»²»Ì«·ûºÏÖ»¶ÁͶӰÁеÄÉè¼Æ£¬ËùÒÔÔÚÐ嵀 TsFile ÖУ¬ÐÞ¸ÄÁË 1¼¶Ë÷ÒýºÍ 2 ¼¶Ë÷ÒýµÄ²¿·Ö½á¹¹£¬Ê¹µÃ¶Á³öµÄÊý¾Ý¸üÉÙ£¬¸ü¸ßЧ¡£ÓÐÐËȤµÄͬѧ¿ÉÒÔ¹Ø×¢ PR£º Refactor TsFile #736

2. Îļþ¼¶ Statistics

ÔÚÎïÁªÍø³¡¾°Öо­³£»áÉæ¼°µ½²éѯij¸öÉ豸µÄ×îºó״̬£¬±ÈÈ磺³µÁªÍøÖУ¬²éѯ³µÁ¾µÄÄ©´ÎλÖÃ( SELECT LAST(lat,lon) FROM VechicleID )£¬»òÕßµ±Ç°µÄµã»ð¡¢Ï¨»ð״̬µÈ SELECT LAST(accStatus) FROM VechicleID ¡£

»òÕßµ±Ä³Ð©·ÖÒ³²éѯµÈÇé¿öʱºò£¬¾­³£»áʹÓõ½ COUNT(*) µÈ²Ù×÷£¬ÕâЩ¶¼·Ç³£·ûºÏ Statistics ½á¹¹£¬ÕâЩ³¡¾°Éæ¼°µ½µÄË÷ÒýÉè¼ÆÒ²¶¼»áÌåÏÖµ½Ð嵀 TsFile Ë÷Òý¸Ä¶¯ÖС£

µ½´ËÒѾ­½éÉÜÍêÁËÎļþµÄÕûÌå½á¹¹£¬Á˽âÁË´óÌåµÄдÈëºÍ¶ÁÈ¡¹ý³Ì£¬µ«ÊÇ TsFile µÄ API ÊÇÈçºÎÉè¼ÆµÄ£¬ÔõÑùÔÚ´úÂëÀï×öÒ»Ð©ÌØÊâµÄ¹¦¿Î£¬À´Èƹý Java ×°Ïä¡¢GC µÈÎÊÌâÄØ£¿»¶Ó­³ÖÐø¹Ø×¢¡£¡£¡£¡£

 

 

   
1958 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚ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ÔÆÆ½Ì¨-Ö÷Á÷Êý¾Ý¿â¼°´æ´¢¼¼Êõ