Merge pull request #15933 from taosdata/fix/little_write_optimize
refact: a little optimize
This commit is contained in:
commit
ef1977f114
|
@ -393,15 +393,16 @@ static void tbDataMovePosTo(STbData *pTbData, SMemSkipListNode **pos, TSDBKEY *p
|
||||||
SMemSkipListNode *px;
|
SMemSkipListNode *px;
|
||||||
SMemSkipListNode *pn;
|
SMemSkipListNode *pn;
|
||||||
TSDBKEY *pTKey;
|
TSDBKEY *pTKey;
|
||||||
int c;
|
int32_t backward = flags & SL_MOVE_BACKWARD;
|
||||||
int backward = flags & SL_MOVE_BACKWARD;
|
int32_t fromPos = flags & SL_MOVE_FROM_POS;
|
||||||
int fromPos = flags & SL_MOVE_FROM_POS;
|
|
||||||
|
|
||||||
if (backward) {
|
if (backward) {
|
||||||
px = pTbData->sl.pTail;
|
px = pTbData->sl.pTail;
|
||||||
|
|
||||||
for (int8_t iLevel = pTbData->sl.maxLevel - 1; iLevel >= pTbData->sl.level; iLevel--) {
|
if (!fromPos) {
|
||||||
pos[iLevel] = px;
|
for (int8_t iLevel = pTbData->sl.level; iLevel < pTbData->sl.maxLevel; iLevel++) {
|
||||||
|
pos[iLevel] = px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pTbData->sl.level) {
|
if (pTbData->sl.level) {
|
||||||
|
@ -412,7 +413,7 @@ static void tbDataMovePosTo(STbData *pTbData, SMemSkipListNode **pos, TSDBKEY *p
|
||||||
while (pn != pTbData->sl.pHead) {
|
while (pn != pTbData->sl.pHead) {
|
||||||
pTKey = (TSDBKEY *)SL_NODE_DATA(pn);
|
pTKey = (TSDBKEY *)SL_NODE_DATA(pn);
|
||||||
|
|
||||||
c = tsdbKeyCmprFn(pTKey, pKey);
|
int32_t c = tsdbKeyCmprFn(pTKey, pKey);
|
||||||
if (c <= 0) {
|
if (c <= 0) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -427,8 +428,10 @@ static void tbDataMovePosTo(STbData *pTbData, SMemSkipListNode **pos, TSDBKEY *p
|
||||||
} else {
|
} else {
|
||||||
px = pTbData->sl.pHead;
|
px = pTbData->sl.pHead;
|
||||||
|
|
||||||
for (int8_t iLevel = pTbData->sl.maxLevel - 1; iLevel >= pTbData->sl.level; iLevel--) {
|
if (!fromPos) {
|
||||||
pos[iLevel] = px;
|
for (int8_t iLevel = pTbData->sl.level; iLevel < pTbData->sl.maxLevel; iLevel++) {
|
||||||
|
pos[iLevel] = px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pTbData->sl.level) {
|
if (pTbData->sl.level) {
|
||||||
|
@ -437,9 +440,7 @@ static void tbDataMovePosTo(STbData *pTbData, SMemSkipListNode **pos, TSDBKEY *p
|
||||||
for (int8_t iLevel = pTbData->sl.level - 1; iLevel >= 0; iLevel--) {
|
for (int8_t iLevel = pTbData->sl.level - 1; iLevel >= 0; iLevel--) {
|
||||||
pn = SL_NODE_FORWARD(px, iLevel);
|
pn = SL_NODE_FORWARD(px, iLevel);
|
||||||
while (pn != pTbData->sl.pTail) {
|
while (pn != pTbData->sl.pTail) {
|
||||||
pTKey = (TSDBKEY *)SL_NODE_DATA(pn);
|
int32_t c = tsdbKeyCmprFn(SL_NODE_DATA(pn), pKey);
|
||||||
|
|
||||||
c = tsdbKeyCmprFn(pTKey, pKey);
|
|
||||||
if (c >= 0) {
|
if (c >= 0) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -480,36 +481,44 @@ static int32_t tbDataDoPut(SMemTable *pMemTable, STbData *pTbData, SMemSkipListN
|
||||||
goto _exit;
|
goto _exit;
|
||||||
}
|
}
|
||||||
pNode->level = level;
|
pNode->level = level;
|
||||||
for (int8_t iLevel = 0; iLevel < level; iLevel++) {
|
|
||||||
SL_NODE_FORWARD(pNode, iLevel) = NULL;
|
|
||||||
SL_NODE_BACKWARD(pNode, iLevel) = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
tPutTSDBRow((uint8_t *)SL_NODE_DATA(pNode), pRow);
|
tPutTSDBRow((uint8_t *)SL_NODE_DATA(pNode), pRow);
|
||||||
|
|
||||||
// put
|
for (int8_t iLevel = level - 1; iLevel >= 0; iLevel--) {
|
||||||
for (int8_t iLevel = 0; iLevel < pNode->level; iLevel++) {
|
SMemSkipListNode *pn = pos[iLevel];
|
||||||
SMemSkipListNode *px = pos[iLevel];
|
SMemSkipListNode *px;
|
||||||
|
|
||||||
if (forward) {
|
if (forward) {
|
||||||
SMemSkipListNode *pNext = SL_NODE_FORWARD(px, iLevel);
|
px = SL_NODE_FORWARD(pn, iLevel);
|
||||||
|
|
||||||
SL_NODE_FORWARD(pNode, iLevel) = pNext;
|
|
||||||
SL_NODE_BACKWARD(pNode, iLevel) = px;
|
|
||||||
|
|
||||||
SL_NODE_BACKWARD(pNext, iLevel) = pNode;
|
|
||||||
SL_NODE_FORWARD(px, iLevel) = pNode;
|
|
||||||
} else {
|
|
||||||
SMemSkipListNode *pPrev = SL_NODE_BACKWARD(px, iLevel);
|
|
||||||
|
|
||||||
|
SL_NODE_BACKWARD(pNode, iLevel) = pn;
|
||||||
SL_NODE_FORWARD(pNode, iLevel) = px;
|
SL_NODE_FORWARD(pNode, iLevel) = px;
|
||||||
SL_NODE_BACKWARD(pNode, iLevel) = pPrev;
|
} else {
|
||||||
|
px = SL_NODE_BACKWARD(pn, iLevel);
|
||||||
|
|
||||||
SL_NODE_FORWARD(pPrev, iLevel) = pNode;
|
SL_NODE_BACKWARD(pNode, iLevel) = px;
|
||||||
SL_NODE_BACKWARD(px, iLevel) = pNode;
|
SL_NODE_FORWARD(pNode, iLevel) = pn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int8_t iLevel = level - 1; iLevel >= 0; iLevel--) {
|
||||||
|
SMemSkipListNode *pn = pos[iLevel];
|
||||||
|
SMemSkipListNode *px;
|
||||||
|
|
||||||
|
if (forward) {
|
||||||
|
px = SL_NODE_FORWARD(pn, iLevel);
|
||||||
|
|
||||||
|
SL_NODE_FORWARD(pn, iLevel) = pNode;
|
||||||
|
SL_NODE_BACKWARD(px, iLevel) = pNode;
|
||||||
|
} else {
|
||||||
|
px = SL_NODE_BACKWARD(pn, iLevel);
|
||||||
|
|
||||||
|
SL_NODE_FORWARD(px, iLevel) = pNode;
|
||||||
|
SL_NODE_BACKWARD(pn, iLevel) = pNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos[iLevel] = pNode;
|
||||||
|
}
|
||||||
|
|
||||||
pTbData->sl.size++;
|
pTbData->sl.size++;
|
||||||
if (pTbData->sl.level < pNode->level) {
|
if (pTbData->sl.level < pNode->level) {
|
||||||
pTbData->sl.level = pNode->level;
|
pTbData->sl.level = pNode->level;
|
||||||
|
@ -548,7 +557,7 @@ static int32_t tsdbInsertTableDataImpl(SMemTable *pMemTable, STbData *pTbData, i
|
||||||
// forward put rest data
|
// forward put rest data
|
||||||
row.pTSRow = tGetSubmitBlkNext(&blkIter);
|
row.pTSRow = tGetSubmitBlkNext(&blkIter);
|
||||||
if (row.pTSRow) {
|
if (row.pTSRow) {
|
||||||
for (int8_t iLevel = 0; iLevel < pTbData->sl.maxLevel; iLevel++) {
|
for (int8_t iLevel = pos[0]->level; iLevel < pTbData->sl.maxLevel; iLevel++) {
|
||||||
pos[iLevel] = SL_NODE_BACKWARD(pos[iLevel], iLevel);
|
pos[iLevel] = SL_NODE_BACKWARD(pos[iLevel], iLevel);
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
|
Loading…
Reference in New Issue