±à¼ÍƼö: |
±¾½ÚÖ÷Òª½éÉÜ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 µÈÎÊÌâÄØ£¿»¶Ó³ÖÐø¹Ø×¢¡£¡£¡£¡£
|