tsdb.h 9.4 KB
Newer Older
H
more  
hzcheng 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
H
hzcheng 已提交
15
#ifndef _TD_TSDB_H_
H
Hongze Cheng 已提交
16 17 18 19 20 21
#define _TD_TSDB_H_

#include <pthread.h>
#include <stdbool.h>
#include <stdint.h>

H
hjxilinx 已提交
22
#include "dataformat.h"
H
hzcheng 已提交
23
#include "name.h"
H
hzcheng 已提交
24
#include "taosdef.h"
H
hzcheng 已提交
25
#include "taosmsg.h"
H
hjxilinx 已提交
26
#include "tarray.h"
H
Hongze Cheng 已提交
27

H
more  
hzcheng 已提交
28 29 30 31
#ifdef __cplusplus
extern "C" {
#endif

H
Hongze Cheng 已提交
32 33 34
#define TSDB_VERSION_MAJOR 1
#define TSDB_VERSION_MINOR 0

H
hzcheng 已提交
35 36
#define TSDB_INVALID_SUPER_TABLE_ID -1

H
hzcheng 已提交
37 38 39 40 41 42 43 44 45
// --------- TSDB APPLICATION HANDLE DEFINITION
typedef struct {
  // WAL handle
  void *appH;
  int (*walCallBack)(void *);
  int (*eventCallBack)(void *);
  int (*cqueryCallBack)(void *);
} STsdbAppH;

H
hzcheng 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
// --------- TSDB REPOSITORY CONFIGURATION DEFINITION
typedef struct {
  int8_t  precision;
  int32_t tsdbId;
  int32_t maxTables;            // maximum number of tables this repository can have
  int32_t daysPerFile;          // day per file sharding policy
  int32_t minRowsPerFileBlock;  // minimum rows per file block
  int32_t maxRowsPerFileBlock;  // maximum rows per file block
  int32_t keep;                 // day of data to keep
  int64_t maxCacheSize;         // maximum cache size this TSDB can use
} STsdbCfg;

void      tsdbSetDefaultCfg(STsdbCfg *pCfg);
STsdbCfg *tsdbCreateDefaultCfg();
void      tsdbFreeCfg(STsdbCfg *pCfg);

// --------- TSDB REPOSITORY DEFINITION
H
hzcheng 已提交
63
typedef void tsdb_repo_t;  // use void to hide implementation details from outside
H
hzcheng 已提交
64

H
hzcheng 已提交
65 66 67 68 69
int          tsdbCreateRepo(char *rootDir, STsdbCfg *pCfg, void *limiter);
int32_t      tsdbDropRepo(tsdb_repo_t *repo);
tsdb_repo_t *tsdbOpenRepo(char *tsdbDir, STsdbAppH *pAppH);
int32_t      tsdbCloseRepo(tsdb_repo_t *repo);
int32_t      tsdbConfigRepo(tsdb_repo_t *repo, STsdbCfg *pCfg);
H
hzcheng 已提交
70 71

// --------- TSDB TABLE DEFINITION
H
more  
hzcheng 已提交
72
typedef struct {
H
more  
hzcheng 已提交
73 74
  int64_t uid;  // the unique table ID
  int32_t tid;  // the table ID in the repository.
H
more  
hzcheng 已提交
75 76
} STableId;

H
hzcheng 已提交
77 78
// --------- TSDB TABLE configuration
typedef struct {
S
slguan 已提交
79
  ETableType      type;
H
hzcheng 已提交
80
  char *          name;
H
hzcheng 已提交
81
  STableId        tableId;
H
hzcheng 已提交
82
  int32_t         sversion;
H
hzcheng 已提交
83
  char *          sname; // super table name
H
hzcheng 已提交
84 85 86 87 88 89
  int64_t         superUid;
  STSchema *      schema;
  STSchema *      tagSchema;
  SDataRow        tagValues;
} STableCfg;

S
slguan 已提交
90
int  tsdbInitTableCfg(STableCfg *config, ETableType type, int64_t uid, int32_t tid);
H
hzcheng 已提交
91 92 93 94
int  tsdbTableSetSuperUid(STableCfg *config, int64_t uid);
int  tsdbTableSetSchema(STableCfg *config, STSchema *pSchema, bool dup);
int  tsdbTableSetTagSchema(STableCfg *config, STSchema *pSchema, bool dup);
int  tsdbTableSetTagValue(STableCfg *config, SDataRow row, bool dup);
H
hzcheng 已提交
95 96
int  tsdbTableSetName(STableCfg *config, char *name, bool dup);
int  tsdbTableSetSName(STableCfg *config, char *sname, bool dup);
H
hzcheng 已提交
97 98
void tsdbClearTableCfg(STableCfg *config);

99 100
int32_t tsdbGetTableTagVal(tsdb_repo_t *repo, STableId id, int32_t col, int16_t* type, int16_t* bytes, char** val);

H
hzcheng 已提交
101 102 103 104
int tsdbCreateTable(tsdb_repo_t *repo, STableCfg *pCfg);
int tsdbDropTable(tsdb_repo_t *pRepo, STableId tableId);
int tsdbAlterTable(tsdb_repo_t *repo, STableCfg *pCfg);

H
Hongze Cheng 已提交
105
// the TSDB repository info
H
more  
hzcheng 已提交
106
typedef struct STsdbRepoInfo {
H
more  
hzcheng 已提交
107
  STsdbCfg tsdbCfg;
H
Hongze Cheng 已提交
108 109 110 111
  int64_t  version;            // version of the repository
  int64_t  tsdbTotalDataSize;  // the original inserted data size
  int64_t  tsdbTotalDiskSize;  // the total disk size taken by this TSDB repository
  // TODO: Other informations to add
H
more  
hzcheng 已提交
112
} STsdbRepoInfo;
H
hzcheng 已提交
113 114
STsdbRepoInfo *tsdbGetStatus(tsdb_repo_t *pRepo);

H
Hongze Cheng 已提交
115 116 117 118
// the meter information report structure
typedef struct {
  STableCfg tableCfg;
  int64_t   version;
H
more  
hzcheng 已提交
119 120
  int64_t   tableTotalDataSize;  // In bytes
  int64_t   tableTotalDiskSize;  // In bytes
H
Hongze Cheng 已提交
121
} STableInfo;
H
hzcheng 已提交
122
STableInfo *tsdbGetTableInfo(tsdb_repo_t *pRepo, STableId tid);
H
Hongze Cheng 已提交
123 124 125 126 127 128 129 130 131

// -- FOR INSERT DATA
/**
 * Insert data to a table in a repository
 * @param pRepo the TSDB repository handle
 * @param pData the data to insert (will give a more specific description)
 *
 * @return the number of points inserted, -1 for failure and the error number is set
 */
H
hzcheng 已提交
132
int32_t tsdbInsertData(tsdb_repo_t *pRepo, SSubmitMsg *pMsg);
H
Hongze Cheng 已提交
133 134 135

// -- FOR QUERY TIME SERIES DATA

H
hzcheng 已提交
136
typedef void *tsdb_query_handle_t;  // Use void to hide implementation details
H
Hongze Cheng 已提交
137

H
hzcheng 已提交
138 139 140
typedef struct STableGroupList {  // qualified table object list in group
  SArray *pGroupList;
  int32_t numOfTables;
141
} STableGroupList;
H
Hongze Cheng 已提交
142 143

// query condition to build vnode iterator
H
hjxilinx 已提交
144
typedef struct STsdbQueryCond {
H
hzcheng 已提交
145 146 147
  STimeWindow      twindow;
  int32_t          order;  // desc/asc order to iterate the data block
  SColumnInfoData *colList;
H
hjxilinx 已提交
148
} STsdbQueryCond;
H
Hongze Cheng 已提交
149 150 151 152 153 154 155 156 157 158

typedef struct SBlockInfo {
  STimeWindow window;

  int32_t numOfRows;
  int32_t numOfCols;

  STableId tableId;
} SBlockInfo;

H
hjxilinx 已提交
159 160
typedef struct SDataBlockInfo {
  STimeWindow window;
161
  int32_t     rows;
H
hjxilinx 已提交
162 163 164 165
  int32_t     numOfCols;
  int64_t     uid;
  int32_t     sid;
} SDataBlockInfo;
H
Hongze Cheng 已提交
166

167 168 169 170 171
typedef struct {
  size_t  numOfTables;
  SArray* pGroupList;
} STableGroupInfo;

H
more  
hzcheng 已提交
172 173 174
typedef struct {
} SFields;

H
hjxilinx 已提交
175
#define TSDB_TS_GREATER_EQUAL 1
176
#define TSDB_TS_LESS_EQUAL    2
H
hjxilinx 已提交
177 178 179 180 181 182 183 184

typedef struct SQueryRowCond {
  int32_t rel;
  TSKEY   ts;
} SQueryRowCond;

typedef void *tsdbpos_t;

H
Hongze Cheng 已提交
185 186 187 188 189 190
/**
 * Get the data block iterator, starting from position according to the query condition
 * @param pCond  query condition, only includes the filter on primary time stamp
 * @param pTableList    table sid list
 * @return
 */
191
tsdb_query_handle_t *tsdbQueryTables(tsdb_repo_t* tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupInfo, SArray *pColumnInfo);
H
Hongze Cheng 已提交
192 193

/**
H
hjxilinx 已提交
194 195
 * move to next block
 * @param pQueryHandle
H
Hongze Cheng 已提交
196 197
 * @return
 */
H
hjxilinx 已提交
198
bool tsdbNextDataBlock(tsdb_query_handle_t *pQueryHandle);
H
Hongze Cheng 已提交
199 200

/**
H
hjxilinx 已提交
201
 * Get current data block information
H
Hongze Cheng 已提交
202 203 204 205
 *
 * @param pQueryHandle
 * @return
 */
H
hjxilinx 已提交
206
SDataBlockInfo tsdbRetrieveDataBlockInfo(tsdb_query_handle_t *pQueryHandle);
H
Hongze Cheng 已提交
207 208

/**
H
hjxilinx 已提交
209 210 211 212 213 214 215
 *
 * Get the pre-calculated information w.r.t. current data block.
 *
 * In case of data block in cache, the pBlockStatis will always be NULL.
 * If a block is not completed loaded from disk, the pBlockStatis will be NULL.

 * @pBlockStatis the pre-calculated value for current data blocks. if the block is a cache block, always return 0
H
Hongze Cheng 已提交
216 217
 * @return
 */
218
int32_t tsdbRetrieveDataBlockStatisInfo(tsdb_query_handle_t *pQueryHandle, SDataStatis **pBlockStatis);
H
Hongze Cheng 已提交
219 220

/**
H
hjxilinx 已提交
221 222 223
 * The query condition with primary timestamp is passed to iterator during its constructor function,
 * the returned data block must be satisfied with the time window condition in any cases,
 * which means the SData data block is not actually the completed disk data blocks.
H
Hongze Cheng 已提交
224 225 226 227
 *
 * @param pQueryHandle
 * @return
 */
H
hjxilinx 已提交
228
SArray *tsdbRetrieveDataBlock(tsdb_query_handle_t *pQueryHandle, SArray *pIdList);
H
Hongze Cheng 已提交
229 230

/**
H
hjxilinx 已提交
231
 *  todo remove the parameter of position, and order type
H
Hongze Cheng 已提交
232
 *
H
hjxilinx 已提交
233
 *  Reset to the start(end) position of current query, from which the iterator starts.
H
Hongze Cheng 已提交
234
 *
H
hjxilinx 已提交
235 236 237 238 239
 * @param pQueryHandle
 * @param position  set the iterator traverses position
 * @param order ascending order or descending order
 * @return
 */
H
hzcheng 已提交
240
int32_t tsdbResetQuery(tsdb_query_handle_t *pQueryHandle, STimeWindow *window, tsdbpos_t position, int16_t order);
H
Hongze Cheng 已提交
241

H
hjxilinx 已提交
242 243 244 245 246 247 248 249 250 251
/**
 * return the access position of current query handle
 * @param pQueryHandle
 * @return
 */
int32_t tsdbDataBlockSeek(tsdb_query_handle_t *pQueryHandle, tsdbpos_t pos);

/**
 * todo remove this function later
 * @param pQueryHandle
H
Hongze Cheng 已提交
252 253
 * @return
 */
H
hjxilinx 已提交
254
tsdbpos_t tsdbDataBlockTell(tsdb_query_handle_t *pQueryHandle);
H
Hongze Cheng 已提交
255 256

/**
H
hjxilinx 已提交
257 258 259 260 261 262 263 264 265
 * todo remove this function later
 * @param pQueryHandle
 * @param pIdList
 * @return
 */
SArray *tsdbRetrieveDataRow(tsdb_query_handle_t *pQueryHandle, SArray *pIdList, SQueryRowCond *pCond);

/**
 *  Get iterator for super tables, of which tags values satisfy the tag filter info
H
Hongze Cheng 已提交
266
 *
H
hjxilinx 已提交
267 268 269
 *  NOTE: the tagFilterStr is an bin-expression for tag filter, such as ((tag_col = 5) and (tag_col2 > 7))
 *  The filter string is sent from client directly.
 *  The build of the tags filter expression from string is done in the iterator generating function.
H
Hongze Cheng 已提交
270
 *
H
hjxilinx 已提交
271 272
 * @param pCond         query condition
 * @param pTagFilterStr tag filter info
H
Hongze Cheng 已提交
273 274
 * @return
 */
H
hjxilinx 已提交
275
tsdb_query_handle_t *tsdbQueryFromTagConds(STsdbQueryCond *pCond, int16_t stableId, const char *pTagFilterStr);
H
Hongze Cheng 已提交
276 277 278 279 280 281 282 283 284

/**
 * Get the qualified tables for (super) table query.
 * Used to handle the super table projection queries, the last_row query, the group by on normal columns query,
 * the interpolation query, and timestamp-comp query for join processing.
 *
 * @param pQueryHandle
 * @return table sid list. the invoker is responsible for the release of this the sid list.
 */
285
SArray *tsdbGetTableList(tsdb_query_handle_t *pQueryHandle);
H
Hongze Cheng 已提交
286 287

/**
288
 * Get the qualified table id for a super table according to the tag query expression.
H
Hongze Cheng 已提交
289 290 291 292
 * @param stableid. super table sid
 * @param pTagCond. tag query condition
 *
 */
293
int32_t tsdbQueryTags(tsdb_repo_t* tsdb, int64_t uid, const char* pTagCond, size_t len, STableGroupInfo* pGroupList,
294 295
                      SColIndex* pColIndex, int32_t numOfCols);

296
int32_t tsdbGetOneTableGroup(tsdb_repo_t* tsdb, int64_t uid, STableGroupInfo* pGroupInfo);
H
Hongze Cheng 已提交
297

298 299 300 301 302 303
/**
 * clean up the query handle
 * @param queryHandle
 */
void tsdbCleanupQueryHandle(tsdb_query_handle_t queryHandle);

H
more  
hzcheng 已提交
304 305 306 307
#ifdef __cplusplus
}
#endif

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
308
#endif  // _TD_TSDB_H_