Skip to content

Commit ed4f523

Browse files
committed
feat:add big_key
1 parent ac6e848 commit ed4f523

4 files changed

Lines changed: 924 additions & 0 deletions

File tree

tools/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
add_subdirectory(./aof_to_pika)
22
add_subdirectory(./benchmark_client)
3+
add_subdirectory(./bigkey_analyzer)
34
add_subdirectory(./binlog_sender)
45
add_subdirectory(./manifest_generator)
56
add_subdirectory(./rdb_to_pika)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
set(WARNING_FLAGS "-W -Wextra -Wall -Wsign-compare \
2+
-Wno-unused-parameter -Wno-redundant-decls -Wwrite-strings \
3+
-Wpointer-arith -Wreorder -Wswitch -Wsign-promo \
4+
-Woverloaded-virtual -Wnon-virtual-dtor -Wno-missing-field-initializers")
5+
6+
set(CXXFLAGS "${WARNING_FLAGS} -std=c++17 -g")
7+
8+
set(SRC_DIR .)
9+
aux_source_directory(${SRC_DIR} BASE_OBJS)
10+
11+
add_executable(bigkey_analyzer ${BASE_OBJS})
12+
13+
target_include_directories(bigkey_analyzer
14+
PRIVATE
15+
${PROJECT_SOURCE_DIR}
16+
${PROJECT_SOURCE_DIR}/src
17+
${PROJECT_SOURCE_DIR}/src/storage/include
18+
)
19+
20+
target_link_libraries(bigkey_analyzer
21+
storage
22+
rocksdb
23+
pthread
24+
)
25+
26+
set_target_properties(bigkey_analyzer PROPERTIES
27+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
28+
CMAKE_COMPILER_IS_GNUCXX TRUE
29+
COMPILE_FLAGS ${CXXFLAGS}
30+
)

tools/bigkey_analyzer/README.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Big Key Analyzer
2+
3+
大key分析工具,用于分析PikiwiDB实例中的大key情况。本工具适用于unstable分支新的存储结构,支持单实例和多DB实例(db/0, db/1, db/2...)。
4+
5+
## 功能特点
6+
7+
- 支持分析各种数据类型(strings, hashes, lists, sets, zsets)的大key
8+
- 可以按大小过滤key
9+
- 可以限制输出结果数量(top N)
10+
- 支持按key前缀统计
11+
- 输出结果包含key类型、大小和过期时间(TTL)
12+
- 可以将结果输出到文件
13+
14+
## 编译
15+
16+
在PikiwiDB根目录下执行:
17+
18+
```bash
19+
mkdir -p build
20+
cd build
21+
cmake ..
22+
make bigkey_analyzer
23+
```
24+
25+
编译完成后,可执行文件会生成在build目录下。
26+
27+
## 使用方法
28+
29+
```
30+
Usage: bigkey_analyzer [OPTIONS] <db_path>
31+
Options:
32+
--min-size=SIZE Only show keys larger than SIZE bytes
33+
--top=N Only show top N largest keys
34+
--prefix-stat Show statistics by key prefix
35+
--prefix-delimiter=C Character used to delimit prefix (default: ':')
36+
--type=TYPE Only analyze specific type (strings|hashes|lists|sets|zsets|all)
37+
--output=FILE Write output to file instead of stdout
38+
--help Display this help message
39+
```
40+
41+
## 示例
42+
43+
1. 分析所有大key:
44+
45+
```bash
46+
# 单实例
47+
./bigkey_analyzer /path/to/pikiwidb/data
48+
49+
# 多DB实例(db/0, db/1, db/2...)
50+
./bigkey_analyzer /path/to/pikiwidb
51+
```
52+
53+
2. 只分析大于1MB的key:
54+
55+
```bash
56+
./bigkey_analyzer --min-size=1048576 /path/to/pikiwidb/data
57+
```
58+
59+
3. 只显示前10个最大的key:
60+
61+
```bash
62+
./bigkey_analyzer --top=10 /path/to/pikiwidb/data
63+
```
64+
65+
4. 只分析hash类型的key:
66+
67+
```bash
68+
./bigkey_analyzer --type=hashes /path/to/pikiwidb/data
69+
```
70+
71+
5. 分析并按前缀统计:
72+
73+
```bash
74+
./bigkey_analyzer --prefix-stat /path/to/pikiwidb/data
75+
```
76+
77+
6. 输出结果到文件:
78+
79+
```bash
80+
./bigkey_analyzer --output=result.txt /path/to/pikiwidb/data
81+
```
82+
83+
## 输出格式
84+
85+
工具输出包括三部分:
86+
87+
1. 大key列表 - 按大小降序排列
88+
2. 按前缀统计(如果使用--prefix-stat选项)
89+
3. 总结统计信息
90+
91+
示例输出:
92+
93+
```
94+
===== Big Key Analysis =====
95+
Type Size Key TTL
96+
hash 1048576 user:profile:1001 -1
97+
zset 524288 ranking:global 3600
98+
string 262144 config:settings -1
99+
...
100+
101+
===== Key Prefix Statistics =====
102+
Prefix Count Total Size Avg Size
103+
user 100 10485760 104857.6
104+
ranking 50 2621440 52428.8
105+
config 10 524288 52428.8
106+
...
107+
108+
===== Summary =====
109+
Total keys analyzed: 160
110+
Keys by type:
111+
hash: 50 keys, 25.0 MB total, 524288.0 bytes avg
112+
zset: 30 keys, 15.0 MB total, 524288.0 bytes avg
113+
string: 80 keys, 10.0 MB total, 131072.0 bytes avg
114+
```
115+
116+
## 注意事项
117+
118+
- 工具只读取数据库,不会进行任何写操作
119+
- 大key的大小包括key和value的总大小
120+
- 已过期的key不会被包含在分析结果中

0 commit comments

Comments
 (0)