一种网络投票方法和装置制造方法

文档序号:6675277阅读:152来源:国知局
一种网络投票方法和装置制造方法
【专利摘要】本发明公开了一种网络投票方法和装置,属于互网络投票领域。所述方法包括:根据投票配置总表确定当前正在进行的投票活动;在投票活动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的记录并加载到内存中;接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元组记录的集合;判断内存中是否存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID;定期将内存中的投票选项票数表写入到数据库中。本发明通过将投票活动ID对应的记录加载到内存,这种内存缓存的方法能有效缓解数据库的实时写入操作压力,同时避免了数据库造成的系统瓶颈,进而满足同时进行多场次多类别的大规模网络投票活动的实时需求。
【专利说明】一种网络投票方法和装置

【技术领域】
[0001] 本发明涉及网络应用【技术领域】,特别涉及一种网络投票方法和装置。

【背景技术】
[0002] 投票作为一种征集群众意向的方法,历来为人们所广泛使用。而借助于互联网技 术实现的网络投票,也为投票这种常见的社会行为提供了一种全新的操作模式。网络投票 解决了人们足不出户就可以投票的问题,票务统计方面计算机也代替了人们原始的手工算 票,给投票带来了便利。
[0003] 现有技术中,服务器端设置投票活动系统,投票活动系统中的投票活动数据存储 在数据库中,投票活动数据包括投票活动名称、投票活动选项、参与投票的投票人、投票人 所投票数等,数据库里的数据根据投票活动需求实时写入。
[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005] 在多场次的大规模网络投票活动中,由于所需实时写入的数据量大,且数据库写 入操作的速度有限制,服务器端难以支持投票活动的实时需求,造成了投票操作迟缓的现 象。


【发明内容】

[0006] 为了解决现有技术中网络投票技术中数据库的写入操作速度难以满足同时进行 多场次的大规模网络投票活动的实时需求的问题,本发明实施例提供了一种网络投票方法 和装置。所述技术方案如下:
[0007] -方面,本发明实施例提供了一种网络投票方法,所述方法包括:
[0008] 根据投票配置总表确定当前正在进行的投票活动,所述投票活动总表包括投票活 动ID和与所述投票活动ID对应的起始时间;
[0009] 在投票活动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的 记录并加载到内存中,所述投票活动ID对应的记录包括投票选项ID和投票选项;
[0010] 接收投票人发送的投票信息,并从所述投票信息中解析出四元组记录或四元组记 录的集合,所述四元组记录包括投票活动ID、投票人ID、投票选项ID和票数;
[0011] 判断所述内存中是否存在所述四元组记录或四元组记录的集合中的投票活动ID、 投票选项ID ;
[0012] 如果所述内存中存在所述四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,则判断投票选项票数表中是否存在所述投票活动ID和投票选项ID对应的记录,所 述投票选项票数表包括投票活动ID、投票选项ID以及票数;
[0013] 如果所述投票选项票数表中不存在所述投票活动ID和投票选项ID对应的记录, 则将所述四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入所述 投票选项票数表中;
[0014] 如果投票选项票数表中存在所述投票活动ID和投票选项ID对应的记录,则将所 述四元组记录或四元组记录的集合中的票数累加到所述投票选项票数表中的票数上;
[0015] 定期将内存中的所述投票选项票数表写入到数据库中。
[0016] 具体地,所述根据投票配置总表确定当前正在进行的投票活动,包括:
[0017] 比较当前时间与所述投票活动配置总表中各个所述投票活动ID对应的起止时 间;
[0018] 如果所述当前时间处于所述投票活动配置总表中一个或多个起止时间内,则输出 所述投票活动配置总表中一个或多个起止时间对应的所述投票活动ID。
[0019] 具体地,所述方法还包括:
[0020] 将所述投票选项票数表中的票数从高到低排序,并输出排序结果。
[0021] 进一步地,所述将所述投票选项票数表中的票数从高到低排序,包括:
[0022] 接收定时线程发送的信号;
[0023] 当所述定时线程的信号指示达到预定时间间隔时,将所述投票选项票数表中的票 数从高到低排序;或者,
[0024] 当所述投票选项票数表中任一所述投票选项的票数改变时,将所述投票选项票数 表中的票数从高到低排序。
[0025] 具体地,所述方法还包括:
[0026] 每秒将所述内存中的所述投票选项票数表写入非关系型的数据库中进行备份。
[0027] 另一方面,本发明实施例还提供了一种网络投票装置,所述装置包括:
[0028] 确定模块,用于根据投票配置总表确定当前正在进行的投票活动,所述投票活动 总表包括投票活动ID和与所述投票活动ID对应的起始时间;
[0029] 第一处理模块,用于在投票活动与选项映射表中查找当前正在进行的投票活动的 投票活动ID对应的记录并加载到内存中,所述投票活动ID对应的记录包括投票选项ID和 投票选项;
[0030] 第二处理模块,用于接收投票人发送的投票信息,并从所述投票信息中解析出四 元组记录或四元组记录的集合,所述四元组记录包括投票活动ID、投票人ID、投票选项ID 和票数;
[0031] 第一判断模块,用于判断所述内存中是否存在所述四元组记录或四元组记录的集 合中的投票活动ID、投票选项ID ;
[0032] 第二判断模块,用于在所述内存中存在所述四元组记录或四元组记录的集合中的 投票活动ID、投票选项ID时,判断投票选项票数表中是否存在所述投票活动ID和投票选项 ID对应的记录,所述投票选项票数表包括投票活动ID、投票选项ID以及票数;
[0033] 第三处理模块,用于在所述投票选项票数表中不存在所述投票活动ID和投票选 项ID对应的记录时,将所述四元组记录或四元组记录的集合中的投票活动ID、投票选项ID 和票数插入所述投票选项票数表中;
[0034] 在投票选项票数表中存在所述投票活动ID和投票选项ID对应的记录时,将所述 四元组记录或四元组记录的集合中的票数累加到所述投票选项票数表中的票数上;
[0035] 第四处理模块,用于定期将内存中的所述投票选项票数表写入到数据库中。
[0036] 具体地,所述确定模块包括:
[0037] 比较单元,用于比较当前时间与所述投票活动配置总表中各个所述投票活动ID 对应的起止时间;
[0038] 输出单元,用于当所述当前时间处于所述投票活动配置总表中一个或多个起止时 间内时,输出所述投票活动配置总表中一个或多个起止时间对应的所述投票活动ID。
[0039] 具体地,所述装置还包括:
[0040] 第五处理模块,用于将所述至少一个投票活动中的所述投票选项所获得的票数从 高到低排序,并输出排序结果。
[0041] 进一步地,所述第五处理模块包括:
[0042] 接收单元,用于接收定时线程发送的信号;
[0043] 处理单元,用于当所述定时线程的信号指示达到预定时间间隔时,将所述投票选 项票数表中的票数从高到低排序;或者,
[0044] 当所述投票选项票数表中任一所述投票选项的票数改变时,将所述投票选项票数 表中的票数从高到低排序。
[0045] 具体地,所述装置还包括:
[0046] 第六处理模块,用于每秒将所述内存中的所述投票选项票数表写入非关系型的数 据库中进行备份。
[0047] 本发明实施例提供的技术方案带来的有益效果是:
[0048] 通过先根据投票配置总表确定当前正在进行的投票活动;在投票活动与选项映射 表中查找当前正在进行的投票活动的投票活动ID对应的记录并加载到内存中;然后接收 投票人发送的投票信息,并从投票信息中解析出四元组记录或四元组记录的集合;其次,判 断内存中是否存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID,若存在 四元组记录或四元组记录的集合中的投票活动ID、投票选项ID,则判断投票选项票数表中 是否存在投票活动ID和投票选项ID对应的记录,若存在,则将四元组记录或四元组记录的 集合中的票数累加到投票选项票数表中的票数上,若不存在,则将四元组记录或四元组记 录的集合中的投票活动ID、投票选项ID和票数插入投票选项票数表中;通过设置投票配置 总表、投票活动与选项映射表和投票选项票数表以及之间的对应关系,可以方便对于投票 活动数据的读写,从而可以满足多场次多类别的大规模网络投票活动的读写要求;另外,将 投票活动ID对应的记录加载到内存,这种内存缓存的方法能有效缓解数据库的实时写入 操作压力,同时避免了数据库造成的系统瓶颈,进而满足同时进行多场次多类别的大规模 网络投票活动的实时需求;最后定期将内存中的投票选项票数表写入到数据库中,避免了 因程序崩溃或断电等异常情况造成的内存数据丢失,保证了数据安全。

【专利附图】

【附图说明】
[0049] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他 的附图。
[0050] 图1是本发明实施例提供的应用场景图;
[0051] 图2是本发明实施例一提供的一种网络投票方法流程图;
[0052] 图3是本发明实施例二提供的一种网络投票方法流程图;
[0053] 图4是本发明实施例三提供的一种网络投票装置的结构示意图;
[0054] 图5是本发明实施例四提供的一种网络投票装置的结构示意图。

【具体实施方式】
[0055] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。
[0056] 为了便于实施例的描述,下面先简单介绍一下本发明中实施例的应用场景。参见 图1,该场景中包括客户端101,客户端101可以是个人电脑、移动终端等设备。客户端101 中设有可以进行网络投票的应用,用户可以采用该应用进行网络投票。客户端101与服务 器102通过网络连接。服务器102接收用户通过客户端101发送的投票信息,并进行验票 统计等功能。
[0057] 需要说明的是,以上所述的设备种类及连接方式仅为举例,本发明对此不作限制。
[0058] 实施例一
[0059] 本发明实施例提供了一种网络投票方法,适用于网络投票服务器,参见图2,该方 法流程包括:
[0060] 步骤S11,根据投票配置总表确定当前正在进行的投票活动,该投票活动总表包括 投票活动ID和与投票活动ID对应的起始时间。
[0061] 具体地,每个投票活动对应有唯一的投票活动ID,投票配置总表存储在服务器中。
[0062] 步骤S12,在投票活动与选项映射表中查找当前正在进行的投票活动的投票活动 ID对应的记录并加载到内存中,该投票活动ID对应的记录包括投票选项ID和投票选项。
[0063] 具体地,投票活动ID和投票选项ID唯一确定一个投票选项。对于不同的投票活 动而言,投票选项可以是人,例如,在选秀投票活动中参与者可以对他所喜爱的选秀选手进 行投票;也可以是纯粹的问题,例如,在意见征集投票活动中参与者可以对他所关注的问题 进行投票。
[0064] 具体地,投票活动与选项映射表用于存储投票活动与该投票活动选项的对应关系 (即映射关系),该投票活动与选项映射表存储在服务器中。
[0065] 具体地,投票活动ID对应的记录加载到内存中,采用了内存缓存的方法。将数据 先存储在内存中,然后定期直接写入数据库,能有效缓解因频繁写入数据库操作给数据库 带来的压力。
[0066] 进一步地,投票活动ID对应的记录还可以包括投票活动类型,该投票活动类型包 括单选型和多选型,单选型是投票人在参与的投票活动中只能选择一个投票选项进行投 票;多选型是投票人在参与的投票活动中可以选择至少一个投票选项进行投票。
[0067] 步骤S13,接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元 组记录的集合,该四元组记录包括投票活动ID、投票人ID、投票选项ID和票数。
[0068] 具体地,投票人ID包括用户身份标识和客户端地址中的至少一个。
[0069] 在一种实现方式中,投票人可以在投票系统中进行注册,登陆投票系统参与投票 活动,投票人以自身的用户名标识自己,投票人根据投票活动的信息中的投票活动ID,选择 要参与的投票活动。在另一种实现方式中,投票人还可以采用匿名方式完成投票,投票人以 自身的IP地址或MAC地址标识自己。服务器端可以通过设置实现,注册投票人和匿名投票 人可以参与的投票活动的等级不同,注册投票人可以参与的投票活动的等级高于匿名投票 人,即注册投票人相较于匿名投票人可以参与更多的投票活动。
[0070] 对于注册的投票人来说,投票人注册用户后会有一个唯一的用户名,投票人凭借 这个用户名参与投票活动,投票系统对每个用户名的投票活动都有相应的规定限制(例 如,每个用户身份在同一个投票活动中只能投出规定数量的选票),防止投票人的刷票行 为。
[0071] 另外,在默认情况下,投票人对于所选择的投票选项只能投一票。因此,在这种默 认情况下,投票信息中也可以不携带票数选项。
[0072] 具体地,根据投票信息,在网络投票服务器中设置投票选项票数表和投票人票数 表,通过投票选项票数表和投票人票数表统计投票选项票数和投票人票数。由于参与网络 投票的投票人数可能会很多,可以在投票人票数表上进行分表操作。例如,一般的数据库单 表可以高效支撑百万以上的数据集,分十张表,就可以支持千万级的投票人规模。
[0073] 步骤S14,判断内存中是否存在四元组记录或四元组记录的集合中的投票活动 ID、投票选项ID。
[0074] 如果内存中存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID, 则执行步骤S15。如果内存中不存在四元组记录或四元组记录的集合中的投票活动ID、投 票选项ID,则四元组记录或四元组记录的集合为无效数据,相应的将此无效数据删除。
[0075] 步骤S15,判断投票选项票数表中是否存在投票活动ID和投票选项ID对应的记 录,投票选项票数表包括投票活动ID、投票选项ID以及票数。
[0076] 如果投票选项票数表中存在投票活动ID和投票选项ID对应的记录,则执行步骤 S16 ;如果投票选项票数表中不存在投票活动ID和投票选项ID对应的记录,则执行步骤 S17。
[0077] 步骤S16,将四元组记录或四元组记录的集合中的票数累加到投票选项票数表中 的票数上。
[0078] 步骤S17,将四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票 数插入投票选项票数表中。
[0079] 步骤S18,定期将内存中的投票选项票数表写入到数据库中。
[0080] 具体地,这里将存储在内存里的投票选项票数表定期写入数据库中,可以采用成 组提交技术,再配合步骤S12中采用的内存缓存技术,能更有效减缓因频繁写入数据库操 作给数据库带来的压力,使得数据库操作不成为投票系统的瓶颈。
[0081] 此外,为防止程序崩溃造成内存缓存丢失,可以采用非关系型的数据库(Not Only SQL,简称"NoSQL"),作为内存数据备份。另外,将数据写入内存时,可以使用mmap技术进 行数据持久化,减少故障的几率。
[0082] 本发明实施例通过先根据投票配置总表确定当前正在进行的投票活动;在投票活 动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的记录并加载到内存 中;然后接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元组记录的 集合;其次,判断内存中是否存在四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,若存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID,则判断投 票选项票数表中是否存在投票活动ID和投票选项ID对应的记录,若存在,则将四元组记录 或四元组记录的集合中的票数累加到投票选项票数表中的票数上,若不存在,则将四元组 记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入投票选项票数表中;通 过设置投票配置总表、投票活动与选项映射表和投票选项票数表以及之间的对应关系,可 以方便对于投票活动数据的读写,从而可以满足多场次多类别的大规模网络投票活动的读 写要求;另外,将投票活动ID对应的记录加载到内存,这种内存缓存的方法能有效缓解数 据库的实时写入操作压力,同时避免了数据库造成的系统瓶颈,进而满足同时进行多场次 多类别的大规模网络投票活动的实时需求;最后定期将内存中的投票选项票数表写入到数 据库中,避免了因程序崩溃或断电等异常情况造成的内存数据丢失,保证了数据安全。
[0083] 实施例二
[0084] 本发明实施例提供了一种网络投票方法,适用于网络投票服务器,参见图3,该方 法流程包括:
[0085] 步骤S21,根据投票配置总表确定当前正在进行的投票活动,该投票活动总表包括 投票活动ID和与投票活动ID对应的起始时间。
[0086] 具体地,每个投票活动对应有唯一的投票活动ID,投票配置总表存储在服务器中。
[0087] 优选的,网络投票装置所使用的服务器采用Linux下多路复用I/O接口 select/ P〇l 1的增强版本epol 1,以及C++高性能服务器编程技术,硬件配置多核CPU,这样能加大服 务器接入层的吞吐量,提高服务器应对大规模投票的能力。
[0088] 具体地,步骤S21可以通过以下方式实现:
[0089] 步骤一,比较当前时间与投票活动配置总表中各个投票活动ID对应的起止时间。
[0090] 具体地,当前时间可以是根据服务器中的时钟模块获得的系统时间,也可以是根 据服务器中的网络模块获得的网络时间。
[0091] 步骤二,如果该当前时间处于投票活动配置总表中一个或多个起止时间内,则输 出该投票活动配置总表中一个或多个起止时间对应的投票活动ID。
[0092] 例如,当前时间为2013年2月11日12时整,活动配置总表中的一个投票活动的 起始时间为2013年2月10日0时至2013年2月16日24时,此时就能确定当前时间处于 该起止时间内,进而输出该起始时间对应的投票活动的信息。通过上述步骤,可以避免输出 过期的投票活动或者未开启的投票活动。
[0093] 步骤S22,在投票活动与选项映射表中查找当前正在进行的投票活动的投票活动 ID对应的记录并加载到内存中,该投票活动ID对应的记录包括投票选项ID和投票选项。
[0094] 具体地,投票活动ID和投票选项ID唯一确定一个投票选项。对于不同的投票活 动而言,投票选项可以是人,例如,在选秀投票活动中参与者可以对他所喜爱的选秀选手进 行投票;也可以是纯粹的问题,例如,在意见征集投票活动中参与者可以对他所关注的问题 进行投票。
[0095] 具体地,投票活动与选项映射表用于存储投票活动与该投票活动选项的对应关系 (即映射关系),该投票活动与选项映射表存储在服务器中。
[0096] 具体地,投票活动ID对应的记录加载到内存中,采用了内存缓存的方法。将数据 先存储在内存中,然后定期写入数据库,能有效缓解因频繁读写数据库操作给数据库带来 的压力。
[0097] 进一步地,投票活动ID对应的记录还可以包括投票活动类型,该投票活动类型包 括单选型和多选型,单选型是投票人在参与的投票活动中只能选择一个投票选项进行投 票;多选型是投票人在参与的投票活动中可以选择至少一个投票选项进行投票。
[0098] 步骤S23,接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元 组记录的集合,该四元组记录包括投票活动ID、投票人ID、投票选项ID和票数。
[0099] 具体地,投票人ID包括用户身份标识和客户端地址中的至少一个。
[0100] 在一种实现方式中,投票人可以在投票系统中进行注册,登陆投票系统参与投票 活动,投票人以自身的用户名标识自己,投票人根据投票活动的信息中的投票活动ID,选择 要参与的投票活动。在另一种实现方式中,投票人还可以采用匿名方式完成投票,投票人以 自身的IP地址或MAC地址标识自己。服务器端可以通过设置实现,注册投票人和匿名投票 人可以参与的投票活动的等级不同,注册投票人可以参与的投票活动的等级高于匿名投票 人,即注册投票人相较于匿名投票人可以参与更多的投票活动。
[0101] 对于注册的投票人来说,投票人注册用户后会有一个唯一的用户名,投票人凭借 这个用户名参与投票活动,投票系统对每个用户名的投票活动都有相应的规定限制(例 如,每个用户身份在同一个投票活动中只能投出规定数量的选票),防止投票人的刷票行 为。
[0102] 另外,在默认情况下,投票人对于所选择的投票选项只能投一票。因此,在这种默 认情况下,投票信息中也可以不携带票数选项。
[0103] 具体地,根据投票信息,在网络投票服务器中设置投票选项票数表和投票人票数 表,通过投票选项票数表和投票人票数表统计投票选项票数和投票人票数。由于参与网络 投票的投票人数可能会很多,可以在投票人票数表上进行分表操作。例如,一般的数据库单 表可以高效支撑百万以上的数据集,分十张表,就可以支持千万级的投票人规模。
[0104] 步骤S24,判断内存中是否存在四元组记录或四元组记录的集合中的投票活动 ID、投票选项ID。
[0105] 如果内存中存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID, 则执行步骤S25。如果内存中不存在四元组记录或四元组记录的集合中的投票活动ID、投 票选项ID,则四元组记录或四元组记录的集合为无效数据,相应的将此无效数据删除。
[0106] 步骤S25,判断投票选项票数表中是否存在投票活动ID和投票选项ID对应的记 录,投票选项票数表包括投票活动ID、投票选项ID以及票数。
[0107] 如果投票选项票数表中存在投票活动ID和投票选项ID对应的记录,则执行步骤 S26 ;如果投票选项票数表中不存在投票活动ID和投票选项ID对应的记录,则执行步骤 S27。
[0108] 步骤S26,将四元组记录或四元组记录的集合中的票数累加到投票选项票数表中 的票数上。
[0109] 步骤S27,将四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票 数插入投票选项票数表中。
[0110] 步骤S28,将投票选项票数表中的票数从高到低排序,并输出排序结果。
[0111] 具体地,步骤S28可以通过以下方式实现:
[0112] 接收定时线程发送的信号。
[0113] 当定时线程的信号指示达到预定时间间隔时,将投票选项票数表中的票数从高到 低排序;或者,
[0114] 当投票选项票数表中任一投票选项的票数改变时,将投票选项票数表中的票数从 1?到低排序。
[0115] 其中,第二种实现方式中,一旦投票活动票数改变就会进行排序,保证了排序的实 时性,通过发布实时的投票结果来吸引投票人关注投票活动,增加投票活动的关注度。
[0116] 此外,在实际应用中,还可以统计参与一个投票活动的每个投票人所投的票数,并 将各个投票人参与该投票活动所投的票数从高到低排序,可以生成投票人投票数的"土豪 榜",通过"土豪榜"来吸引投票人的关注,并参与到投票活动中来。另外,有些投票活动需要 限制每个投票人的投票总数,避免刷票行为,统计投票人的投票总数可以防止超过该限制。
[0117] 步骤S29,每秒将内存中的投票选项票数表写入非关系型的数据库中进行备份。
[0118] 具体地,为防止程序崩溃造成内存缓存丢失,可以采用NoSQL作为内存数据备份。 另外,将数据写入内存时,可以使用mmap技术进行数据持久化,减少故障的几率。
[0119] 步骤S30,定期将内存中的投票选项票数表写入到数据库中。
[0120] 具体地,这里将存储在内存里的投票选项票数表定期写入数据库中,可以采用成 组提交技术,再配合步骤S22中采用的内存缓存技术,能更有效减缓因频繁写入数据库操 作给数据库带来的压力,使得数据库操作不成为投票系统的瓶颈。
[0121] 本发明实施例通过先根据投票配置总表确定当前正在进行的投票活动;在投票活 动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的记录并加载到内存 中;然后接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元组记录的 集合;其次,判断内存中是否存在四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,若存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID,则判断投 票选项票数表中是否存在投票活动ID和投票选项ID对应的记录,若存在,则将四元组记录 或四元组记录的集合中的票数累加到投票选项票数表中的票数上,若不存在,则将四元组 记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入投票选项票数表中;通 过设置投票配置总表、投票活动与选项映射表和投票选项票数表以及之间的对应关系,可 以方便对于投票活动数据的读写,从而可以满足多场次多类别的大规模网络投票活动的读 写要求;另外,将投票活动ID对应的记录加载到内存,这种内存缓存的方法能有效缓解数 据库的实时写入操作压力,同时避免了数据库造成的系统瓶颈,进而满足同时进行多场次 多类别的大规模网络投票活动的实时需求;最后定期将内存中的投票选项票数表写入到数 据库中,避免了因程序崩溃或断电等异常情况造成的内存数据丢失,保证了数据安全。
[0122] 实施例三
[0123] 本发明实施例提供了一种网络投票装置,该装置可以与投票服务器连接,也可以 设置在投票服务器上,参见图4,该装置包括:
[0124] 确定模块301,用于根据投票配置总表确定当前正在进行的投票活动,该投票活动 总表包括投票活动ID和与投票活动ID对应的起始时间。
[0125] 具体地,每个投票活动对应有唯一的投票活动ID,投票配置总表存储在服务器中。
[0126] 优选的,网络投票装置所使用的服务器采用Linux下多路复用I/O接口 select/ P〇l 1的增强版本epol 1,以及C++高性能服务器编程技术,硬件配置多核CPU,这样能加大服 务器接入层的吞吐量,提高服务器应对大规模投票的能力。
[0127] 第一处理模块302,用于在投票活动与选项映射表中查找当前正在进行的投票活 动的投票活动ID对应的记录并加载到内存中,该投票活动ID对应的记录包括投票选项ID 和投票选项。
[0128] 具体地,投票活动ID和投票选项ID唯一确定一个投票选项。对于不同的投票活 动而言,投票选项可以是人,例如,在选秀投票活动中参与者可以对他所喜爱的选秀选手进 行投票;也可以是纯粹的问题,例如,在意见征集投票活动中参与者可以对他所关注的问题 进行投票。
[0129] 具体地,投票活动与选项映射表用于存储投票活动与该投票活动选项的对应关系 (即映射关系),该投票活动与选项映射表存储在服务器中。
[0130] 具体地,投票活动ID对应的记录加载到内存中,采用了内存缓存的方法。将数据 先存储在内存中,然后定期直接写入数据库,能有效缓解因频繁写入数据库操作给数据库 带来的压力。
[0131] 进一步地,投票活动ID对应的记录还可以包括投票活动类型,该投票活动类型包 括单选型和多选型,单选型是投票人在参与的投票活动中只能选择一个投票选项进行投 票;多选型是投票人在参与的投票活动中可以选择至少一个投票选项进行投票。
[0132] 第二处理模块303,用于接收投票人发送的投票信息,并从投票信息中解析出四元 组记录或四元组记录的集合,该四元组记录包括投票活动ID、投票人ID、投票选项ID和票 数。
[0133] 具体地,投票人ID包括用户身份标识和客户端地址中的至少一个。
[0134] 在一种实现方式中,投票人可以在投票系统中进行注册,登陆投票系统参与投票 活动,投票人以自身的用户名标识自己,投票人根据投票活动的信息中的投票活动ID,选择 要参与的投票活动。在另一种实现方式中,投票人还可以采用匿名方式完成投票,投票人以 自身的IP地址或MAC地址标识自己。服务器端可以通过设置实现,注册投票人和匿名投票 人可以参与的投票活动的等级不同,注册投票人可以参与的投票活动的等级高于匿名投票 人,即注册投票人相较于匿名投票人可以参与更多的投票活动。
[0135] 对于注册的投票人来说,投票人注册用户后会有一个唯一的用户名,投票人凭借 这个用户名参与投票活动,投票系统对每个用户名的投票活动都有相应的规定限制(例 如,每个用户身份在同一个投票活动中只能投出规定数量的选票),防止投票人的刷票行 为。
[0136] 另外,在默认情况下,投票人对于所选择的投票选项只能投一票。因此,在这种默 认情况下,投票信息中也可以不携带票数选项。
[0137] 具体地,根据投票信息,在网络投票服务器中设置投票选项票数表和投票人票数 表,通过投票选项票数表和投票人票数表统计投票选项票数和投票人票数。由于参与网络 投票的投票人数可能会很多,可以在投票人票数表上进行分表操作。例如,一般的数据库单 表可以高效支撑百万以上的数据集,分十张表,就可以支持千万级的投票人规模。
[0138] 第一判断模块304,用于判断内存中是否存在四元组记录或四元组记录的集合中 的投票活动ID、投票选项ID。
[0139] 第二判断模块305,用于在内存中存在四元组记录或四元组记录的集合中的投票 活动ID、投票选项ID时,判断投票选项票数表中是否存在投票活动ID和投票选项ID对应 的记录,投票选项票数表包括投票活动ID、投票选项ID以及票数。
[0140] 此外,如果内存中不存在四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,则四元组记录或四元组记录的集合为无效数据,相应的将此无效数据删除。
[0141] 第三处理模块306,用于投票选项票数表中不存在投票活动ID和投票选项ID对应 的记录时,将四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入投 票选项票数表中;
[0142] 在投票选项票数表中存在投票活动ID和投票选项ID对应的记录时,将四元组记 录或四元组记录的集合中的票数累加到投票选项票数表中的票数上。
[0143] 第四处理模块307,用于定期将内存中的投票选项票数表写入到数据库中。
[0144] 具体地,这里将存储在内存里的投票选项票数表定期写入数据库中,可以采用成 组提交技术,再配合内存缓存技术,能更有效减缓因频繁写入数据库操作给数据库带来的 压力,使得数据库操作不成为投票系统的瓶颈。
[0145] 此外,为防止程序崩溃造成内存缓存丢失,可以采用NoSQL作为内存数据备份。另 夕卜,将数据写入内存时,可以使用mmap技术进行数据持久化,减少故障的几率。
[0146] 本发明实施例通过先根据投票配置总表确定当前正在进行的投票活动;在投票活 动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的记录并加载到内存 中;然后接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元组记录的 集合;其次,判断内存中是否存在四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,若存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID,则判断投 票选项票数表中是否存在投票活动ID和投票选项ID对应的记录,若存在,则将四元组记录 或四元组记录的集合中的票数累加到投票选项票数表中的票数上,若不存在,则将四元组 记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入投票选项票数表中;通 过设置投票配置总表、投票活动与选项映射表和投票选项票数表以及之间的对应关系,可 以方便对于投票活动数据的读写,从而可以满足多场次多类别的大规模网络投票活动的读 写要求;另外,将投票活动ID对应的记录加载到内存,这种内存缓存的方法能有效缓解数 据库的实时写入操作压力,同时避免了数据库造成的系统瓶颈,进而满足同时进行多场次 多类别的大规模网络投票活动的实时需求;最后定期将内存中的投票选项票数表写入到数 据库中,避免了因程序崩溃或断电等异常情况造成的内存数据丢失,保证了数据安全。
[0147] 实施例四
[0148] 本发明实施例提供了一种网络投票装置,该装置可以与投票服务器连接,也可以 设置在投票服务器上,参见图5,该装置包括:
[0149] 确定模块401,用于根据投票配置总表确定当前正在进行的投票活动,该投票活动 总表包括投票活动ID和与投票活动ID对应的起始时间。
[0150] 具体地,每个投票活动对应有唯一的投票活动ID,投票配置总表存储在服务器中。
[0151] 优选的,网络投票装置所使用的服务器采用Linux下多路复用I/O接口 select/ P〇l 1的增强版本epol 1,以及C++高性能服务器编程技术,硬件配置多核CPU,这样能加大服 务器接入层的吞吐量,提高服务器应对大规模投票的能力。
[0152] 具体地,确定模块401包括:
[0153] 比较单元411,用于比较当前时间与投票活动配置总表中各个投票活动ID对应的 起止时间。
[0154] 具体地,当前时间可以是根据服务器中的时钟模块获得的系统时间,也可以是根 据服务器中的网络模块获得的网络时间。
[0155] 输出单元421,用于当该当前时间处于投票活动配置总表中一个或多个起止时间 内时,则输出该投票活动配置总表中一个或多个起止时间对应的投票活动ID。
[0156] 例如,当前时间为2013年2月11日12时整,活动配置总表中的一个投票活动的 起始时间为2013年2月10日0时至2013年2月16日24时,此时就能确定当前时间处于 该起止时间内,进而输出该起始时间对应的投票活动的信息。通过上述步骤,可以避免输出 过期的投票活动或者未开启的投票活动。
[0157] 第一处理模块402,用于在投票活动与选项映射表中查找当前正在进行的投票活 动的投票活动ID对应的记录并加载到内存中,该投票活动ID对应的记录包括投票选项ID 和投票选项。
[0158] 具体地,投票活动ID和投票选项ID唯一确定一个投票选项。对于不同的投票活 动而言,投票选项可以是人,例如,在选秀投票活动中参与者可以对他所喜爱的选秀选手进 行投票;也可以是纯粹的问题,例如,在意见征集投票活动中参与者可以对他所关注的问题 进行投票。
[0159] 具体地,投票活动与选项映射表用于存储投票活动与该投票活动选项的对应关系 (即映射关系),该投票活动与选项映射表存储在服务器中。
[0160] 具体地,投票活动ID对应的记录加载到内存中,采用了内存缓存的方法。将数据 先存储在内存中,然后定期直接写入数据库,能有效缓解因频繁写入数据库操作给数据库 带来的压力。
[0161] 进一步地,投票活动ID对应的记录还可以包括投票活动类型,该投票活动类型包 括单选型和多选型,单选型是投票人在参与的投票活动中只能选择一个投票选项进行投 票;多选型是投票人在参与的投票活动中可以选择至少一个投票选项进行投票。
[0162] 第二处理模块403,用于接收投票人发送的投票信息,并从投票信息中解析出四元 组记录或四元组记录的集合,该四元组记录包括投票活动ID、投票人ID、投票选项ID和票 数。
[0163] 具体地,投票人ID包括用户身份标识和客户端地址中的至少一个。
[0164] 在一种实现方式中,投票人可以在投票系统中进行注册,登陆投票系统参与投票 活动,投票人以自身的用户名标识自己,投票人根据投票活动的信息中的投票活动ID,选择 要参与的投票活动。在另一种实现方式中,投票人还可以采用匿名方式完成投票,投票人以 自身的IP地址或MAC地址标识自己。服务器端可以通过设置实现,注册投票人和匿名投票 人可以参与的投票活动的等级不同,注册投票人可以参与的投票活动的等级高于匿名投票 人,即注册投票人相较于匿名投票人可以参与更多的投票活动。
[0165] 对于注册的投票人来说,投票人注册用户后会有一个唯一的用户名,投票人凭借 这个用户名参与投票活动,投票系统对每个用户名的投票活动都有相应的规定限制(例 如,每个用户身份在同一个投票活动中只能投出规定数量的选票),防止投票人的刷票行 为。
[0166] 另外,在默认情况下,投票人对于所选择的投票选项只能投一票。因此,在这种默 认情况下,投票信息中也可以不携带票数选项。
[0167] 具体地,根据投票信息,在网络投票服务器中设置投票选项票数表和投票人票数 表,通过投票选项票数表和投票人票数表统计投票选项票数和投票人票数。由于参与网络 投票的投票人数可能会很多,可以在投票人票数表上进行分表操作。例如,一般的数据库单 表可以高效支撑百万以上的数据集,分十张表,就可以支持千万级的投票人规模。
[0168] 第一判断模块404,用于判断内存中是否存在四元组记录或四元组记录的集合中 的投票活动ID、投票选项ID。
[0169] 第二判断模块405,用于在内存中存在四元组记录或四元组记录的集合中的投票 活动ID、投票选项ID时,判断投票选项票数表中是否存在投票活动ID和投票选项ID对应 的记录,投票选项票数表包括投票活动ID、投票选项ID以及票数。
[0170] 此外,如果内存中不存在四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,则四元组记录或四元组记录的集合为无效数据,相应的将此无效数据删除。
[0171] 第三处理模块406,用于投票选项票数表中不存在投票活动ID和投票选项ID对应 的记录时,将四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入投 票选项票数表中;
[0172] 在投票选项票数表中存在投票活动ID和投票选项ID对应的记录时,将四元组记 录或四元组记录的集合中的票数累加到投票选项票数表中的票数上。
[0173] 第五处理模块407,用于将投票选项票数表中的票数从高到低排序,并输出排序结 果。
[0174] 具体地,第五处理模块407包括:
[0175] 接收单元417,用于接收定时线程发送的信号。
[0176] 处理单元427,用于当定时线程的信号指示达到预定时间间隔时,将投票选项票数 表中的票数从高到低排序;或者,
[0177] 当投票选项票数表中任一投票选项的票数改变时,将投票选项票数表中的票数从 1?到低排序。
[0178] 其中,第二种实现方式中,一旦投票活动票数改变就会进行排序,保证了排序的实 时性,通过发布实时的投票结果来吸引投票人关注投票活动,增加投票活动的关注度。
[0179] 此外,在实际应用中,还可以统计参与一个投票活动的每个投票人所投的票数,并 将各个投票人参与该投票活动所投的票数从高到低排序,可以生成投票人投票数的"土豪 榜",通过"土豪榜"来吸引投票人的关注,并参与到投票活动中来。另外,有些投票活动需要 限制每个投票人的投票总数,避免刷票行为,统计投票人的投票总数可以防止超过该限制。
[0180] 第六处理模块408,用于每秒将内存中的投票选项票数表写入非关系型的数据库 中进行备份。
[0181] 具体地,为防止程序崩溃造成内存缓存丢失,可以采用NoSQL作为内存数据备份。 另外,将数据写入内存时,可以使用mmap技术进行数据持久化,减少故障的几率。
[0182] 第四处理模块409,用于定期将内存中的投票选项票数表写入到数据库中。
[0183] 具体地,这里将存储在内存里的投票选项票数表定期写入数据库中,可以采用成 组提交技术,再配合内存缓存技术,能更有效减缓因频繁写入数据库操作给数据库带来的 压力,使得数据库操作不成为投票系统的瓶颈。
[0184] 本发明实施例通过先根据投票配置总表确定当前正在进行的投票活动;在投票活 动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的记录并加载到内存 中;然后接收投票人发送的投票信息,并从投票信息中解析出四元组记录或四元组记录的 集合;其次,判断内存中是否存在四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID,若存在四元组记录或四元组记录的集合中的投票活动ID、投票选项ID,则判断投 票选项票数表中是否存在投票活动ID和投票选项ID对应的记录,若存在,则将四元组记录 或四元组记录的集合中的票数累加到投票选项票数表中的票数上,若不存在,则将四元组 记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入投票选项票数表中;通 过设置投票配置总表、投票活动与选项映射表和投票选项票数表以及之间的对应关系,可 以方便对于投票活动数据的读写,从而可以满足多场次多类别的大规模网络投票活动的读 写要求;另外,将投票活动ID对应的记录加载到内存,这种内存缓存的方法能有效缓解数 据库的实时写入操作压力,同时避免了数据库造成的系统瓶颈,进而满足同时进行多场次 多类别的大规模网络投票活动的实时需求;最后定期将内存中的投票选项票数表写入到数 据库中,避免了因程序崩溃或断电等异常情况造成的内存数据丢失,保证了数据安全。
[0185] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和 原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1. 一种网络投票方法,其特征在于,所述方法包括: 根据投票配置总表确定当前正在进行的投票活动,所述投票活动总表包括投票活动ID 和与所述投票活动ID对应的起始时间; 在投票活动与选项映射表中查找当前正在进行的投票活动的投票活动ID对应的记录 并加载到内存中,所述投票活动ID对应的记录包括投票选项ID和投票选项; 接收投票人发送的投票信息,并从所述投票信息中解析出四元组记录或四元组记录的 集合,所述四元组记录包括投票活动ID、投票人ID、投票选项ID和票数; 判断所述内存中是否存在所述四元组记录或四元组记录的集合中的投票活动ID、投票 选项ID ; 如果所述内存中存在所述四元组记录或四元组记录的集合中的投票活动ID、投票选项 ID,则判断投票选项票数表中是否存在所述投票活动ID和投票选项ID对应的记录,所述投 票选项票数表包括投票活动ID、投票选项ID以及票数; 如果所述投票选项票数表中不存在所述投票活动ID和投票选项ID对应的记录,则将 所述四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票数插入所述投票 选项票数表中; 如果投票选项票数表中存在所述投票活动ID和投票选项ID对应的记录,则将所述四 元组记录或四元组记录的集合中的票数累加到所述投票选项票数表中的票数上; 定期将内存中的所述投票选项票数表写入到数据库中。
2. 根据权利要求1所述的方法,其特征在于,所述根据投票配置总表确定当前正在进 行的投票活动,包括: 比较当前时间与所述投票活动配置总表中各个所述投票活动ID对应的起止时间; 如果所述当前时间处于所述投票活动配置总表中一个或多个起止时间内,则输出所述 投票活动配置总表中一个或多个起止时间对应的所述投票活动ID。
3. 根据权利要求1所述的方法,其特征在于,所述方法还包括: 将所述投票选项票数表中的票数从高到低排序,并输出排序结果。
4. 根据权利要求3所述的方法,其特征在于,所述将所述投票选项票数表中的票数从 高到低排序,包括: 接收定时线程发送的信号; 当所述定时线程的信号指示达到预定时间间隔时,将所述投票选项票数表中的票数从 1?到低排序;或者, 当所述投票选项票数表中任一所述投票选项的票数改变时,将所述投票选项票数表中 的票数从高到低排序。
5. 根据权利要求1所述的方法,其特征在于,所述方法还包括: 每秒将所述内存中的所述投票选项票数表写入非关系型的数据库中进行备份。
6. -种网络投票装置,其特征在于,所述装置包括: 确定模块,用于根据投票配置总表确定当前正在进行的投票活动,所述投票活动总表 包括投票活动ID和与所述投票活动ID对应的起始时间; 第一处理模块,用于在投票活动与选项映射表中查找当前正在进行的投票活动的投票 活动ID对应的记录并加载到内存中,所述投票活动ID对应的记录包括投票选项ID和投票 选项; 第二处理模块,用于接收投票人发送的投票信息,并从所述投票信息中解析出四元组 记录或四元组记录的集合,所述四元组记录包括投票活动ID、投票人ID、投票选项ID和票 数; 第一判断模块,用于判断所述内存中是否存在所述四元组记录或四元组记录的集合中 的投票活动ID、投票选项ID ; 第二判断模块,用于在所述内存中存在所述四元组记录或四元组记录的集合中的投票 活动ID、投票选项ID时,判断投票选项票数表中是否存在所述投票活动ID和投票选项ID 对应的记录,所述投票选项票数表包括投票活动ID、投票选项ID以及票数; 第三处理模块,用于在所述投票选项票数表中不存在所述投票活动ID和投票选项ID 对应的记录时,将所述四元组记录或四元组记录的集合中的投票活动ID、投票选项ID和票 数插入所述投票选项票数表中; 在投票选项票数表中存在所述投票活动ID和投票选项ID对应的记录时,将所述四元 组记录或四元组记录的集合中的票数累加到所述投票选项票数表中的票数上; 第四处理模块,用于定期将内存中的所述投票选项票数表写入到数据库中。
7. 根据权利要求6所述的装置,其特征在于,所述确定模块包括: 比较单元,用于比较当前时间与所述投票活动配置总表中各个所述投票活动ID对应 的起止时间; 输出单元,用于当所述当前时间处于所述投票活动配置总表中一个或多个起止时间内 时,输出所述投票活动配置总表中一个或多个起止时间对应的所述投票活动ID。
8. 根据权利要求6所述的装置,其特征在于,所述装置还包括: 第五处理模块,用于将所述至少一个投票活动中的所述投票选项所获得的票数从高到 低排序,并输出排序结果。
9. 根据权利要求8所述的装置,其特征在于,所述第五处理模块包括: 接收单元,用于接收定时线程发送的信号; 处理单元,用于当所述定时线程的信号指示达到预定时间间隔时,将所述投票选项票 数表中的票数从高到低排序;或者, 当所述投票选项票数表中任一所述投票选项的票数改变时,将所述投票选项票数表中 的票数从高到低排序。
10. 根据权利要求6所述的装置,其特征在于,所述装置还包括: 第六处理模块,用于每秒将所述内存中的所述投票选项票数表写入非关系型的数据库 中进行备份。
【文档编号】G07C13/00GK104157065SQ201410359454
【公开日】2014年11月19日 申请日期:2014年7月25日 优先权日:2014年7月25日
【发明者】黄伟, 李佳林 申请人:广州华多网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1