出家如初,成佛有余

平台各系统统计分析系统设计方案

Posted in Uncategorized by chuanliang on 2008/05/07

 

    随着公司业务的快速开拓,数据库数据量极速增长,一些关键数据表的数据没有备份归档策略,在统计分析策略上也没有进行相应的优化,系统将会很不稳定,最终影响日常交易、运营业务运行,同时也对新业务的开展造成了严重制约(例如商家查询和报表)。特编写手软平台所有系统进行统计分析的基本设计规范,作为各新系统建设的建设。

    基本指导原则:

  • 分离统计库(olap)和交易库(oltp)
  • 建立相对完备的数据归档、预处理机制,定期将统计数据归档到统计分析中间表
  • 统计分析数据从中间表读取,避免从oltp都实时统计查询

1. 目前系统主要的问题及经验教训

    性能问题主要来自于后台统计、结算等操作,这些sql的代价非常庞大,也是系统性能瓶颈所在。

    系统缺少老数据的归档机制,导致一些关键表的数据量一直在增长,导致日常查询操作压力较大,影响所有查询效率。

    系统统计分析和查询操作没有预处理机制,形成中间表或临时表,应用直接查询原始表,导致数据库压力过大。

    存在查询按钮重复点击,导致同一查询同时执行,很容易导致数据库负载达到峰值。

    查询页面需求不明确,存在一些不必要的信息,导致关联查询的复杂性。应用中存在无条件的查询语句。

    业务高负载时,集中在白天。这个时段的并发查询导致整体性能下降。

2. 新系统统计分析设计基本方法

基本方法:

  • 数据归档

    对历史数据定时归档,降低在线表各表的数据量。历史数据不进行删除操作。

    用脚本定时完成统计分析数据或查询数据入临时表或中间表,降低查询的压力。

  • 数据库优化和应用设计优化(数据库扁平化)

    对数据采用分库、分区、分表方式来处理大数据处理。

    对数据库设计优化。

    对应用系统优化。

3. 数据库分离基本方法

3.1. 数据归档原则

1) 目的:

    归档包括对交易数据的归档,也包括对历史数据的归档。

  • 交易数据的归档:

    将业务表与历史数据设计成不同的表来存储数据。业务表中只保留正在处理的业务数据。业务表中保留一段时间后(视数据量和实际需求),系统定时进行归档或人工在界面操作进行归档,将业务数据转移至历史数据表。

  • 历史数据的归档

    按照统计分析或大数据量查询要求,通过定时脚本对历史数据进行归档处理以降低统计查询的数据量。

    典型场景:对历史数据,按照日报表、周报表、月报表、年报表要求进行定时处理,形成中间数据表,前台查询时候直接从中间数据表中查询数据。

2) 原因:

    对于历史交易数据如果仍然存在在交易表中不进行清理操作,随着交易数据量的增长,将影响系统业务处理性能。

3) 备注:

    归档策略依赖于统计分析、定时脚本、查询等需求。

    存放时间:电信系统一般保存6个月数据。

    历史数据归档查询:

3.2. 数据分库原则

1) 目的:

    数据库分库原则分离交易库和分析库。

2) 原因:

    OLTP系统管理当前数据,侧重于事务和查询处理,在设计上遵循E-R模型。

    OLAP系统管理大量历史数据,提供汇总和聚集机制.,用于数据统计分析和挖掘,在设计上采用星型或雪花模型和面向主题的数据库设计。

    目前系统并没有区分这两种系统,导致进行统计分析和大数据量查询时候对数据库资源有较大的占用。

3) OLAP与OLTP同步策略

    采用mysql的Master-Slave模式来实现。交易库为Master,统计库为Slave。除对统计报表相关的表进行操作外,对统计库(Slave库)的交易数据不进行任何insert、update、delete操作,需要更新相关数据,只能操作Master库。

3.3. 数据分区原则

目的:

    为了使用户的大量的数据在读写操作和查询中速度更快,利用数据库系统提供的对表和索引进行分区的技术,以改善大型应用系统的性能。

    使用分区的优点:

  • 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
  • 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可
  • 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能;
  • 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。

3.4. 数据分表原则

目的:

    把若干个存储相同类型数据的表分成几个表分表存储,在提取数据的时候,不同的用户访问不同的表,互不冲突,减少锁表的几率。

可通过一个原始目标的ID或者名称通过一定的hash算法计算出数据存储表的表名,然后访问相应的表。

3.5. 统计分析处理原则

    写脚本自动生成统计分析结果,存入结果表中,提供查询。

3.6. 数据库操作日志拦截

目的:

    利用hibernate等的interceptor机制,拦截下数据库操作日志,以便于跟踪sql语句及性能调试。

    正常情况下,拦截操作日志为关闭状态。

3.7. 中间表、临时表、视图

目的

    利用中间表和临时表或视图机制,降低统计分析或查询过程中过大sql的操作,造成对数据库排序区过多占用,提高查询速度。

4. eSales系统核心统计策略

    通过Quartz来实现每日凌晨及每月1号凌晨业务量较小时候定时调度统计分析程序,汇总每日的销售明细等统计数据,形成“产品日销售统计”、“产品月销售统计”、“销售员日销售统计”、“销售员月销售统计”几个核心的统计中间表。

eSales系统统计分析

 

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: