CN104166666A - PostgreSQL高并发流式大数据多维度准实时统计的方法 - Google Patents
PostgreSQL高并发流式大数据多维度准实时统计的方法 Download PDFInfo
- Publication number
- CN104166666A CN104166666A CN201410207285.6A CN201410207285A CN104166666A CN 104166666 A CN104166666 A CN 104166666A CN 201410207285 A CN201410207285 A CN 201410207285A CN 104166666 A CN104166666 A CN 104166666A
- Authority
- CN
- China
- Prior art keywords
- data
- flowing water
- function
- statistics
- increment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/283—Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及PostgreSQL高并发流式大数据多维度准实时统计的方法。其技术方案要点是:创建流水表增量状态表、统计函数、函数增量状态表和分析函数,对流水表增量状态表函数增量状态表进行初始化;计算分析函数取数的次数,以整数方式记录,作为统计次数数据,分析函数工作,进入子步骤,计算机根据统计函数得出的流水统计数据输出含有多维度准实时统计数据的统计维度表。本发明节约硬件投入至少100倍,实时时效控制在1分钟以内。
Description
技术领域
本发明属于一种数据统计方法,特别涉及PostgreSQL高并发流式大数据多维度准实时统计的方法。
背景技术
随着互联网的发展,互联网上的应用和用户越来越多,用户产生的数据也爆发性的增长,通过用户产生的数据,可以按照数据的各个维度分析得出企业关注的数据,例如用户的流动性,差异性,传播性,产品和用户群体的关系,应用热度分时,分地域的排行等等,根据用户特性挖掘用户潜在的需求等;程序获取用户产生的数据最简单有效的方法就是流水式数据,单个数据包里面包含了发生时间点的各个维度的所有信息量,这种场景的特性是并发量大,数据量大,因此对时效要求比较高的数据分析来说是一个非常巨大的挑战。
传统的做法有几种:
由于OLTP系统的计算资源和IO资源的局限性,直接在OLTP系统上做多维度的统计是不合理的,第一种解决办法是将这种流式数据从OLTP系统异步的写入数据仓库,而数据仓库并不适合做实时的统计,比较适合做离线(如隔夜)的分析,无法满足时效高的场景需求。同时数据仓库的基础设施以及软件初期投入成本高昂,耗资往往是OLTP系统的百倍以上。
另一种方法是在OLTP系统上使用触发器,在触发器函数中包含需要统计的维度的业务逻辑,实时的更新统计结果,这种方法适合小数据量的场景,因为每条数据都触发,显然带来了比较庞大的计算开销,极其容易产生写入瓶颈,无法满足高并发和大数据场景下的高时效统计需求。
申请号:201010551123。6,公开了一种多层次多维度的数据属性分析方法及装置。其特征是:建立维护公用基础资料数据的公用代码平台,所述公用基础资料包括基础资料和/或公用代码表;建立所述基础资料数据分析的数据关系模型作为基础资料分析平台;根据所述基础资料分析平台的数据关系进行数据属性多层次与多维度分析。其技术方案与现有技术一样,存在同时数据仓库的基础设施以及软件初期投入成本高昂,耗资往往是OLTP系统的百倍以上的问题。
发明内容
本发明解决了上述技术存在同时数据仓库的基础设施以及软件初期投入成本高昂,耗资往往是OLTP系统的百倍以上。或是因为每条数据都触发,显然带来了比较庞大的计算开销,极其容易产生写入瓶颈,无法满足高并发和大数据场景下的高时效统计需求的问题,提供一种克服现有技术缺点,的PostgreSQL高并发流式大数据多维度准实时统计的方法。
本发明解决其技术问题所采用的技术方案是:一种PostgreSQL高并发流式大数据多维度准实时统计的方法,适用于OLTP系统,
步骤一:创建流水表增量状态表、统计函数、函数增量状态表和分析函数,对流水表增量状态表函数增量状态表进行初始化;
步骤二:计算分析函数取数的次数,以整数方式记录,作为统计次数数据,
步骤三:分析函数工作,进入子步骤,
子步骤一:计算机判断取数据的参数值是否正确,如果正确将数据录入流水信息表,如果不正确则结束本方法并报错,
子步骤二:从函数增量状态表中取出统计函数,存储在计算机内存中,遍历统计函数的函数名和各变量,
子步骤三:把未执行事务号存入内存中,
子步骤四:在流水表增量状态表中取出历史截止时间值,
子步骤五:将历史未执行事务号与未执行事务号做集合加运算,
子步骤六:从流水表中根据统计次数数据取出大于等于历史截止时间值的事务号结果值,所述事务号结果值包括历史截止时间值和第一部分流水数据,历史截止时间值根据事务号结果值进行更新,
子步骤七:计算机从流水表中先对未执行事务号和历史未执行事务号进行集合差运算获得差异值,再对未执行事务号和历史未执行事务号进行取交集运算获得交集值,将交集值与差异值做集合与运算得出第二部分流水数据,
子步骤八:将第一部分流水数据和第二部分流水数据合并得出流水数据,将流水数据更新至流水表增量状态表,将历史截止时间值也更新至流水表增量状态表中,遍历统计函数中的变量后,更新函数增量状态表,
子步骤九:流水数据由统计函数调用,执行步骤四,
步骤四:计算机根据统计函数得出的流水统计数据输出含有多维度准实时统计数据的统计维度表;
所述流水表为OLTP系统固有组成。
相对传统方法通过大量基础设施以及软件投资提高计算资源来解决大数据的准实时统计需求,性价比很低,往往不是创业型或者中小企业所能承担的。另一些现有技术则通过OLTP中创建触发器来实现实时的统计,受制于请求量,无法满足高并发的请求。采用本发明的方法很好的解决了三个问题,一是成本,二是高并发,三是时效;使得创业型或中小企业在可以接受的成本投入下,也能实现大数据的准实时数据挖掘,相对成本问题,由于本发明不需要OLTP以外额外的设备投入,所以不会带来成本的提升;
针对高并发的问题,本发明采用异步的方式解决了高并发的问题,增量对数据进行统计,同时不影响一致性和高并发;针对时效问题,本发明支持各维度并行调度,可以提高统计的并发度,很好的解决了串行统计带来的时效问题。经测试,采用本发明的方法进行高并发流式大数据多维度准实时统计与传统方法相比,在不影响并发的前提下,节约硬件投入至少100倍,实时时效控制在1分钟以内,实际测试约5秒。相比数据仓库的隔天报表时效提高1440倍以上,统计性能比直接统计性能提升1万倍以上。
作为优选,当取增量数据消耗硬件成本更高时,使用所有维度统一增量数据集方式统计,在数据统计耗硬件成本更高时,使用维度独立增量数据集方式统计。
这个设定可以根据人工设定或者采用计算机自动获取之后的计算获得,这样设置,针对不同的硬件条件有不同的对应方法,确定了相应的最优方式。
作为优选,使用所有维度统一增量数据集方式统计,所有统计维度表对应同一份流水表增量状态表和同一份函数增量状态表。
作为优选,使用所有维度统一增量数据集方式统计,每份统计维度表均对应有一份流水表增量状态表和同一份函数增量状态表。
作为优选,在所述子步骤二中,在获取统计维度信息前,系统对均获取一个用于确保统计逻辑数据的一致性的adv锁,在所述子步骤九中增加释放adv锁的步骤。
本发明的实质性效果是:采用本发明的方法进行高并发流式大数据多维度准实时统计与传统方法相比,在不影响并发的前提下,节约硬件投入至少100倍,实时时效控制在1分钟以内,实际测试约5秒。相比数据仓库的隔天报表时效提高1440倍以上,统计性能比直接统计性能提升1万倍以上。
具体实施方式
下面通过具体实施例,对本发明的技术方案作进一步的具体说明。
实施例:
一种PostgreSQL高并发流式大数据多维度准实时统计的方法,适用于OLTP系统,
步骤一:创建流水表增量状态表、统计函数、函数增量状态表和分析函数,对流水表增量状态表函数增量状态表进行初始化;
步骤二:计算分析函数取数的次数,以整数方式记录,作为统计次数数据,
步骤三:分析函数工作,进入子步骤,
子步骤一:计算机判断取数据的参数值是否正确,如果正确将数据录入流水信息表,如果不正确则结束本方法并报错,
子步骤二:从函数增量状态表中取出统计函数,存储在计算机内存中,遍历统计函数的函数名和各变量,
子步骤三:把未执行事务号存入内存中,
子步骤四:在流水表增量状态表中取出历史截止时间值,
子步骤五:将历史未执行事务号与未执行事务号做集合加运算,
子步骤六:从流水表中根据统计次数数据取出大于等于历史截止时间值的事务号结果值,所述事务号结果值包括历史截止时间值和第一部分流水数据,历史截止时间值根据事务号结果值进行更新,
子步骤七:计算机从流水表中先对未执行事务号和历史未执行事务号进行集合差运算获得差异值,再对未执行事务号和历史未执行事务号进行取交集运算获得交集值,将交集值与差异值做集合与运算得出第二部分流水数据,
子步骤八:将第一部分流水数据和第二部分流水数据合并得出流水数据,将流水数据更新至流水表增量状态表,将历史截止时间值也更新至流水表增量状态表中,遍历统计函数中的变量后,更新函数增量状态表,
子步骤九:流水数据由统计函数调用,执行步骤四,
步骤四:计算机根据统计函数得出的流水统计数据输出含有多维度准实时统计数据的统计维度表;
所述流水表为OLTP系统固有组成。
当取增量数据消耗硬件成本更高时,使用所有维度统一增量数据集方式统计,在数据统计耗硬件成本更高时,使用维度独立增量数据集方式统计。
使用所有维度统一增量数据集方式统计,所有统计维度表对应同一份流水表增量状态表和同一份函数增量状态表。
使用所有维度统一增量数据集方式统计,每份统计维度表均对应有一份流水表增量状态表和同一份函数增量状态表。
在所述子步骤二中,在获取统计维度信息前,系统对均获取一个用于确保统计逻辑数据的一致性的adv锁,在所述子步骤九中增加释放adv锁的步骤。
以实际例子来讲解具体的实施过程为:
首先要创建流水表,在流水表中,以xid作为增量截止标识,另外需要xid_snapshot作为气泡标记.
为了加快取数据的速度,在xid上加上必要的索引.
create index idx_log_1on log(xid);
创建维度统计表,本例以c1一个维度,c2,c3一个维度,加上日,周,月,年总共8个维度.
创建分析注册表,记录每个明细表每次分析的截止xid,xip.
插入初始记录,表的初始记录xid取值范围(>=0and<=txid_snapshot_xmin-1)
insert into log_read values(’log’,0,null,null,now());
创建分析维度信息注册表,记录每个维度的初始xid信息.
因为所有维度使用同一个表级别的截至值(log_read.xid),但是维度可能是后期加入的,所以初始xid可能不一样,每个维度一条记录信息.
创建log表的数据分析函数,统一取增量数据,然后调用维度分析函数.
v_limit用于限制多少个xid,而不是多少条记录,当一个XID有多条记录时,如果取到这个XID的话,这个XID的数据也会全部被处理.
因为使用v_limit来限定行数,就会出现比较危险的情况,因为如果一个事务包含多条记录的话,限定行数的方法可能导致一个事务的数据只取到中间部分,而剩余部分下次就取不到了.
设置统计维度的初始记录开始位置,xid=0表示表里的所有数据都需要统计.
使用pgbench模拟并发数据录入,录入语句中包括回滚的场景,更贴近实际应用场景:
执行以下进程,数据录入10分钟.
摘录测试结果如下,5000tps,30000qps.
同时开启以下统计程序,每隔6秒统计一次,每次最多取100万个事务的增量数据.
统计比数据录入结束延迟约5秒.
测试结束后验证统计数据是否准确,比对流水表和统计维度表的数据是否一致.
统计表和流水表的比对结果一致,性能提升80000多倍.
新增统计维度的测试,加入需要新增统计维度,可以通过以下方法添加统计维度
创建新维度的统计计算函数stat_log_c1_week.
注册统计维度函数,注册时isinit=true.第一次调用analyze_log后更新为false,同时更新init_xid,init_xip等.
继续使用pgbench数据录入测试60秒
同时开启analyze.sh进行增量统计
./analyze.sh
分析函数运行完后,比对数据一致性,结果一致.
比对第二个维度的数据,由于第二个维度是后期加入的,所以统计时需要排除掉历史数据.
以上所述的实施例只是本发明的一种较佳的方案,并非对本发明作任何形式上的限制,在不超出权利要求所记载的技术方案的前提下还有其它的变体及改型。
Claims (5)
1.一种PostgreSQL高并发流式大数据多维度准实时统计的方法,适用于OLTP系统,其特征在于:
步骤一:创建流水表增量状态表、统计函数、函数增量状态表和分析函数,对流水表增量状态表函数增量状态表进行初始化;
步骤二:计算分析函数取数的次数,以整数方式记录,作为统计次数数据,步骤三:分析函数工作,进入子步骤,
子步骤一:计算机判断取数据的参数值是否正确,如果正确将数据录入流水信息表,如果不正确则结束本方法并报错,
子步骤二:从函数增量状态表中取出统计函数,存储在计算机内存中,遍历统计函数的函数名和各变量,
子步骤三:把未执行事务号存入内存中,
子步骤四:在流水表增量状态表中取出历史截止时间值,
子步骤五:将历史未执行事务号与未执行事务号做集合加运算,
子步骤六:从流水表中根据统计次数数据取出大于等于历史截止时间值的事务号结果值,所述事务号结果值包括历史截止时间值和第一部分流水数据,历史截止时间值根据事务号结果值进行更新,
子步骤七:计算机从流水表中先对未执行事务号和历史未执行事务号进行集合差运算获得差异值,再对未执行事务号和历史未执行事务号进行取交集运算获得交集值,将交集值与差异值做集合与运算得出第二部分流水数据,
子步骤八:将第一部分流水数据和第二部分流水数据合并得出流水数据,将流水数据更新至流水表增量状态表,将历史截止时间值也更新至流水表增量状态表中,遍历统计函数中的变量后,更新函数增量状态表,
子步骤九:流水数据由统计函数调用,执行步骤四,
步骤四:计算机根据统计函数得出的流水统计数据输出含有多维度准实时统计数据的统计维度表;
所述流水表为OLTP系统固有组成。
2.根据权利要求1所述的PostgreSQL高并发流式大数据多维度准实时统计的方法,其特征在于:当取增量数据消耗硬件成本更高时,使用所有维度统一增量数据集方式统计,在数据统计耗硬件成本更高时,使用维度独立增量数据集方式统计。
3.根据权利要求2所述的PostgreSQL高并发流式大数据多维度准实时统计的方法,其特征在于:使用所有维度统一增量数据集方式统计,所有统计维度表对应同一份流水表增量状态表和同一份函数增量状态表。
4.根据权利要求2所述的PostgreSQL高并发流式大数据多维度准实时统计的方法,其特征在于:使用所有维度统一增量数据集方式统计,每份统计维度表均对应有一份流水表增量状态表和同一份函数增量状态表。
5.根据权利要求2所述的PostgreSQL高并发流式大数据多维度准实时统计的方法,其特征在于:在所述子步骤二中,在获取统计维度信息前,系统对均获取一个用于确保统计逻辑数据的一致性的adv锁,在所述子步骤九中增加释放adv锁的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410207285.6A CN104166666B (zh) | 2014-05-15 | 2014-05-15 | PostgreSQL高并发流式大数据多维度准实时统计的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410207285.6A CN104166666B (zh) | 2014-05-15 | 2014-05-15 | PostgreSQL高并发流式大数据多维度准实时统计的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104166666A true CN104166666A (zh) | 2014-11-26 |
CN104166666B CN104166666B (zh) | 2017-03-08 |
Family
ID=51910481
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410207285.6A Expired - Fee Related CN104166666B (zh) | 2014-05-15 | 2014-05-15 | PostgreSQL高并发流式大数据多维度准实时统计的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104166666B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326470A (zh) * | 2016-08-31 | 2017-01-11 | 无锡雅座在线科技发展有限公司 | 流式大数据的处理方法和装置 |
CN114116842A (zh) * | 2021-11-25 | 2022-03-01 | 上海柯林布瑞信息技术有限公司 | 多维医疗数据实时获取方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101960454A (zh) * | 2008-01-07 | 2011-01-26 | 奥里·赫恩施塔特 | 多维数据库体系 |
CN102467559A (zh) * | 2010-11-19 | 2012-05-23 | 金蝶软件(中国)有限公司 | 多层次多维度的数据属性分析方法及装置 |
CN103412933A (zh) * | 2013-08-20 | 2013-11-27 | 南京物联网应用研究院有限公司 | 一种云搜索平台 |
-
2014
- 2014-05-15 CN CN201410207285.6A patent/CN104166666B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101960454A (zh) * | 2008-01-07 | 2011-01-26 | 奥里·赫恩施塔特 | 多维数据库体系 |
CN102467559A (zh) * | 2010-11-19 | 2012-05-23 | 金蝶软件(中国)有限公司 | 多层次多维度的数据属性分析方法及装置 |
CN103412933A (zh) * | 2013-08-20 | 2013-11-27 | 南京物联网应用研究院有限公司 | 一种云搜索平台 |
Non-Patent Citations (1)
Title |
---|
龙晓泉等: "《实时数据仓库的一种实现方法》", 《计算机系统应用》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326470A (zh) * | 2016-08-31 | 2017-01-11 | 无锡雅座在线科技发展有限公司 | 流式大数据的处理方法和装置 |
CN114116842A (zh) * | 2021-11-25 | 2022-03-01 | 上海柯林布瑞信息技术有限公司 | 多维医疗数据实时获取方法、装置、电子设备及存储介质 |
CN114116842B (zh) * | 2021-11-25 | 2023-05-19 | 上海柯林布瑞信息技术有限公司 | 多维医疗数据实时获取方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104166666B (zh) | 2017-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2929467B1 (en) | Integrating event processing with map-reduce | |
US7779393B1 (en) | System and method for efficient verification of memory consistency model compliance | |
US9098652B2 (en) | Partitioning and parallel processing of a virtual prototype simulation of a hardware design | |
US10198346B1 (en) | Test framework for applications using journal-based databases | |
US10133767B1 (en) | Materialization strategies in journal-based databases | |
CN106803799A (zh) | 一种性能测试方法和装置 | |
US20170140032A1 (en) | Method & apparatus for asynchroinzed de-serialization of e-r model in a huge data trunk | |
US10394983B2 (en) | Method to automatically generate and promote timing constraints in a Synopsys Design Constraint format | |
CN104166666A (zh) | PostgreSQL高并发流式大数据多维度准实时统计的方法 | |
CN111241199A (zh) | 基于区块链的环境数据存储方法及终端 | |
CN114443615A (zh) | 数据库管理系统、相关装置、方法和介质 | |
CN101561833B (zh) | 专用指令集处理器的设计方法 | |
CN111046062B (zh) | 一种小程序数据获取方法、智能终端及存储介质 | |
CN108133005A (zh) | 一种基于内存数据库的环境模型模拟方法、终端设备及存储介质 | |
CN110928705B (zh) | 面向高性能计算应用的通信特征分析方法及系统 | |
Yang et al. | Validating scheduling transformation for behavioral synthesis | |
Helmstetter et al. | Fast and accurate TLM simulations using temporal decoupling for FIFO-based communications | |
CN110968342A (zh) | 一种版本比对方法、装置及系统 | |
CN111158994A (zh) | 一种压测性能测试方法及装置 | |
CN117573199B (zh) | 一种模型差异对比分析方法、装置、设备及介质 | |
Knüpfer | Advanced memory data structures for scalable event trace analysis | |
Ahmed | Relyzer+: An open source tool for application-level soft error resiliency analysis | |
CN114328214B (zh) | 报表软件的接口测试用例的提效方法、装置、计算机设备 | |
CN113641572B (zh) | 一种基于sql的海量大数据计算开发的调试方法 | |
US11126532B1 (en) | Method and apparatus for a parallel, metadata-based trace analytics processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 310000 room 821, building 1, Xinjun building, 330 Internet of things street, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province Patentee after: Hangzhou Sky-mobi Technology Co., Ltd. Address before: 10, 310013, The Union Buildings, No. 2, Bauhinia Road, Hangzhou, Zhejiang, Xihu District Patentee before: Hangzhou Sky-mobi Technology Co., Ltd. |
|
CP02 | Change in the address of a patent holder | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170308 Termination date: 20210515 |
|
CF01 | Termination of patent right due to non-payment of annual fee |