使用python+faker生成随机句子,来测试一下victorialogs的存储压缩率,3:1的结果还挺不错

之前用一些现成样本测试压缩率,达到惊人的1000:60, 猜测可能是因为日志内容高度相似,被极致压缩了,这次准备了一些极随机的样本来做一次测试

这里用到了一个专门用来生成伪数据的库 faker,可以用来生成以随机单词组成的句子,用来伪装成日志内容。

python 复制代码
import json, time, requests, random
import uuid, base64
from faker import Faker
fake = Faker()

VLOGS_URL = "http://192.168.1.11:9428/insert/jsonline"

def fast_uuid():
    return base64.urlsafe_b64encode(uuid.uuid4().bytes)[:10].decode()


users = []
for _ in range(5000):
    users.append(fast_uuid())

aitools = []
for _ in range(1000):
    aitools.append("aitools_%s"%fast_uuid())


def build_logs(count: int):
    logs = []
    base_time = int(time.time() * 1000)
    for i in range(count):
        msg = fake.sentence(nb_words=120, variable_nb_words=True)
        logs.append({
            "_msg": f"user login success {msg} user_id={i}",
            "_time": base_time + i ,
            "host": "web-01",
            "app":  "auth-service",
            "level": random.choice(["INFO", "WARN", "ERROR"]),
            "userid": fast_uuid(),
            "aitools": "aitools_%s"%fast_uuid()
        })
    contents = "\n".join(json.dumps(l, ensure_ascii=False) for l in logs)
    print("avg doc len = %s"%(len(contents)/count))
    return contents


def main():
    start = time.time()
    total = 0
    while 1:
        batch = build_logs(1000)          # 一次 1000 条
        total+=1000
        params = {
        "_msg_field":   "_msg",       # 日志原文字段
        "_time_field":  "_time",      # 时间戳字段
        "_stream_fields": "host,app"  # 用哪些字段算 stream_id
        }
        headers = {"Content-Type": "application/json"}
        r = requests.post(VLOGS_URL, data=batch, params=params, headers=headers)
        print("HTTP", r.status_code, r.text)
        print("total = %s, insert speed=%s"%(total, total/(time.time()-start)))
        time.sleep(2)


if __name__ == '__main__':
    main()

测试下来,压缩率为3:1, 比上面的结果差很多,但是能有这个级别我已经很满意了,毕竟这种情况太极端了。

相关推荐
该用户已不存在18 分钟前
人人都爱的开发工具,但不一定合适自己
前端·后端
码事漫谈33 分钟前
AI代码审查大文档处理技术实践
后端
码事漫谈35 分钟前
C++代码质量保障:静态与动态分析的CI/CD深度整合实践
后端
蓝易云1 小时前
Git stash命令的详细使用说明及案例分析。
前端·git·后端
Nejosi_念旧1 小时前
Go 函数选项模式
开发语言·后端·golang
回家路上绕了弯1 小时前
Java 并发编程常见问题及解决方案
java·后端
天天摸鱼的java工程师1 小时前
🧠 你是如何理解 Spring Boot 中的自动配置原理的?——一个 8 年 Java 老兵的分享
java·后端·面试
Cosolar1 小时前
5 分钟搞定 Windows Server Docker 安装
后端
林太白1 小时前
Rust详情修改删除优化
前端·后端·rust
开心就好20252 小时前
移动端 WebView 登录异常与会话恢复问题全流程排查指南
后端