From 32f9bc0dd0ac02d948b5999747f3090c51cb6bf1 Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Thu, 11 Aug 2022 18:29:28 +0800 Subject: [PATCH] opti:logic for get table list --- source/dnode/vnode/inc/vnode.h | 1 + source/dnode/vnode/src/meta/metaQuery.c | 52 +++++++++++++++++++++++++ source/libs/executor/src/executil.c | 19 ++++++++- 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index 18a7583f4c..e969634a9f 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -91,6 +91,7 @@ typedef struct SMetaEntry SMetaEntry; void metaReaderInit(SMetaReader *pReader, SMeta *pMeta, int32_t flags); void metaReaderClear(SMetaReader *pReader); int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid); +//int32_t metaGetTableEntryByUidTest(void *pReader, SArray *uidList); int32_t metaReadNext(SMetaReader *pReader); const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *tagVal); int metaGetTableNameByUid(void *meta, uint64_t uid, char *tbName); diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c index eed0ae5e14..f5771c17bd 100644 --- a/source/dnode/vnode/src/meta/metaQuery.c +++ b/source/dnode/vnode/src/meta/metaQuery.c @@ -53,6 +53,58 @@ _err: return -1; } +int metaGetTableEntryByUidTest(void* meta, SArray *uidList) { + + SArray* readerList = taosArrayInit(taosArrayGetSize(uidList), sizeof(SMetaReader)); + SArray* uidVersion = taosArrayInit(taosArrayGetSize(uidList), sizeof(STbDbKey)); + SMeta *pMeta = meta; + int64_t version; + + int64_t stt1 = taosGetTimestampUs(); + for(int i = 0; i < taosArrayGetSize(uidList); i++) { + void* ppVal = NULL; + int vlen = 0; + uint64_t * uid = taosArrayGet(uidList, i); + // query uid.idx + if (tdbTbGet(pMeta->pUidIdx, uid, sizeof(*uid), &ppVal, &vlen) < 0) { + continue; + } + version = *(int64_t *)ppVal; + + STbDbKey tbDbKey = {.version = version, .uid = *uid}; + taosArrayPush(uidVersion, &tbDbKey); + } + int64_t stt2 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest1 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt2-stt1); + + for(int i = 0; i < taosArrayGetSize(uidVersion); i++) { + SMetaReader pReader = {0}; + + STbDbKey *tbDbKey = taosArrayGet(uidVersion, i); + // query table.db + if (tdbTbGet(pMeta->pTbDb, tbDbKey, sizeof(STbDbKey), &pReader.pBuf, &pReader.szBuf) < 0) { + continue; + } + taosArrayPush(readerList, &pReader); + } + int64_t stt3 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest2 rows:%d, cost:%ld us", taosArrayGetSize(uidList), stt3-stt2); + + for(int i = 0; i < taosArrayGetSize(readerList); i++){ + SMetaReader* pReader = taosArrayGet(readerList, i); + metaReaderInit(pReader, meta, 0); + // decode the entry + tDecoderInit(&pReader->coder, pReader->pBuf, pReader->szBuf); + + if (metaDecodeEntry(&pReader->coder, &pReader->me) < 0) { + } + metaReaderClear(pReader); + } + int64_t stt4 = taosGetTimestampUs(); + qDebug("metaGetTableEntryByUidTest3 rows:%d, cost:%ld us", taosArrayGetSize(readerList), stt4-stt3); + return 0; +} + int metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid) { SMeta *pMeta = pReader->pMeta; int64_t version; diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 4713eaefe5..f798433f51 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -382,6 +382,20 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p goto end; } +// int64_t stt = taosGetTimestampUs(); +// SArray* arrAssist = taosArrayInit(rows, sizeof(SMetaReader)); +// SArray* uidList = taosArrayInit(rows, sizeof(uint64_t)); +// for (int32_t i = 0; i < rows; i++) { +// STableKeyInfo* info = taosArrayGet(pTableList, i); +// taosArrayPush(uidList, &info->uid); +// } + +// code = metaGetTableEntryByUidTest(metaHandle, uidList); + +// +// int64_t stt1 = taosGetTimestampUs(); +// qDebug("generate tag meta rows:%d, cost:%ld us", rows, stt1-stt); + int64_t st = taosGetTimestampUs(); for (int32_t i = 0; i < rows; i++) { STableKeyInfo* info = taosArrayGet(pTableList, i); @@ -392,7 +406,7 @@ SColumnInfoData* getColInfoResult(void* metaHandle, SArray* pTableList, SNode* p code = metaGetTableEntryByUid(&mr, info->uid); // int64_t stt1 = taosGetTimestampUs(); // qDebug("generate tag get meta rows:%d, cost:%ld ms", rows, stt1-stt); - +// SMetaReader *mr = taosArrayGet(arrAssist, i); for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){ SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j); STagVal tagVal = {0}; @@ -465,6 +479,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SIndexMetaArg metaArg = { .metaEx = metaHandle, .idx = tsdbGetIdx(metaHandle), .ivtIdx = tsdbGetIvtIdx(metaHandle), .suid = tableUid}; + int64_t stt = taosGetTimestampUs(); SArray* res = taosArrayInit(8, sizeof(uint64_t)); SIdxFltStatus status = SFLT_NOT_INDEX; code = doFilterTag(pTagIndexCond, &metaArg, res, &status); @@ -481,6 +496,8 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, taosArrayPush(pListInfo->pTableList, &info); } taosArrayDestroy(res); + int64_t stt1 = taosGetTimestampUs(); + qDebug("generate table list, cost:%ld us", stt1-stt); } else { code = vnodeGetAllTableList(pVnode, tableUid, pListInfo->pTableList); }