大数据应用之双色球算奖平台总体设计数据规模估算篇

2023-11-01 06:30

本文主要是介绍大数据应用之双色球算奖平台总体设计数据规模估算篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大数据应用之双色球算奖平台总体设计数据规模估算篇

作者:张子良

版权所有,转载请注明出处

引子:什么才算大数据?

  自从写了上一篇《大数据应用之双色球算奖平台总体设计大纲篇一》,受到许多园友的关注和指导,在此表示感谢,尤其是园友个人知识管理给出的一个评论,让我深思,原文如下“双色球算奖这么简单的活,也称大数据。先生:不是数据多,叫大数据。双色球算奖,Oracle数据库的索引,1分钟内就算完。关键是人家不想这么快”。话不太好听,尤其是称我为先生那句,但却发人深思,是啊:到底什么是大数据呢?选择双色球算奖作为大数据应用的切入点是否合适呢?然后就是让我诧异的1分钟理论很是吓了我一跳的。

  说一下自己的理解吧,大数据是指那些很大的数据集,大到传统的数据库软件工具已经无法采集、存储、管理和分析。大数据既有存储规模方面的考虑,同时也涉及到分析计算规模的考虑。之所以选择双色球算奖平台作为大数据应用的案例,也正是考虑到这两个方面的问题。其一,历史投注明细信息的存储,如果采用传统的关系型数据库,肯定是不合适,无论是分区还是分表,都无法解决根本问题。其二、当前投注规模的情况下,进行快速算奖,所要进行的计算规模肯定也不是一个传统方式能轻易解决的问题。

  当然关于具体多大规模的数据才算大数据,目前为止尚未有一个官方的界定阈值的存在,规定超过多少算大数据,低于多少不算大数据的说法。既然没有标准,也就无所谓是与不是,见仁见智,不一而足。

一、概述 业务规则

 双色球奖项设置和兑奖规则如下所示:

“双色球”彩票以投注者所选单注投注号码(复式投注按所覆盖的单注计)与当期开出中奖号码相符的球色和个数确定中奖等级: 

一等奖:7个号码相符(6个红色球号码和1个蓝色球号码)(红色球号码顺序不限,下同) 

二等奖:6个红色球号码相符; 

三等奖:5个红色球号码和1个蓝色球号码相符; 

四等奖:5个红色球号码或4个红色球号码和1个蓝色球号码相符; 

五等奖:4个红色球号码或3个红色球号码和1个蓝色球号码相符; 

六等奖:1个蓝色球号码相符(有无红色球号码相符均可)。

二、数据对象分析

   既然是数据规模的评估,我们要解决的首先就是数据对象的确认。针对双色球算奖平台,我们需要关注那些数据对象呢?按照矛盾论的观点,事物的矛盾分为主要矛盾和次要矛盾,其中主要矛盾起决定性作用。所以在这里我们只考虑双色球算奖平台涉及的最主要的数据对象,而不考虑其他细节问题。

数据对象主要包括以下几个方面:

(1)销量统计:包括全国、分省市、销售网点的销量汇总统计数据。

(2)中奖统计:包括全国、分省市、销售网点的各奖项的中奖注数汇总统计数据。

(3)开奖号码:包括每一期开奖号码信息。

(4)奖金信息:包括每一期次各奖项奖金多少的统计数据。

(5)选注明细:当前期次选注明细数据。

(6)选注历史明细:历史期次选注明细数据。

(7)中奖选注明细:当前期中奖选注明细数据。

(8)中奖选注历史明细:历史中奖选注明细数据。

  如果从存储规模和计算规模两个维度分别考虑,针对销量统计、中奖统计和奖金信息,我们需要关注的是计算规模;针对选注明细、选注历史我们要关注的则是存储规模。

三、存储规模评估  

3.1 数据结构

             针对双色球算奖平台而言,所有需要存储的数据中,选注历史明细信息的存储是规模最大的,根据目前双色球每一期次的平均销量来看,需要存储的每一期次选注明细信息约为2亿条记录。每一选注需要存储的信息包括:站号、操作员、流水号、销售期、有效期、销售时间、金额、投注明细(多条)、开奖时间和附加码。具体如下图所示:

 

为简化我们的分析,我们将复式投注和胆拖投注明细拆分成单式投注进行存储,具体数据结构如下:

序号

字段名称

类型

长度

1

期次

Char

7(YYYYMMN)

2

站号

Char

8(全国唯一)

3

流水号

Char

6(右侧补零)

4

Red1

char

2(左侧补零)

5

Red2

Char

2(左侧补零)

6

Red3

Char

2(左侧补零)

7

Red4

Char

2(左侧补零)

8

Red5

Char

2(左侧补零)

9

Red6

Char

2(左侧补零)

10

Blue

char

2(左侧补零)

按照简化后的数据存储,单注明细需要的存储空间=35字节,每一期次需要存储的绝对数据规模=200000000*35/1024/1024=6675.7M。如果单从这个角度来看,数据存储规模还真的不算大。但是考虑到RDMS表的存储和访问,无论是采用分区,还是分表,能够实现的其实只是把数据塞进去,至于,读出来,如何读出来则将会是一个悲剧。不要告诉我用索引,用索引需要付出的代价是什么,我想有更多的人比我清楚。

3.2 测试环境

备注

操作系统

Windows XP

 

数据库

Sybase15.7

 

CPU

T5550

双核1.83

内存

2G

 

硬盘

200G

 

3.3 测试结果-无索引插入

轮次

插入记录数

耗时

第一轮

200w

15分03秒

第二轮

200w

18分05秒

第三轮

200w

19分04秒

3.4 数据库空间-1000w记录数据库空间

四、计算规模评估

  这部分设计到具体采用的算法,但是无论采用何种算法,2亿次规模的数据遍历是必须的,之前园友提到的方法其实很好,根据开奖号码,设计中奖选注表,利用待兑奖数据进行组合ID比较,然后得出目标选注。然后进行奖项层次的细分,思路很好,可是有没有想到过2亿次乘以目标中奖选注表项个数的计算规模有是多少次呢。如果采用SQL的方式,时间呢,又需要多少的时间?有数据有真相,正在跑相关的测试案例。至少目前看到的结果,很不理想。

正在跑测试数据,持续更新中,有图有真相,有数据才有说服力!敬请关注、支持!求推荐!

 

转载于:https://www.cnblogs.com/hadoopdev/p/3154986.html

这篇关于大数据应用之双色球算奖平台总体设计数据规模估算篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321106

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池