一种用于大数据随机抽样的方法和系统的制作方法

文档序号:8905285阅读:457来源:国知局
一种用于大数据随机抽样的方法和系统的制作方法
【技术领域】
[0001]本公开涉及一种随机抽样方法和系统,具体地,涉及一种用于大数据随机抽样的方法和系统。
【背景技术】
[0002]在做市场调查的时候,需要从一个很大的样本库中随机筛选出一定量的样本来做调查,即需要随机抽样调查。存在众多分布式存储系统。例如,HBase是一个no-sql (不支持sql条件查询)的key-value (键值)分布式存储系统,在大数据存取的应用场景中表现十分优异。
[0003]当我们在进行随机抽样调查时,如果样本库的量级达到了亿级别,我们可以选择具有海量存储能力的数据库(例如HBase)来存取数据。从而实现高效的随机抽样,得到所需要的样本来做调查。
[0004]现有技术中存在多种随机抽样的方案。第一种方案是将大数据存储在传统的关系型数据库中,利用分库分表的方式,将数据离散存储在不同库和表中。需要随机抽样时,根据所选的样本数据,通过先把所有样本数据读取出来,然后针对每个样本,通过随机函数(Random)生成一个随机数,如果随机数匹配一个值,就采用这个样本,以这种方式来达到随机抽样的效果。该方案存在以下缺陷:传统的数据库就需要用到分库分表(将数据分块存储到不同的库以及不同的表中)等技术,当数据量上亿后,其数据存取量大,可维护性低,扩展性低,技术难度高。
[0005]第二种方案是将数据存储到nosql的分布式存储系统(例如HBase)中,需要随机抽样时,获取所有满足条件的样本,然后进行概率抽样(同关系型数据库方法相同)。该方案利用了存储系统自身的分布式优势,在存取方面获得良好效果。但该方案存在以下缺陷:由于需要扫描所有样本数据,所以当样本库中的样本量达到亿级别时,进行一次随机抽样很耗时。

【发明内容】

[0006]基于以上对现有技术方案的描述,在现有技术中存在需要提高从大数据样本中的抽样的效率的技术问题。
[0007]具体地,根据本发明的第一方面,提供了一种数据库中的随机抽样方法,所述方法包括以下步骤:步骤a:将多个记录分为多个组;步骤b:随机抽取所述多个组中的一个或多个组;以及步骤c:并在所随机抽取的所述一个或多个组中,随机抽取要抽取数量的记录。
[0008]在一个实施例中,所述多个组中的每一个组内记录的数量是相等的。
[0009]在一个实施例中,步骤a还包括:为所述多个组中的每一个组中的特定记录创建索引。
[0010]在一个实施例中,所述特定记录是所述多个组中的每一个组中的第一个记录。[0011 ] 在一个实施例中,创建索引包括将所述索引存放在数据库。
[0012]在一个实施例中,创建所述索引的周期是根据任务执行的周期确定的。
[0013]在一个实施例中,步骤c还包括:基于要抽取的记录的数量,产生第一随机数;对所随机抽取的所述一个或多个组中的数据进行逐一扫描;对于每一个所扫描的数据,基于要抽取的记录的数量,产生第二随机数;如果所述第一随机数等于所述第二随机数,则抽取所述记录。
[0014]在一个实施例中,基于要抽取的记录的数量产生第一随机数还基于所述多个记录的数量;基于要抽取的记录的数量产生第二随机数还基于所述多个记录的数量。
[0015]在一个实施例中,基于所述要抽取的记录的数量和所述多个记录的数量产生第一随机数是随机产生小于等于所述多个记录的数量除以要抽取的记录的数量的第一随机数;基于所述要抽取的记录的数量和所述多个记录的数量产生第二随机数是随机产生小于等于所述多个记录的数量除以要抽取的记录的数量的第二随机数。
[0016]根据本发明的第二方面,提供了一种用于数据库中的随机抽样系统,所述系统包括:分组装置,被配置为:将多个记录分为多个组;随机抽取装置,被配置为:随机抽取所述多个组中的一个或多个组,并在所随机抽取的所述一个或多个组中,随机抽取要抽取数量的记录。
[0017]在一个实施例中,所述多个组中的每一个组内记录的数量是相等的。
[0018]在一个实施例中,所述分组装置还被配置为:为所述多个组中的每一个组中的特定记录创建索引。
[0019]在一个实施例中,所述特定记录是所述多个组中的每一个组中的第一个记录。
[0020]在一个实施例中,创建索引包括将所述索引存放在数据库。
[0021]在一个实施例中,创建所述索引的周期是根据任务执行的周期确定的。
[0022]在一个实施例中,所述随机抽取装置,被配置为:基于要抽取的记录的数量,产生第一随机数;对所随机抽取的所述一个或多个组中的数据进行逐一扫描;对于每一个所扫描的数据,基于要抽取的记录的数量,产生第二随机数;如果所述第一随机数等于所述第二随机数,则抽取所述记录。
[0023]在一个实施例中,基于要抽取的记录的数量产生第一随机数还基于所述多个记录的数量;基于要抽取的记录的数量产生第二随机数还基于所述多个记录的数量。
[0024]在一个实施例中,基于所述要抽取的记录的数量和所述多个记录的数量产生第一随机数是随机产生小于等于所述多个记录的数量除以要抽取的记录的数量的第一随机数;基于所述要抽取的记录的数量和所述多个记录的数量产生第二随机数是随机产生小于等于所述多个记录的数量除以要抽取的记录的数量的第二随机数。
[0025]根据本发明的第三方面,提供了一种计算机可读存储介质,所述计算机可读存储介质包括由处理器执行的指令,所述指令被处理器执行以使所述处理器实现根据所述第一方面中所述的方法。
[0026]根据本公开,通过对大数据创建索引,提升抽样效率,实现大数据随机抽样。
【附图说明】
[0027]图1是示出了根据本公开实施例的HBase的一个示例。
[0028]图2是示出了根据本公开实施例的一种数据库中的随机抽样方法。
[0029]图3是示出了根据本公开实施例的数据库中的随机抽样方法中的分组步骤。
[0030]图4是示出了根据本公开实施例的数据库中的随机抽样方法中的随机抽样步骤。
[0031]图5是示出了根据本公开实施例的一种用于数据库中的随机抽样系统。
【具体实施方式】
[0032]现在结合图1和图2描述本公开的随机抽样方法的一个实施例。在众多分布式存储系统中,HBase是适用于大数据存取的应用场景的一个示例。HBase是一个分布式的键值存取数据库,其不支持sql条件查询,但能通过主键查询,或者按主键的范围查询。
[0033]图1是示出了根据本公开的实施例的HBase的一个示例。如图1所示,主键为身份证号,主键和数据库中的主键意义一样。列簇是可以看做是一个管理单元,把相关性比较紧密的几列放在一起,以方便存取。在本实施例中,仅存在一个列簇。本公开可以包括更多个列簇的实施例。列簇下方的列类似于数据库中的字段,只是HBase可以动态添加一列。每一行数据代表了一个样本数据。在本实施例中,数据库的表中存在有I亿条数据。
[0034]图2是示出了根据本公开的实施例的一种数据库中的随机抽样方法。在步骤S201中,将多个记录分为多个组。然后,在步骤S202,随机抽取多个组中的一个或多个组。在所随机抽取的一个或多个组中,随机抽取要抽取数量的记录(步骤S203)。
[0035]以下描述根据本公开的一种数据库中的随机抽样方法的另一实施例。本实施例的背景是常见的一种调查,该调查需要从I亿人中随机抽出1000人以参与此调查。在本实施例中,假定I亿人的姓名和/或联系方式等信息都已经按照如图1所示的数据项形式(包括主键和列簇)保存在分布式存储系统(例如HBase)中。
[0036]图3是示出了根据本公开的实施例的数据库中的随机抽样方法中的分组步骤。首先,将所有数据项分为数量相等的多个组,每一个组都包含100万条记录,如步骤S301所示。然后,为多个组中的每一个组中的特定记录创建索引。在本实施例中,为该样本库中的数据每100万记录中的第一个记录创建索引(步骤S302),并将该索引存放在数据库中(步骤S303)。即扫描到第100万个记录的时候,取出主键,并记录下主键与第100万个记录之间的映射关系。然后接着扫描到第200万个记录(步骤305),并取出主键然后记录该主键和第200万个记录之间的映射。依次类推,直到对所有I亿条数据中的每100万条记录的主键进行扫描为止(步骤304)。上述创建索引的周期是根据任务执行的周期确定的,即创建索引的步骤可以根据数据的变更情况来确定。例如,如果每一个月对数据进行一次更新,则可以每一个月执行一次创建索引的任务。
[0037]图4是示出了根据本公开的实施例的数据库中的随机抽样方法中的随机抽样步骤。本实施例中的数据库中存在100个组,每个组包括100万条记录。首先,随机抽取多个组中的一个组。具体地,在步骤S401中,随机抽取多个组中的一个组。随机抽取这100个组中的一个(既获取得到主键的开始和结束范围,如随机到第6个组,则主键范围就是第五个100万个记录的主键到第六个100万个记录的主键)。由于是随机到某个百万区间,所以对每个样本来说,被选到的概率是一样的。然后,在所随机抽取的一个组中,随机抽取要抽取数量的记录。具体抽取方法可以是:在步骤S402中,产生第一随机数。然后,对所随机抽取的一个组中的数据进行逐一扫描(步骤S403)。接着,在步骤S404中,对于每一个所扫描的数据,产生第二随机数。判断如果第一随机数等于第二随机数(步骤S405中是),则抽取记录(步骤S406)。在以上步骤中,产生第一随机数是随机产生小于等于多个记录的数量除以要抽取的记录的数量的第一随机数;产生第二随机数是随机产生小于等于多个记录的数量除以要抽取的记录的数量的第二随机数。具体地,在本实施例中,根据我们需要抽样
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1