实时运营数据分析(real-time operational analytics )是指同时在同一张数据表上执行分析处理和业务处理。分析查询主要是对海量数据执行聚合查询,而事务主要是指对数据表进行少量数据的更新和查找。

运营工作负载(Operational workload)是指对开展业务至关重要的业务交易。例如,一家零售商店有一个交易系统来创建或修改新订单,而一家信用卡公司则跟踪供应商代表其客户收取的所有费用。 这些交易系统对企业至关重要,因为任何停机时间或速度放缓都会直接影响企业的利润。 因此,这些系统专为性能/可伸缩性而设计,并具有高可用性。 对业务工作负载同样重要的是企业用来回答诸如“完成订单的平均时间是多少时间”之类的问题的分析。

大多数客户通过在另一台服务器上创建数据仓库来实现分析工作负载(analytics workload),周期性把交易系统产生的数据通过ETL(提取,转换和加载)同步到数据仓库。

一,传统的BI系统

在传统的BI系统中,把用于公司日常事务的工作负载(OLTP)和用于报表分析的工作负载分开,分别对应于运营数据库和数据仓库,通过把两种工作负载分开,尽可能地避免分析查询对交易数据库的影响。

分析数据通常存储在专用于用于报表分析查询的数据仓库或数据集市中。日常的事务数据直接写入到运营数据库,为了使分析尽量准备准确,需要数据工程师设计ETL(提取,转换和加载)程序,定期把运营数据转移到分析数据库(即数据仓库)中。

尽管有ETL程序定期从事务数据库把数据同步到分析数据库,但是数据的同步不可避免地存在一定的时延,这就导致分析数据库中的数据还是跟运营数据库存在一定的差异(GAP),使得数据分析的结果存在失真的可能性。

二,什么是实时运营数据分析

传统的BI系统存在数据延迟的原因是用于分析处理和事务处理的表是分开的,如果分析处理和事务处理在同一基础表上执行,那么就不会存在时间延迟的问题。

实时运营分析的目标是单个数据源的场景,例如企业资源计划(ERP)应用程序,用户可以在其上执行日常的事务处理和分析工作。

实时分析在行存储表上使用可更新的非聚集列存储索引,列存储索引维护数据的副本,分别在数据的单独副本上运行事务处理和分析工作,这样避免了在同一个数据表运行两个工作负载,可以最大程度地减少同时运行的两个工作负载对查询性能的影响。

当基表的数据更新时,SQL Server自动更新列存储索引,通过这种设计,用户可以对最新数据实时运行分析,分析查询使用的始终是最新的数据,分析处理的结果是最接近现实数据的,因此,得到的分析结果是最真实和最新的。

用户只需要在基表上创建一个非聚集的列存储索引,就可以实现实时运营数据分析:

CREATE NONCLUSTERED COLUMNSTORE INDEX index_name
ON table_name (colum_list) ;

在表上创建非聚集的列存储索引,底层的物理结构如下图所示:

对运营数据进行实时分析,存在两个挑战:

第一个挑战是,当数据库模式已针对OLTP优化时,如何获得良好的分析查询性能?传统的数据仓库(DW)使用星型或雪花模式为分析查询提供最佳性能。但是,OLTP数据库的架构已高度规范化(即数据重复最少),这主要是因为大量表之间的连接复杂性,在用于分析查询时可能会导致性能不佳。列存储索引(即NCCI)可以显着提高查询速度,可以克服查询的复杂性,并在几秒钟内仍然可以提供大多数分析查询。在这一点上,必须强调的是,使用实时操作分析的分析查询性能不会像使用专用DW时所能达到的那样快,但是关键好处是能够进行实时分析。一些企业可能选择进行实时运营分析,同时仍保留用于极端分析的专用DW。有些客户已经在生产中部署了NCCI,并取消了专用DW。

第二个挑战是,如何最小化或消除分析对事务性工作负载的影响?实际上,交易系统会跟踪其业务交易,交易工作量的任何减缓都是不可接受的。虽然SQL Server提供了多个选项来最小化分析对运营工作负载的影响,但是这种影响是不可避免的。

参考文档:

Get started with Columnstore for real-time operational analytics

Real-Time Operational Analytics Using In-Memory Technology

Real-Time Operational Analytics - Overview nonclustered columnstore index (NCCI)

SQL Server 列存储索引 第四篇:实时运营数据分析的更多相关文章

  1. SQL Server 列存储索引 第三篇:维护

    列存储索引分为两种类型:聚集的列存储索引和非聚集的列存储索引,在一个表上只能创建一个聚集索引,要么是聚集的列存储索引,要么是聚集的行存储索引,然而一个表上可以创建多个非聚集索引. 一,创建列存储索引 ...

  2. SQL Server 列存储索引强化

    SQL Server 列存储索引强化 SQL Server 列存储索引强化 1. 概述 2.背景 2.1 索引存储 2.2 缓存和I/O 2.3 Batch处理方式 3 聚集索引 3.1 提高索引创建 ...

  3. SQL Server 列存储索引 第二篇:设计

    列存储索引可以是聚集的,也可以是非聚集的,用户可以在表上创建聚集的列存储索引(Clustered Columnstore Index)或非聚集的列存储索引(Nonclustered Columnsto ...

  4. SQL Server 列存储索引概述

    第一次接触ColumnStore是在2017年,数据库环境是SQL Server 2012,Microsoft开始在SQL Server 2012中推广列存储索引,到现在的SQL Server 201 ...

  5. 使用Spark加载数据到SQL Server列存储表

    原文地址https://devblogs.microsoft.com/azure-sql/partitioning-on-spark-fast-loading-clustered-columnstor ...

  6. SQL Server 列存储性能调优(翻译)

    原文地址:http://social.technet.microsoft.com/wiki/contents/articles/4995.sql-server-columnstore-performa ...

  7. SQL Server Reporting Service(SSRS) 第四篇 SSRS 用法总结

    1. 如何让表头在每页显示(译) A. 打开高级模式:  在分组栏中点击Column Goups右侧的箭头选择高级模式; B. 找到第一个Static组 在Row Groups区域中(注意不是Colu ...

  8. SQL Server Reporting Service(SSRS) 第四篇 SSRS 常见问题总结

    1. 如何让表头在每页显示(译) A. 打开高级模式:  在分组栏中点击Column Goups右侧的箭头选择高级模式; B. 找到第一个Static组 在Row Groups区域中(注意不是Colu ...

  9. SQL Server 2014聚集列存储索引

    转发请注明引用和原文博客(http://www.cnblogs.com/wenBlog) 简介 之前已经写过两篇介绍列存储索引的文章,但是只有非聚集列存储索引,今天再来简单介绍一下聚集的列存储索引,也 ...

随机推荐

  1. Linux基本命令学习

    对操作系统进行信息查询 硬盘大小 查看磁盘信息:  fdisk -l/dev/sda       操作系统中第一块硬盘的名称以及所在路径linux操作系统中一切皆文件(文件名)        sd(硬 ...

  2. Spring整合JDBC(连接池、JDBC模板、Dao配置到Spring容器、配置文件的优化)

    1.Spring整合JDBC (1)导包(共12个): c3p0连接池.JDBC驱动(4个) Spring-jdbc.Spring-tx事务(2个) (2)JDBC模板对象(JDBCTemplate) ...

  3. centos 启动 elasticsearch 失败集

    环境: elasticsearch 6.5.2, java 连接失败 启动后当你 使用 curl http://localhost:9200 测试时,得到如下结果 Curl: (7) Failed c ...

  4. Android捕捉错误try catch 的简单使用

    基本语法 try{ //可能发生错误的程式码 }catch(具体错误 e){ //具体错误有就写,没有就不写,有多个,就写多个catch e.printStackTrace(); //在命令行打印错误 ...

  5. python3 结束进程

    为什么会去结束进程呢?因为在做appium中遇到H5跳转了多个页面的时候,出现了获取的pagesource是上一个页面的情况,这时候就需要先退出webview,然后杀掉chromedriver的进程, ...

  6. js简单数据类型和复杂数据类型

    var timer = null;  //简单数据类型null 返回的是一个空的对象 object console.log(typeof timer); 1.简单数据类型 在内存中存放在栈中,在里面开 ...

  7. P2783 有机化学之神偶尔也会作弊 题解

    题面 前言 这道题以前还是道(水)黑题,现在怎么降紫了???? 前置芝士 tarjain 缩点 倍增求LCA或树剖求LCA 脑子... 题意 给你一个无向图,要求你把所有的环缩成一个点.在新得到的图上 ...

  8. java安全编码指南之:lock和同步的正确使用

    目录 简介 使用private final object来作为lock对象 不要synchronize可被重用的对象 不要sync Object.getClass() 不要sync高级并发对象 不要使 ...

  9. 入职大厂,齐姐精选的 9 道 Java 集合面试题

    Java 集合框架其实都讲过了,有一篇讲 Collection 的,有一篇讲 HashMap 的,那没有看过的小伙伴快去补下啦,文末也都有链接:看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文 ...

  10. 跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)

    前言 权限管控对于一个系统来说是非常重要的,最熟悉不过的是菜单权限和数据权限,上一节通过Jwt实现了认证,接下来用它实现接口权限的验证,为什么不是菜单权限呢?对于前后端分离而言,称其为接口权限感觉比较 ...