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

相关推荐
Rust语言中文社区7 分钟前
【Rust日报】 丰田“先锋”选择了 Rust
开发语言·后端·rust
椎4958 分钟前
苍穹外卖资源点整理+个人错误解析-Day10-订单状态定时处理(Spring Task)、来单提醒和客户催单
java·后端·spring
努力的小雨10 分钟前
从零跑起 RokidDemo:开发小白也能搞定的入门实践
后端
p***629917 分钟前
CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现
java·后端·spring
Lisonseekpan17 分钟前
Java分词器深度评测与实战指南
java·开发语言·后端
c***871920 分钟前
Flask:后端框架使用
后端·python·flask
aiopencode24 分钟前
iOS 应用性能测试的系统化实践,构建从底层分析到真机回归的多工具协同体系
后端
举大栗子1 小时前
基于Java的Socket.IO服务端基础演示
后端
用户69371750013841 小时前
14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
android·后端·kotlin
组合缺一2 小时前
Spring Boot 国产化替代方案。Solon v3.7.2, v3.6.5, v3.5.9 发布(支持 LTS)
java·后端·spring·ai·web·solon·mcp