当前位置: 首页 > news >正文

业务日志设计

        当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集

        设计一个统计系统的日志记录机制时,主要需要考虑日志的结构、数据存储方案、查询效率和系统扩展能力。

一、日志设计

1.日志结构
  • 时间戳 : 记录事件发生的时间。
  • 业务系统标识: 标识记录来源于哪个业务系统。
  • 事件类型: 描述业务中发生的具体事件(例如:创建、更新、删除)。
  • 用户标识: 记录哪个用户触发了事件(如果适用)。
  • 事件详情: 事件的具体内容,可以是 JSON 格式,包含更多关键信息(如影响的数据、变更的值等)。
  • 状态: 事件的状态,如成功、失败等。
2.日志存储形式
  • 批量写入:
    • 为了提高性能,可以使用批量写入的方式,将多个日志记录合并后一起写入数据库。
  • 异步处理:
    • 主业务流程中的日志记录操作可以异步进行(例如,通过消息队列),避免对主流程的性能影响。

二、数据库选择

1.NoSql数据库
  • MongoDB:
    • 特别适合存储 JSON 格式的日志记录,灵活的文档模型能很好地应对结构变化。
    • 自带水平扩展能力,适合大规模日志数据存储。
    • 虽然 MongoDB 不支持传统的 SQL JOIN,但可以通过手动查询、$lookup 聚合管道等方式实现关联查询(引用)。
  • Elasticsearch:
    • 适合进行复杂的查询和分析,良好的全文搜索功能。
    • 实时数据分析能力强,能快速从海量日志中检索信息。
    • 适合用于构建实时的监控和统计系统。
​​​2.系型数据库
  • PostgreSQL:
    • 功能强大的关系数据库,支持 JSON 数据类型,可以存储灵活的日志记录。
    • 适合需要复杂查询和强一致性的场景。
  • MySQL:
    • 传统的关系型数据库,支持高并发读写。
    • 可以通过使用合适的分区策略来处理大规模日志。
3.数据库对比
  • MongoDB vs MySQL:
    • 如果应用需要处理非结构化数据、灵活的数据模型和高并发的写入,MongoDB 是更好的选择。MySQL 的结构化数据模型在特定情况下可能会造成性能瓶颈。
  • PostgreSQL vs MySQL:
    • PostgreSQL 通常在处理复杂查询、支持高级功能(例如窗口函数、CTE、JSONB 等)方面超越 MySQL。如果需要复杂的数据分析,大型项目通常倾向于使用 PostgreSQL
  • MongoDB vs Elasticsearch:
    • 如果你的应用程序需要存储、更新和处理柔性数据结构,并且需要一些基本的查询能力,MongoDB 可能更合适。
    • 如果你的需求主要集中在快速搜索、分析和实时数据处理,Elasticsearch 可能是更合适的选择。

三、据采集与分析

  • 数据采集:
    • 使用ETL(提取、转换、加载)工具或自定义脚本,定期将日志数据从数据库或消息队列中提取到统计系统中。
  • 统计分析:
    • 使用数据分析工具(如 Apache Spark、Presto 等)进行批量数据处理和分析。
    • 对于实时统计需求,可以直接从日志数据库(如 Elasticsearch)进行查询和分析

四、性能和扩展

  • 设计日志收集系统时,请考虑日志的写入性能和查询性能。
  • 随着数据量的增加,监控性能,并基于需求进行扩展(如读写分离、增加节点、分区等)。

五、ETL工具推荐

1.Apache Nifi
  • 特点: 一个易于使用、强大的数据处理和分发工具,支持实时数据流处理。
  • 优点: 可视化的数据流设计界面,支持多种数据源和目标,能够处理数据流的路由、转换和操作。
  • 官网: Apache NiFi
  • 与 PHP 的结合: 可通过 REST API 与 PHP 集成。您可以使用 PHP 发出 API 请求来管理数据流、启动流程等操作。
  • 推荐方式: 创建一个 PHP 应用,使用 cURL 或其他 HTTP 客户端库与 Nifi 的 REST API 进行交互。
2.Apache Airflow
  • 特点: 一个调度工作流的工具,可以编排 ETL 任务。
  • 优点: 高度灵活,可扩展的工作流管理,支持定时和依赖性任务管理。
  • 官网: Apache Airflow
  • 与 PHP 的结合: 可以通过 Airflow 的 REST API 来调度任务,您可以使用 PHP 发送 API 请求来管理 DAG(有向无环图)和任务执行。
  • 推荐方式: 使用 PHP 创建自动化脚本来调用 Airflow API,推进 ETL 流程
3.Singer
  • 特点: 采用“音乐”协议的开源工具,专注于数据提取和加载。
  • 优点: 易于扩展和构建,提供许多预构建的连接器,可以通过编写 TAP 和 TARGET 轻松集成。
  • 官网: Singer | Open Source ETL
  • 与 PHP 的结合: Singer 的 TAP 和 TARGET 可以用任何编程语言实现,包括 PHP。您可以编写 Singer 的目标应用程序来提取数据并加载到目标位置。
  • 推荐方式: 使用 PHP 实现自己的 Singer TAP 或 TARGET。
4.阿里云 DataWorks
  • 中文支持: 阿里云的 DataWorks 是一个大数据开发和管理平台,整个界面和文档均为中文。
  • 特点: 提供丰富的数据集成、处理和分析功能,适合生产环境。
  • 与 PHP 集成: 阿里云的 DataWorks 可以通过 API 进行集成。您可以在 PHP 程序中使用阿里云的 API 调用数据工作流和任务。
  • 推荐方式: 使用 PHP 代码调用 DataWorks 的 REST API,以启动作业或管理工作流。
5.DataX (阿里巴巴开源)
  • 中文支持: DataX 是阿里巴巴开源的 ETL 工具,相关文档和社区交流多为中文。
  • 特点: 适合大规模数据的实时和离线同步,支持多种数据源和目标。
  • 与 PHP 集成: DataX 是一个命令行工具,因此可以通过 PHP 调用所在服务器中对应的执行命令。也可以在定期任务中结合 PHP 与 DataX 进行数据迁移。
  • 推荐方式: 创建 PHP 脚本,使用 exec() 或 shell_exec() 来运行 DataX 任务。

相关文章:

业务日志设计

当一个项目足够大的时候,我们需要将统计系统完全独立出去,那么就无法避免数据采集的问题,我们可以在业务触发处增加log日志来记录当前变化的原始数据,提供统计系统进行采集 设计一个统计系统的日志记录机制时,主要需要…...

对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”

2024年,在高阶智驾进入快速上车的同时,座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示,2024年1-10月,中国市场(不含进出口)乘用…...

【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: QLoRA: Efficient Finetun…...

计算机网络之---物理层的基本概念

物理层简介 物理层(Physical Layer) 是 OSI(开放系统互联)模型 中的第 1 层,它主要负责数据在物理媒介上的传输,确保原始比特(0 和 1)的传输不受干扰地从一个设备传送到另一个设备。…...

Burpsuite20241102macM1版安装

1、安装jdk11 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew update brew install openjdk11 echo export PATH"/opt/homebrew/opt/openjdk11/bin:$PATH" >> ~/.zshrc source ~/.zshrc j…...

缓存常见问题

缓存问题: 1. 缓存穿透:访问一个不存在的缓存 2. 缓存击穿:大批用户访问热点数据的时候,热点数据缓存失效,大量访问数据库 3. 缓存雪崩:大批量缓存全部失效 Redis和Memcached区别: 1. Redi…...

C++ 入门第25天:线程池(Thread Pool)基础

往期回顾: C 学习第22天:智能指针与异常处理-CSDN博客 C 入门第23天:Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天:C11 多线程基础-CSDN博客 C 入门第25天:线程池(Thread Pool)基础 前…...

微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域

这是一个非常关键且容易混淆的概念 既然 this.globalData.appId appId 是将 appId 存储在内存中,为什么微信小程序中的 wx.getStorage 和 wx.setStorage(本地存储)中没有 appId,并且您提出了一个非常重要的疑问:stor…...

WLAN基本原理与配置

一、WLAN概述 二、WLAN的基本概念 AC与Fit AP的组网架构: 1.二层组网 AC和Fit AP在一个广播域中 2.三层组网 AC和Fit AP需要跨三层通信 CAPWAP(无线接入点控制和配置协议): 该协议定义了如何对AP进行管理、业务配置&#…...

KaliLinux 2022.1安装和相关配置

一、安装系统和设置中文 (一)下载安装KaliLInux2022.1 以直接下载虚拟机映像文件为例,下载地址:https://www.kali.org/get-kali/#kali-virtual-machines,下载完成后直接解压,再用VMware打开后开机&#x…...

HarmonyOS开发:ArkTS初识

ArkTS基本语法 ArkTS语言简介 ArkTS是鸿蒙生态的应用开发语言。基本语法风格与TypeScript(简称TS)相似,在TS的生态基础上进一步扩展,继承了TS的所有特性,是TS的超集。 基本语法概述 扩展能力 基础语法&#xff1a…...

Unity的四种数据持久化方式

目录 什么是数据持久化 数据持久化之PlayerPrefs 概述 API及用法 电脑中存放的位置 优缺点 主要用处 封装PlayerPrefs 数据持久化之XML XML是什么 读取XML信息 C#读取XML的方法有几种 读取xml文件信息 读取元素和属性信息 总结 写入XML信息 选择存储目录 存储…...

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…...

Postman接口测试02|接口用例设计

目录 六、接口用例设计 1、接口测试的测试点(测试维度) 1️⃣功能测试 2️⃣性能测试 3️⃣安全测试 2、设计方法与思路 3、单接口测试用例 4、业务场景测试用例 1️⃣分析测试点 2️⃣添加员工 3️⃣查询员工、修改员工 4️⃣删除员工、查询…...

C#语言的学习路线

C#语言的学习路线 C#(读作“C Sharp”)是一种由微软开发的现代编程语言,具有强大的功能和灵活性,广泛应用于桌面应用程序、Web开发、游戏开发以及企业级应用等多个领域。无论你是编程新手还是有一定基础的开发者,掌握…...

双目的一些文章学习

文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识,空洞卷积,SPPNet网络,计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息,又引入3D卷积来增加模…...

开源模型应用落地-qwen2-7b-instruct-LoRA微调合并-ms-swift-单机单卡-V100(十三)

一、前言 本篇文章将使用ms-swift去合并微调后的模型权重,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略,…...

【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 一、类的声明和使用 1. 类的声明基础 2. 类的访问控制 3. 类的使用 二、类的声明和对象的声明 1. 类声明中的函数定义 2. 对象声明的多种方式 三、构造函数和析构函数的执行过程 1. 构造函数 2. 析构函数 实验步骤 测试说明…...

性能测试05|JMeter:分布式、报告、并发数计算、性能监控

目录 一、JMeter分布式 1、应用场景 2、原理 3、分布式相关注意事项 4、分布式配置与运行 二、JMeter报告 1、聚合报告 2、HTML报告 三、并发用户数(线程数)计算 四、JMeter下载第三方插件 五、性能监控 1、Concurrency Thread Group 线程组…...

关于Java面试题大全网站无法访问的解决方案

如果Java面试题大全网站无法访问,你仍然可以通过以下渠道获取高质量的Java面试题资源: 1. 国内网站 牛客网: 网址:https://www.nowcoder.com/特点:提供大量Java面试题和在线编程练习,适合刷题和模拟面试。推…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...