使用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, 比上面的结果差很多,但是能有这个级别我已经很满意了,毕竟这种情况太极端了。

相关推荐
阿拉斯攀登24 分钟前
MQ消息积压问题排查:消费卡顿、堆积、消费速度优化
后端
阿拉斯攀登29 分钟前
无人售货机库存异步更新方案:解决高并发下单库存卡顿问题
后端
阿拉斯攀登33 分钟前
无人售货机MQ消息丢失、重复消费、超时异常全套兜底方案
后端
做系统的大强36 分钟前
我用中文从零写了一个操作系统(下篇):从45个BUG到165个——假持久化、USB地狱与OS自举
后端
程序员老赵38 分钟前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·后端·docker
用户61526121321039 分钟前
Java主流框架与源码:Spring Framework
后端
yume_sibai2 小时前
03-Rust 函数式编程特性(闭包 + Iterator + Option/Result + 链式调用)
开发语言·后端·rust
吃饱了得干活2 小时前
Redis 不是死脑筋,它是一套“会进化”的存储系统
redis·后端
伩仁2 小时前
别再 HTTP 200 一把梭了:用 RFC 9457 Problem Details 给 FastAPI 错误响应"立规矩"
后端
MeetTanG2 小时前
Go 实战锦囊|errgroup:优雅地管理并发任务组
后端·go