0795-3555660
发布时间:2019-9-17 8:46:27浏览人数:1181作者:科维网络
沈老师,你好,想请教一个数据库查询日志,前台页面显示的问题。
需求:
希望做到:
目前方案:
日志信息存储在Oracle中,根据日期对Oracle做了分区处理,每天生成一个分区表,每个分区表中的数据总量大概在1000W左右。在相关查询字段例如用户,类型上建立索引,来满足不同维度的查询需求。
潜在问题:
跨分区的查询,求记录总数(计算分页时的查询),耗时要3-4分钟,请问有什么优化方法么?
==问题描述完==
这个需求还是非常变态的,通常日志会进行过滤/结构化/汇总,放入数据仓库,建立业务宽表,宽表上的查询,一般不会具体查一行一行的记录。
如果要支持检索,并一行一行在Web后台进行展示,至少要解决几个方面的问题:
一、存储问题
是否可以用关系型数据库存储日志?
如果日志格式固定,检索条件固定,是可以的。
例如:
- 2019-08-11 23:19:20 uid=123 action=pay type=wechat money=12
可以转化为表:
- t_log(date, time, uid, action, type, money)
然后在相关字段上建立索引,以满足后台查询与展示的需求。
数据量太大,怎么解决?
按照题目描述,日数据量大概在1000W级别,1年的数据量大概在36Y级别。
虽然本例的日志可以结构化(将日志转化表),由于数据量太大,其实关系型数据库不太适用,可以用适合更大数据量的ES或者Hive来存储。
二、检索问题
日志格式固定,检索条件固定,如果用关系型数据库或者Hive存储,可以在相关字段上建立索引,来满足查询需求。
如果用ES来存储,其内部用倒排表实现,天然支持检索。
三、扩展性问题
1. 数据量扩展
不管用Oracle,ES还是Hive来存储,它们的区别只是单实例/单集群存储容量不一样,如果数据量无限扩展,本质上的解决方案还是“水平切分”。
需要注意的是,尽量不要使用自带的“分区表”来扩展,而在业务层自己拆分。
画外音:《互联网公司为啥都不用分区表?》。
2. 检索字段扩展
如果日志不是标准化的,检索字段也不是固定的,那就麻烦了,那就变成了也“搜索引擎”的问题。
此时使用ES是更为合适的,不过结合无限的数据量,最终可能需要自己实现存储于检索引擎(类似于百度,存储容量无限,检索字段不固定)。
总结:
结合本例,日志量大,模式固定,建议:
宜春IT外包服务网 链接:http://www.kewei123.com
科维网络IT运维部,致力于IT外包领域多年,服务网点遍及宜春各区,十年来已为数百家企业提供过IT技术服务。
欢迎您来电咨询,我们将竭诚为您服务!0795-3555660
IT运维中心服务项目:电脑维修、网络维护、监控安装、无线覆盖、系统集成、办公设备耗材供应、IT外包服务等业务。
关键词:宜春电脑维修,宜春网络维护,宜春网络公司,宜春监控安装,宜春打印机维修,宜春IT外包,科维网络