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

相关推荐
JIngJaneIL几秒前
停车场管理|停车预约管理|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·停车场管理系统
雪域迷影33 分钟前
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·后端·http·golang·get
于小汐在咯4 小时前
深入浅出:增强现实(AR)技术全解析
后端·ar·restful
爱上妖精的尾巴4 小时前
5-27 WPS JS宏数组元素添加删除应用2
后端·restful·wps·js宏
努力的小郑4 小时前
与产品经理的“模糊”对决:Elasticsearch实现MySQL LIKE '%xxx%' 的奇幻之旅
后端·elasticsearch·搜索引擎
一 乐5 小时前
物业管理系统|小区物业管理|基于SprinBoot+vue的小区物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
稚辉君.MCA_P8_Java5 小时前
RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别?
后端·架构·kafka·kubernetes·rocketmq
yolo_Yang5 小时前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·后端
wdfk_prog5 小时前
结合QBoot与HPatchLite实现高效差分升级(FOTA)
java·后端·struts
舒一笑5 小时前
用数据照亮成长之路:PandaCoder Git 统计工具窗口
git·后端·intellij idea