Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7daca7ff
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7daca7ff
编写于
12月 16, 2021
作者:
dengyihao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add index cache
上级
f0110af3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
172 addition
and
0 deletion
+172
-0
source/libs/index/inc/index_cache.h
source/libs/index/inc/index_cache.h
+53
-0
source/libs/index/src/index_cache.c
source/libs/index/src/index_cache.c
+119
-0
未找到文件。
source/libs/index/inc/index_cache.h
0 → 100644
浏览文件 @
7daca7ff
/*
* 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/>.
*/
#ifndef __INDEX_CACHE_H__
#define __INDEX_CACHE_H__
#include "index.h"
#include "tlockfree.h"
// ----------------- row structure in skiplist ---------------------
/* A data row, the format is like below:
* |<--totalLen-->|<-- fieldId-->|<-- value len--->|<-- value-->|<--version--->|<-- itermType -->|
*
*/
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
struct
IndexCache
{
T_REF_DECLARE
()
int
cVersion
;
//
}
IndexCache
;
//
IndexCache
*
indexCacheCreate
();
void
indexCacheDestroy
(
IndexCache
*
cache
);
int
indexCachePut
(
IndexCache
*
cache
,
int32_t
fieldId
,
const
char
*
fieldVale
,
int32_t
fvlen
,
uint64_t
uid
,
int8_t
operaType
);
int
indexCacheGet
(
IndexCache
*
cache
,
uint64_t
*
rst
);
int
indexCacheSearch
(
IndexCache
*
cache
,
SIndexMultiTermQuery
*
query
,
SArray
*
result
);
#ifdef __cplusplus
}
#endif
#endif
source/libs/index/src/index_cache.c
0 → 100644
浏览文件 @
7daca7ff
/*
* 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/>.
*/
#include "index_cache.h"
static
int32_t
compareKey
(
const
void
*
l
,
const
void
*
r
)
{
char
*
lp
=
(
char
*
)
l
;
char
*
rp
=
(
char
*
)
r
;
// skip total len
int32_t
ll
,
rl
;
// len
memcpy
(
&
ll
,
lp
,
sizeof
(
int32_t
));
memcpy
(
&
rl
,
rp
,
sizeof
(
int32_t
));
lp
+=
sizeof
(
int32_t
);
rp
+=
sizeof
(
int32_t
);
// compare field id
int32_t
lf
,
rf
;
// field id
memcpy
(
&
lf
,
lp
,
sizeof
(
lf
));
memcpy
(
&
rf
,
rp
,
sizeof
(
rf
));
if
(
lf
!=
rf
)
{
return
lf
<
rf
?
-
1
:
1
;
}
lp
+=
sizeof
(
lf
);
rp
+=
sizeof
(
rf
);
// compare field value
int32_t
lfl
,
rfl
;
memcpy
(
&
lfl
,
lp
,
sizeof
(
lfl
));
memcpy
(
&
rfl
,
rp
,
sizeof
(
rfl
));
lp
+=
sizeof
(
lfl
);
rp
+=
sizeof
(
rfl
);
//refator later
int32_t
i
,
j
;
for
(
i
=
0
,
j
=
0
;
i
<
lfl
&&
j
<
rfl
;
i
++
,
j
++
)
{
if
(
lp
[
i
]
==
rp
[
j
])
{
continue
;
}
else
{
return
lp
[
i
]
<
rp
[
j
]
?
-
1
:
1
;}
}
if
(
i
<
lfl
)
{
return
1
;}
else
if
(
j
<
rfl
)
{
return
-
1
;
}
lp
+=
lfl
;
rp
+=
rfl
;
// compare version
int32_t
lv
,
rv
;
memcpy
(
&
lv
,
lp
,
sizeof
(
lv
));
memcpy
(
&
rv
,
rp
,
sizeof
(
rv
));
if
(
lv
!=
rv
)
{
return
lv
>
rv
?
-
1
:
1
;
}
lp
+=
sizeof
(
lv
);
rp
+=
sizeof
(
rv
);
return
0
;
}
IndexCache
*
indexCacheCreate
()
{
IndexCache
*
cache
=
calloc
(
1
,
sizeof
(
IndexCache
));
return
cache
;
}
void
indexCacheDestroy
(
IndexCache
*
cache
)
{
free
(
cache
);
}
int
indexCachePut
(
IndexCache
*
cache
,
int32_t
fieldId
,
const
char
*
fieldValue
,
int32_t
fvlen
,
uint64_t
uid
,
int8_t
operType
)
{
if
(
cache
==
NULL
)
{
return
-
1
;}
int32_t
version
=
T_REF_INC
(
cache
);
int32_t
total
=
sizeof
(
int32_t
)
+
sizeof
(
fieldId
)
+
4
+
fvlen
+
sizeof
(
version
)
+
sizeof
(
uid
)
+
sizeof
(
operType
);
char
*
buf
=
calloc
(
1
,
total
);
char
*
p
=
buf
;
memcpy
(
buf
,
&
total
,
sizeof
(
total
));
total
+=
total
;
memcpy
(
buf
,
&
fieldId
,
sizeof
(
fieldId
));
buf
+=
sizeof
(
fieldId
);
memcpy
(
buf
,
&
fvlen
,
sizeof
(
fvlen
));
buf
+=
sizeof
(
fvlen
);
memcpy
(
buf
,
fieldValue
,
fvlen
);
buf
+=
fvlen
;
memcpy
(
buf
,
&
version
,
sizeof
(
version
));
buf
+=
sizeof
(
version
);
memcpy
(
buf
,
&
uid
,
sizeof
(
uid
));
buf
+=
sizeof
(
uid
);
memcpy
(
buf
,
&
operType
,
sizeof
(
operType
));
buf
+=
sizeof
(
operType
);
}
int
indexCacheSearch
(
IndexCache
*
cache
,
SIndexMultiTermQuery
*
query
,
SArray
*
result
)
{
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录