mysql存储大量日志_海量日志数据如何处理统计?

虽然是一个PostgreSQL的问题,但是打了各种数据库标签。那么我就从MongoDB和NoSQL的角度说说这个问题。因为一些情况不是特别清楚,基于自己的假设来回答,如果有和你情况不符的地方再提出来。

数据库的日常应用无非OLAP和OLTP两大类,你的应用是一个比较典型的OLAP应用。通常OLAP的特点是对时效性的要求不是非常高,对系统资源占用比较重。你没有提对时效性要求到底有多高,还有你们数据的写入模式是怎样的。每天某个时间批量导入?或是随时从其他系统写入?不管怎样,还是有一些通用的办法来应对的。以下是无论使用哪种数据库都可以做的一些事情:

预聚合

从你的描述来看这是个比较典型的时序数据,过去的数据是不会变的。所以可以在每天结束时把这一天的数据先聚合好,某年某月某日有多少次攻击多少次恶意访问之类。如果要查一段时间的,则可以把已经按天统计好的数据再聚合一次。比如一个月的就是30条数据再次聚合,这比30x100w=3000w条数据的聚合要轻松很多。如果你的统计粒度需要比天还小,那就要看具体小到什么程度。如果是精确到时,那我可能还是会考虑按小时预聚合,这样统计比如过去30天的数据,就会有30x24=720条数据,也在接受范围内。但是如果统计范围允许到年,则有365x24=8760,情况就不是很乐观了。当然如果需要精确到分钟,那又是更麻烦的事情。但即使这样,预聚合仍然能有效减少数据量从而降低运算所需的时间和资源。为了解决小粒度聚合的问题,实际应用中可能需要进行多个层次的预聚合。比如按月,按天,按时,按分分别聚合好,这样在需要某分钟到某分钟的数据时,可以把大粒度的范围通过月、天、时先消化掉,剩下的两头零碎部分再用时、分钟处理,这样最大程度上减小需要聚合的数据量。

索引优化

无论使用哪种数据库,索引优化都是很重要的步骤。按上述方法预聚合后,各种时间因素肯定都是需要在索引中的。如果在时间基础上还需要对某个主机或域名等筛选,则最好是有这些字段的联合索引。具体问题具体分析,这个还需要你根据自己的表结构和查询去优化。

读写分离

无论怎么优化,OLAP对资源的占用都是不能忽略的。如果你的数据是实时写入,聚合期间很容易受到I/O瓶颈的影响。所以最好是把接受数据和分析数据的结点分开。

安利时间

说说如果使用MongoDB还有哪些事情可以做。

分片。水平扩展是NoSQL的特色之一,理论上所需时间和结点数量成反比。而数据量的增长在分布式环境中也不是一个问题。

Tag Aware Sharding。MongoDB分片的特色,可以把旧数据自动归集到容量大,但是性能相对差的硬件上,这样让热数据始终保持在性能较好的机器上达到更好的效果。

天然的读写分离和高可用。复制集本身就可以实现读写分离和高可用。相信这两个特性对任何应用都是很有意义的。

最后还是要提醒一点,理论归理论,没有一个方案是完美的,实际应用时肯定还会遇到各种各样奇怪的问题。编程是一项创造性的工作,需要你自己在实践中不断寻找最优的解决方案,在实践中成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创】软件测试工程师基础技能+

软件测试工程师,工作之余应该看些什么、学些什么?通常情况下一位软件测试工程师需要具备哪些必须的技能? 最佳隐形技能 ★★开发语言知识背景对被测试对象使用的语言有一定的了解,这样有助于测试工作的开展,同时&#…

LeetCode 1215. 步进数(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 1,那么这个数就是一个「步进数」。 例如,321 是一个步进数,而 421 不是。 给你两个整数,low 和 high,请你…

python自动化入门_python自动化-python入门

1、安装python,配置环境变量。windows下是安装路径直接配到环境变量里面就可以mac添加环境变量在~/.bash_profile这个文件中,添加一行alias python"/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/bin/python3.7"问…

别人叫我程序猿,我称自己攻城狮。没日没夜写代码,不知何日涨工资?

别人叫我程序猿, 我称自己攻城狮。 没日没夜写代码, 不知何日涨工资? 转载于:https://www.cnblogs.com/lzkwin/archive/2013/01/27/2879036.html

LeetCode 364. 加权嵌套序列和 II(重复叠加)

文章目录1. 题目2. 解题1. 题目 给一个嵌套整数序列,请你返回每个数字在序列中的加权和,它们的权重由它们的深度决定。 序列中的每一个元素要么是一个整数,要么是一个序列(这个序列中的每个元素也同样是整数或序列)。…

python节日贺卡图片大全_新年贺卡图片_新年贺卡手工制作图片

新年贺卡图片_新年贺卡手工制作图片导读:小编根据大家的需要整理了一份关于《新年贺卡图片_新年贺卡手工制作图片》的内容,具体内容:新年到来,制作一张手工图片,送上新年满满的祝福,本文是小编整理的新年贺…

POJ 计算几何(3)

计算几何学 半平面求交 poj3384,poj2540 ( poj3335, poj3130, poj 1474, poj1279, poj3525) 可视图的建立 poj2966 点集最小圆覆盖 zju1450 对踵点 poj2079 半平面求交 详见:http://www.cnblogs.com/vongang/archive/2013/02/19/2917246.html 转载于:https…

LeetCode 第 31 场双周赛(273/2767,前9.87%,第3次全部通过)

文章目录1. 比赛结果2. 题目1. LeetCode 5456. 在区间范围内统计奇数数目 easy2. LeetCode 5457. 和为奇数的子数组数目 medium3. LeetCode 5458. 字符串的好分割数目 medium4. LeetCode 5459. 形成目标数组的子数组最少增加次数 hard1. 比赛结果 双周赛题目比较简单。第一题没…

java发送outlook邮件_通过Java代码发送OutLook邮件

准备我们想通过Java代码实现发送OutLook邮件,必须准备以下材料:OutLook邮箱目标邮箱查看OutLook邮箱信息打开OutLook邮箱,在Settings中搜索或找到SMTP:打开以下界面,拿到我们想要的数据(ServerName 以及 Port)&#xf…

makefile笔记

make-k:即使make程序出错也继续向下运行-n:将原来执行的命令输出,而不执行-f:指定makefile的文件名称-p:打印出系统缺省定义的内部规则下面放我项目中的一个比较详细的Makefile文件: #****************************************************************…

LeetCode 第 199 场周赛(757/5231,前14.5%)

文章目录1. 比赛结果2. 题目1. LeetCode 5472. 重新排列字符串 easy2. LeetCode 5473. 灯泡开关 IV medium3. LeetCode 5474. 好叶子节点对的数量 medium4. LeetCode 5462. 压缩字符串 II hard1. 比赛结果 第一题失误,点完提交就跑了,没想到。。第四题D…

java x.length_Java中的length和length()

红颜莎娜稍微简化一下,您可以认为它是一种特殊情况,而不是普通类(有点像基元,但不是)。字符串和所有集合都是类,因此获取大小,长度或类似内容的方法。我猜设计的原因是性能。如果他们今天创建了它,他们可能…

asp.net 使用Master模板页需要注意

1. 凡是runat"server"的标签&#xff0c;所在的页面又使用了模板页Master&#xff0c;那么客户端生成的html源码中它的ID会自动改变&#xff0c;因而会导致该页的js中一ID定位的代码失灵。 2. 模板页中常常在<head></head>中写一个HeadContentPlaceHolde…

java生产者消费者gui_java理论之java--GUI(图形用户管理)与 IO/流

GUI(图形用户管理)一 GUI的组件和容器Component(所有可显示的元素):1:它的直接功能子类---Button:对应事件:java.awt.event.ActionEvent;处理函数:public void actionPerformed(ActionEvent e)---TextFiled:对应事件:java.awt.event.ActionEvent;处理函数:public void actionPe…

LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

文章目录1. 题目2. 解题2.1 记忆化递归2.2 拓扑排序1. 题目 给定一个整数矩阵&#xff0c;找出最长递增路径的长度。 对于每个单元格&#xff0c;你可以往上&#xff0c;下&#xff0c;左&#xff0c;右四个方向移动。 你不能在对角线方向上移动或移动到边界外&#xff08;即…

DEV里的XtraGrid的GridView的一个单元格里显示大量的文字怎么办?

以下的说明是VisualStudio2010&#xff0c;Developer Express v2011 vol 1环境&#xff0c; ①设定XtraGrid的GridView-->Main-->Colums-->具体的某一列-->ColumnEdit-->设定为RichTextEdit -->设定Name属性和Encoding属性(为Uinicode(UTF-8),防止出现乱码) …

C# 页面关联类似模式窗口

在做一项功能时&#xff0c;页面需要选择“社区”&#xff0c; 首先需要选择区域&#xff0c;选完区域后&#xff0c;再选择社区&#xff0c;页面会刷新&#xff0c;而且这个社区选择Div区域一开始不可见的&#xff0c;如果在一个页面操作不便&#xff0c;所以需要开启另外一个…

java管理员模块设计_通俗易懂权限管理模块设计 - Java

最近一直在做CMS系统&#xff0c;发现一些内容其实都是重复出现的&#xff0c;例如权限管理模块。权限管理模块就是为了管理用户是否有权利访问某个权限&#xff0c;如果不能则拒绝访问。其实Java中已经有很成熟的权限管理框架&#xff0c;例如Shiro&#xff0c;spring Securit…

LeetCode MySQL 1527. Patients With a Condition(like)

文章目录1. 题目2. 解题1. 题目 Table: Patients ----------------------- | Column Name | Type | ----------------------- | patient_id | int | | patient_name | varchar | | conditions | varchar | ----------------------- patient_id is the primary ke…

Web开发中需要注意的地方

在StackExchange上有人问了这样一个问题&#xff1a;What should every programmer know about web development?&#xff08;关于Web开发&#xff0c;什么是所有程序员需要知道的&#xff1f;&#xff09;里面给出的答案非常不错&#xff0c;所以&#xff0c;我翻译转载过来。…