一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据处理方法及装置、电子设备和计算机可读存储介质与流程

2023-02-04 13:05:00 来源:中国专利 TAG:


1.本公开涉及大数据技术领域,具体地涉及一种数据处理方法及装置、电子设备和计算机可读存储介质。


背景技术:

2.数据库中的热点记录是指单位时间内一条记录会被频繁更新的记录,在日常业务处理中,对数据库中的热点数据执行更新、查询、删除等是经常需要执行的数据操作行为。
3.在实现本公开构思的过程中,发明人发现相关技术中至少存在如下问题:现有的数据库存储结构和数据操作方法导致一些问题,例如:同一条记录随着更新次数增多,访问数据跳转次数会随之增加,查询随之变慢,更新热点记录会随并发增多,造成同一记录遍历多版本进行多次加锁、释放的过程,将原来一个点的热点问题放大到多个点上,造成总体性能下降。


技术实现要素:

4.鉴于上述问题,本公开提供了一种数据处理方法、装置、设备、介质和程序产品。
5.本公开的一个方面,提供了一种数据处理方法,包括:
6.基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组,其中索引元组包括第一索引字段、第二索引字段,至少一条索引元组的至少一个第一索引字段值各不相同,使得标识区分不同的索引元组,第二索引字段用于从链首表中定位链首元组;
7.基于目标索引元组的第二索引字段值,从链首表中读取链首元组,其中,链首元组包括链首字段,链首字段的值为:数据表中多个版本的数据元组中,最新版本的数据元组在数据表中的存储位置;
8.基于链首字段,从数据表中读取第一目标数据元组,其中第一目标数据元组为当前最新版本的数据元组。
9.根据本公开的实施例,其中,基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组包括:
10.从至少一条索引元组中读取第一索引字段值与目标查询值相同的索引元组,作为目标索引元组。
11.根据本公开的实施例,其中:
12.至少一条索引元组的至少一个第二索引字段值均为链首元组在链首表中的存储位置,以使得可通过任一条索引元组的第二索引字段定位链首元组。
13.根据本公开的实施例,上述方法还包括:
14.在需要更新第一目标数据元组的情况下,获取链首元组的排他锁;
15.在数据表中新增第二目标数据元组,其中第二目标数据元组为对第一目标数据元组更新后的数据元组;
16.将链首字段的值更新为第二目标数据元组在数据表中的存储位置。
17.根据本公开的实施例,上述方法还包括:
18.获取链首元组的排他锁的锁等待队列的长度;
19.在锁等待队列的长度大于预设阈值的情况下,将第一目标数据元组确定为热点数据。
20.根据本公开的实施例,其中:
21.数据元组包括第一数据字段,多个版本的数据元组的多个第一数据字段值,分别为各个版本的数据元组的主体数据,多个版本的主体数据各不相同,但包含相同的数据主键。
22.根据本公开的实施例,其中:
23.数据主键在多个版本下的多个数据键值相同或不同;
24.至少一条索引元组的至少一个第一索引字段值,与多个数据键值匹配。
25.根据本公开的实施例,上述方法还包括:
26.在第二目标数据元组的数据主键的键值,与第一目标数据元组的数据主键的键值不同的情况下,在索引表中新增索引元组,其中新增的索引元组的第一索引字段的值,为第二目标数据元组的数据主键的键值。
27.根据本公开的实施例,其中:
28.数据元组还包括第二数据字段,多个版本的数据元组的多个第二数据字段值分别为:各个版本的前一版本的数据元组在数据表中的存储位置,以使得通过各个第二数据字段值可分别链接至前一版本的数据元组。
29.根据本公开的实施例,其中:
30.数据元组还包括第三数据字段,其中,多个版本的数据元组的多个第三数据字段值分别用于表征各个版本的数据元组是否被删除。
31.根据本公开的实施例,上述方法还包括:
32.在第二目标数据元组的第三数据字段值为第一值、且需要删除第二目标数据元组的情况下,获取链首元组的排他锁,其中第一值用于表征在执行删除操作前第二目标数据元组没有被删除;
33.在数据表中新增第三目标数据元组,其中第三目标数据元组的第三数据字段值为第二值,且第三目标数据元组的第一数据字段值为空,第二值用于表征在执行删除操作后第二目标数据元组被删除;
34.将链首字段的值更新为第三目标数据元组在数据表中的存储位置。
35.根据本公开的实施例,其中:
36.数据元组还包括第四数据字段,其中,多个版本的数据元组的多个第四数据字段值分别为:各个版本的数据元组的操作事务号。
37.本公开的另一个方面提供了一种数据处理装置,包括第一读取模块、第二读取模块、第三读取模块。
38.其中,第一读取模块,用于基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组,其中索引元组包括第一索引字段、第二索引字段,至少一条索引元组的至少一个第一索引字段值各不相同,使得标识区分不同的索引元组,第二索引字段用于从链首表中定位链首元组;
39.第二读取模块,用于基于目标索引元组的第二索引字段值,从链首表中读取链首元组,其中,链首元组包括链首字段,链首字段的值为:数据表中多个版本的数据元组中,最新版本的数据元组在数据表中的存储位置;
40.第三读取模块,用于基于链首字段,从数据表中读取第一目标数据元组,其中第一目标数据元组为当前最新版本的数据元组。
41.根据本公开的实施例,其中,第一读取模块包括读取单元,用于从至少一条索引元组中读取第一索引字段值与目标查询值相同的索引元组,作为目标索引元组。
42.根据本公开的实施例,其中:至少一条索引元组的至少一个第二索引字段值均为链首元组在链首表中的存储位置,以使得可通过任一条索引元组的第二索引字段定位链首元组。
43.根据本公开的实施例,上述装置还包括第一获取模块、第一添加模块、第一更新模块。
44.其中,第一获取模块,用于在需要更新第一目标数据元组的情况下,获取链首元组的排他锁;
45.第一添加模块,用于在数据表中新增第二目标数据元组,其中第二目标数据元组为对第一目标数据元组更新后的数据元组;
46.第一更新模块,用于将链首字段的值更新为第二目标数据元组在数据表中的存储位置。
47.根据本公开的实施例,上述装置还包括第二获取模块、确定模块。
48.其中,第二获取模块,用于获取链首元组的排他锁的锁等待队列的长度;
49.确定模块,用于在锁等待队列的长度大于预设阈值的情况下,将第一目标数据元组确定为热点数据。
50.根据本公开的实施例,其中:数据元组包括第一数据字段,多个版本的数据元组的多个第一数据字段值,分别为各个版本的数据元组的主体数据,多个版本的主体数据各不相同,但包含相同的数据主键。
51.根据本公开的实施例,其中:数据主键在多个版本下的多个数据键值相同或不同;
52.至少一条索引元组的至少一个第一索引字段值,与多个数据键值匹配。
53.根据本公开的实施例,上述装置还包括第二添加模块,用于在第二目标数据元组的数据主键的键值,与第一目标数据元组的数据主键的键值不同的情况下,在索引表中新增索引元组,其中新增的索引元组的第一索引字段的值,为第二目标数据元组的数据主键的键值。
54.根据本公开的实施例,其中:数据元组还包括第二数据字段,多个版本的数据元组的多个第二数据字段值分别为:各个版本的前一版本的数据元组在数据表中的存储位置,以使得通过各个第二数据字段值可分别链接至前一版本的数据元组。
55.根据本公开的实施例,其中:数据元组还包括第三数据字段,其中,多个版本的数据元组的多个第三数据字段值分别用于表征各个版本的数据元组是否被删除。
56.根据本公开的实施例,上述装置还包括第三获取模块、第三添加模块、第二更新模块。
57.其中,第三获取模块,用于在第二目标数据元组的第三数据字段值为第一值、且需
要删除第二目标数据元组的情况下,获取链首元组的排他锁,其中第一值用于表征在执行删除操作前第二目标数据元组没有被删除;
58.第三添加模块,用于在数据表中新增第三目标数据元组,其中第三目标数据元组的第三数据字段值为第二值,且第三目标数据元组的第一数据字段值为空,第二值用于表征在执行删除操作后第二目标数据元组被删除;
59.第二更新模块,用于将链首字段的值更新为第三目标数据元组在数据表中的存储位置。
60.根据本公开的实施例,其中:数据元组还包括第四数据字段,其中,多个版本的数据元组的多个第四数据字段值分别为:各个版本的数据元组的操作事务号。
61.本公开的另一个方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述数据处理方法。
62.本公开的另一个方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述数据处理方法。
63.本公开的另一个方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述数据处理方法。
64.根据本公开的实施例,本公开实施例的数据库存储结构做了优化改进,因索引元组中第二索引字段可用于从链首表中定位链首元组,又因为链首字段的值为最新版本的数据元组在数据表中的存储位置。因此,可基于本公开实施例的上述数据存储结构,通过执行本公开实施例的上述数据处理方法,可快速查询到最新版本的数据元组。本公开实施例的上述方法,在保留原有数据库集中存储新旧版本的基础上,通过调整新旧版本数据排列方式、索引存储方式,避免随版本增多查询变慢的问题,解决了数据库多版本并发控制机制下,随更新版本增多,查询随之变慢的问题,较大程度提升了热点数据查询的处理效率。
附图说明
65.通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
66.图1示意性示出了根据相关技术中数据库存储结构执行数据操作的原理图;
67.图2示意性示出了热点记录数据操作的过程中等锁时间随热点记录热度变化的趋势图;
68.图3示意性示出了根据本公开实施例的数据处理方法、装置、设备、介质和程序产品的应用场景图;
69.图4示意性示出了根据本公开一实施例的数据处理方法的流程图;
70.图5示意性示出了根据本公开实施例的数据库存储结构示意图;
71.图6示意性示出了根据本公开另一实施例的数据处理方法的流程图;
72.图7示意性示出了根据本公开再一实施例的数据处理方法的流程图;
73.图8示意性示出了根据本公开实施例的数据库存储结构执行数据操作的原理图;
74.图9示意性示出了根据本公开实施例的数据处理装置的结构框图;以及
75.图10示意性示出了根据本公开实施例的适于实现数据处理方法的电子设备的方
框图。
具体实施方式
76.以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
77.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
78.在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
79.在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。
80.目前数据库中实现多版本并发控制机制,有两种新旧版本数据存储方法。其一是新旧版本分离存储,新老版本数据存储在不同的区域内。更新数据时,将原位置更新为新数据,并把旧数据移到一个集中区域中,回滚时需将旧数据重新更新回原位。oracle、mysql均采用这种方法实现。其二是新旧版本集中存储:新老版本数据存储在相同区域。写新数据时,旧数据不删除,追加插入新数据,通过事务号状态确定事务提交或回滚。某些数据库,例如postgresql中,多版本数据采用集中存储的方式。
81.图1示意性示出了根据相关技术中数据库存储结构执行数据操作的原理图。
82.如图1所示,相关技术中,针对集中存储的方式,数据库存储结构包括数据元组和数据索引两部分,存储一行数据的数据元组结构包含元组头部及元组内容两部分,其中元组头部主要包含:
83.xmin:插入该元组的事务号,可理解为该元组的生效事务号。
84.xmax:删除该元组的事务号,可理解为该元组的失效事务号。
85.ctid:数据元组的当前位置,存储页面信息、以及页面内元组指针下标信息,如元组被更新,则ctid会更新为新版本的位置。
86.数据索引采用树状结构,各叶子节点存储索引值,即数据表中特定字段数据的键值(图中所示的索引key值)。索引中ctid存储其指向的数据元组的存储位置,存储页面信息、以及页面内元组指针下标信息。
87.如图1所示,数据元组被更新时,需要先获取待更新元组的排他锁,然后判断该元组是否被其他事务更新、如是则释放排他锁重复获取新版本排他锁,直到最新的未被其他事务更新的元组;然后将上一旧元组的xmax更新为当前事务号,并插入一个新元组,旧元组ctid更新为新版本的位置。如此,数据指向方式为:由老版本指向最新版本。
88.对于索引,在数据元组更新时会有两种处理方式:
89.hot(heap only tuple)场景:更新前后索引值未发生变化、且更新前后的新老元组在同一页中,则无需插入新的索引元组。
90.非hot场景:更新前后索引值发生变化、或更新前后索引值未发生变化但新老元组不在同一页中,则索引会插入新的索引元组、索引ctid指向新插入的数据元组。
91.数据库中的热点记录是指单位时间内一条记录会被频繁操作的记录,例如更新、删除等,在日常业务处理中,对数据库中的热点数据执行更新、查询、删除等是经常需要执行的数据操作行为。
92.热点记录热度可以表征该记录在单位时间内被更新操作锁住的可能性。更新热点记录导致的等锁时间的计算方法,可参考如下计算公式:热点记录更新等锁时间=(更新热点记录热度/(100%-更新热点记录热度))*拿到热点记录更新锁后的持有锁时间。
93.图2示意性示出了热点记录数据操作的过程中等锁时间随热点记录热度变化的趋势图。
94.例如:某交易在拿到某条热点记录更新锁后的平均持有锁时间为1毫秒,更新热点记录热度为x,热点记录更新等锁时间为y,等锁时间和热度关系如图2所示。根据图2可以看到,在热度比较低时,等锁时间并不明显,而在热度超过80%时,等锁时间会急剧上升。
95.在实现本公开构思的过程中,基于相关技术中的数据存储结构和上述理论依据,发明人发现相关技术中至少存在如下问题:
96.例如,现有的数据库存储结构和数据操作方法导致一些问题,例如:因数据指向方式为由老版本指向最新版本,同一条记录随着更新次数增多,访问数据跳转次数会随之增加,查询随之变慢,更新热点记录会随并发增多,造成同一记录遍历多版本进行多次加锁、释放的过程,将原来一个点的热点问题放大到多个点上,造成总体性能下降。目前仍无针对postgresql等这类数据库更新热点记录查询、处理效率变差的问题解决方案。
97.再者,对于热点记录的发现,目前多依赖于生产交易性能监控,目前有如下两种监控方式,但也存在一定缺点。
98.其中一种方式,是交易响应时间变慢作为热点识别标准。然而,根据热点记录更新等锁时间计算公式,根据图2可知,热度在80%前,更新热点记录的交易等锁时间对响应时间影响有限,容易淹没在大量的普通交易里;超过80%后,等锁时间会迅速增加,sql响应时间由2-3毫秒,可能迅速增加了秒级甚至十秒级,会导致更新热点记录的交易响应时间变长,一旦待处理热点记录堆积,大量消耗数据库连接数、内存等珍贵资源,最终可能导致数据库连接数和内存耗尽,无法接受对外服务,这种生产交易性能监控属于事后监控,无法起到积极作用。
99.另一种是监控变动明细等运行信息,以存在两个时间点较为接近的记录作为热点识别标准,但这种方案依赖对记录的每步操作都做变动明细登记,应用改造成本大,通常只能做到表级的热点发现;而且无法准确区分出是正常的串行批处理导致出现两条时间点接近的明细、还是并行发起的处理导致的真正的热点场景,从而不利于准确地定位到热点数据。
100.综上,相较于分离存储方式实现的数据库(如oracle、mysql),postgresql这类数据库的多版本并发控制对于更新热点记录,除了等锁时间随更新热度升高而增多的问题
外,还会额外引入查询时间随更新旧版本增多而变慢、遍历多版本加锁增加导致热点记录锁处理流程变长等问题,使更新记录热点的交易响应时间变得更慢。并且缺乏提前发现和解决热点问题的方法,一般只能等到生产发生问题、造成业务影响后才能发现,无法在更新热点记录热度较低时、提前发现问题,对于表中个别记录更新热度高的情况,会由于大量正常的串行批处理记录存在而被掩盖。
101.有鉴于此,本公开的实施例提供了一种数据处理方法,以至少部分解决上述技术问题,该方法包括:
102.基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组,其中索引元组包括第一索引字段、第二索引字段,至少一条索引元组的至少一个第一索引字段值各不相同,使得标识区分不同的索引元组,第二索引字段用于从链首表中定位链首元组;
103.基于目标索引元组的第二索引字段值,从链首表中读取链首元组,其中,链首元组包括链首字段,链首字段的值为:数据表中多个版本的数据元组中,最新版本的数据元组在数据表中的存储位置;
104.基于链首字段,从数据表中读取第一目标数据元组,其中第一目标数据元组为当前最新版本的数据元组。
105.图3示意性示出了根据本公开实施例的数据处理方法、装置、设备、介质和程序产品的应用场景图。
106.如图3所示,根据该实施例的应用场景300可以包括终端设备301、服务器302、数据库303。终端设备301、服务器302、数据库303之间开通通过网络进行通信,网络可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
107.终端设备301可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
108.服务器302可以是提供各种服务的服务器,例如对用户利用终端设备301所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
109.数据库303可以是任意类型的数据库,包括但不限于各种关系数据库和非关系型数据库等等。数据库303中可以按照预设数据结构存储有各种类型的业务数据,例如各种交易数据、消费数据、产品销售数据、客户数据等等。
110.用户可以使用终端设备301通过网络与服务器302交互,以接收或发送消息等。终端设备301上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
111.在服务器302执行业务过程中,可通过访问数据库303执行查询、更新、删除等相关数据操作。例如,可按照本公开实施例所述的方法执行数据查询操作:首先基于查询关键字,从索引表中的至少一条索引元组中读取目标索引元组,然后基于目标索引元组的索引字段,从链首表中读取链首元组,最后在基于链首元组,从数据表中读取当前最新版本的数据元组。
112.需要说明的是,本公开实施例所提供的数据处理方法一般可以由服务器302执行。相应地,本公开实施例所提供的数据处理装置一般可以设置于服务器302中。本公开实施例
所提供的数据处理方法也可以由不同于服务器302且能够与终端设备301和/或服务器302通信的服务器或服务器集群执行。相应地,本公开实施例所提供的数据处理装置也可以设置于不同于服务器302且能够与终端设备301和/或服务器302通信的服务器或服务器集群中。
113.应该理解,图1中的终端设备、服务器、数据库的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、服务器、数据库。
114.需要说明的是,本公开的数据处理方法和装置可以应用于大数据技术领域,也可应用于金融技术领域,也可用于除大数据技术领域和金融技术领域之外的任意,本公开的实施例对上述数据处理方法和装置的应用领域不做限定。
115.在本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
116.在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
117.以下将基于图3描述的场景,通过图4~图10对公开实施例的数据处理方法进行详细描述。
118.图4示意性示出了根据本公开一实施例的数据处理方法的流程图;图5示意性示出了根据本公开实施例的数据库存储结构示意图。以下结合图4、图5对本公开实施例的方法进行描述。
119.如图4所示,该实施例的数据处理方法包括操作s401~操作s403。
120.在操作s401,基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组,其中索引元组包括第一索引字段、第二索引字段,至少一条索引元组的至少一个第一索引字段值各不相同,使得标识区分不同的索引元组,第二索引字段用于从链首表中定位链首元组;
121.在操作s402,基于目标索引元组的第二索引字段值,从链首表中读取链首元组,其中,链首元组包括链首字段,链首字段的值为:数据表中多个版本的数据元组中,最新版本的数据元组在数据表中的存储位置;
122.在操作s403,基于链首字段,从数据表中读取第一目标数据元组,其中第一目标数据元组为当前最新版本的数据元组。
123.根据本公开的实施例,上述数据处理方法可应用于采用集中式存储方式的数据库中,例如postgresql数据库。
124.针对集中存储的方式,本公开的实施例对相关技术中的数据库存储结构进行优化和改进,采用的存储结构如图5所示。相比于相关技术中数据存储结构(如图1),本公开实施例的数据存储结构新增数据链首页存储空间,包括索引页、链首页、数据页三部分,并对索引页、数据页的存储结构也进行了调整。
125.具体地,将同一记录新旧版本链式结构中、指向最新版本数据元组位置的信息单独抽取出来,存储于独立的页空间进行管理,该空间即为链首页空间,链首页空间中的元组称为链首元组。链首元组仅存储指向最新版本数据元组的信息,可将这类页面信息置于数据缓存区中减少数据访问开销,不会造成过多的内存空间占用压力。
126.链首元组中,链首字段(ctid)的值为最新版本的数据元组在数据表中的存储位置,存储最新数据元组的页面信息、以及页面内元组指针下标信息。如图5所示例中,链首元组的链首字段(ctid)为(2,1)代表当前最新版本的数据元组在数据表中的存储位置为第2页的第2组。
127.数据页用于存储多个不同版本的数据元组,数据元组主要用于存储不同版本的实体数据和版本信息。存储一行数据的数据元组结构可包含一个或多个字段,例如如图5所示示例中包括四个字段,分别为第一数据字段(data)、第二数据字段(ctid)、第三数据字段(delflag)、第四数据字段(xmin),其中第二数据字段、第三数据字段、第四数据字段为元组头部,第一数据字段为元组内容部分。其中,第一数据字段(data)的值(value),分别为各个版本的数据元组的主体数据。如图5所示示例中,第一版本的数据元组(插入事务号为10)的data值value1,可以是:账号-xxx1,姓名-xx,金额-100元
……
。第二数据字段(ctid)的值为:各个版本的前一版本的数据元组在数据表中的存储位置(存储页面信息、以及页面内元组指针下标信息);第三数据字段(delflag)的值为标记值,分别用于表征各个版本的数据元组是否被删除。第四数据字段(xmin)的值表示各个版本的数据元组的操作事务号。
128.根据本公开的实施例,数据库的数据索引采用树状结构,各叶子节点中存储有索引元组。索引元组包括第一索引字段(key)、第二索引字段(ctid),多个索引元组的第一索引字段值各不相同,使得标识区分不同的索引元组,如图5所示示例中,两条索引的第一索引字段不同,分别为key=v1,key=v2。第二索引字段的值为链首元组在链首表中的存储位置,用于从链首表中定位链首元组。索引中ctid存储链首元组的页面信息、以及页面内元组指针下标信息。例如,第二索引字段(ctid)为(0,1)代表链首元组在链首表的存储位置为第0页的第1组。
129.根据本公开的实施例,基于本公开实施例的上述数据存储结构,通过执行本公开实施例的上述数据处理方法,可快速查询到最新版本的数据元组。
130.具体地,首先通过上述操作s401,基于目标查询值,通过遍历索引元组的第一索引字段,从索引表中的索引元组中读取与目标查询值对应的目标索引元组(目标索引元组的第一索引字段值与目标查询值相同)。因索引元组中第二索引字段(ctid)可用于从链首表中定位链首元组,进一步地,可通过操作s402基于第二索引字段(ctid),定位到链首元组。又因为链首字段的值为最新版本的数据元组在数据表中的存储位置;可通过操作s403基于链首字段从数据表中定位到当前最新版本的数据元组。
131.例如,用户欲查询账号为xxx1的最新版本的数据,可从多条索引元组中匹配到与该账号xxx1对应的目标索引元组(目标索引元组的第一索引字段值v1=xxx1)。之后,基于第二索引字段ctid=(0,1),定位到链首元组(链首元组在链首表的存储位置为第0页的第1组)。最后,根据链首字段ctid=(2,2),从数据表中定位到当前最新版本的数据元组(其在数据表中的存储位置为第2页的第2组)。
132.根据本公开的实施例,相比于相关技术,本公开实施例的数据库存储结构做了优化改进,因索引元组中第二索引字段可用于从链首表中定位链首元组,又因为链首字段的值为最新版本的数据元组在数据表中的存储位置。因此,可基于本公开实施例的上述数据存储结构,通过执行本公开实施例的上述数据处理方法,可快速查询到最新版本的数据元组。
133.具体而言,相关技术中,因索引指向较老的数据版本,执行数据查询时,需要依次遍历多个版本的数据以定位到最新数据,同一条记录随着更新次数增多,访问数据跳转次数会随之增加,查询随之变慢。相较而言,本公开实施例的上述数据查询方法,无论数据版本多少,都可以仅通过一次索引加一次数据访问,便可定位到最新数据,较大程度提升了热点数据查询的处理效率。
134.本公开实施例的上述方法,在保留原有数据库集中存储新旧版本的基础上,通过调整新旧版本数据排列方式、索引存储方式,避免随版本增多查询变慢的问题,解决了数据库多版本并发控制机制下,随更新版本增多,查询随之变慢的问题,较大程度提升了热点数据查询的处理效率。同时相较于分离存储方式实现的数据库(如oracle、mysql),仍然保留更新操作io开销少、可快速回滚、不会有undo快照过旧问题等优点。此外,链首元组为独立的页空间,便于将这类页面信息置于数据缓存区中减少数据访问开销,不会造成过多的内存空间占用压力。
135.根据本公开的实施例,索引元组中,多个索引元组的第一索引字段值各不相同,用作查询索引,基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组具体可包括:遍历索引表,从至少一条索引元组中读取第一索引字段值与目标查询值相同的索引元组,作为目标索引元组。例如,用户欲查询账号为xxx1的最新版本的数据,可通过待查询的账号(即利用目标查询值)xxx1,匹配到第一索引字段值v1与目标查询值xxx1相同的索引元组,作为目标索引元组。
136.根据本公开的实施例,索引元组中,多个索引元组的第二索引字段值相同,均为链首元组在链首表中的存储位置,以使得可通过任一条索引元组的第二索引字段定位链首元组。
137.根据本公开的实施例,通过将多条索引均指向链首元组,在执行数据操作的过程中,无论通过哪条索引都可一次定位到链首元组,进一步可基于链首元组定位到数据,进一步提高了数据处理的效率。
138.根据本公开的实施例,存储一行数据的数据元组结构包括的多个字段中,第一数据字段的值为各个版本数据元组的主体数据。如图5所示示例中,同一记录多个版本的第一数据字段(data)的值(value),分别为各个版本的数据元组的主体数据,多个版本的主体数据各不相同。例如,用户王xx在某系统中开户并存放100元,第一版本的数据元组(插入事务号为10)的data值value1,可以是与账号xxx1关联的一组数据,具体可以是:账号-xxx1,姓名-王xx,金额-100元
……
;第二版本的数据元组(插入事务号为12)的data值value2,可以是对第一版本数据更新后的数据,为与账号为xxx1关联的另一组数据,具体可以是:王xx转出80元后,数据被更新为账号-xxx1,姓名-王xx,金额-20元
……
第四版本的数据元组(插入事务号为15)的data值value4,可以是对第三版本数据更新后的数据,例如为原账号xxx1因账号变更而被更新为账号xxx2后的关联数据,具体可以是:账号-xxx2,姓名-王xx,金额-120元
……

139.根据本公开的实施例,多个版本的主体数据各不相同,分别为value1、value2、value3
……
,但可以是包含相同的数据主键,以便根据主键建立索引。例如,图5所示示例中,多个版本的数据元组都包含相同的数据主键:key(例如key为账号)。但是主键值可以相同或不同,例如图5所示示例中,第一版本、第二版本、第三版本的数据元组的主键值相同,
均为:key=v1(例如账号=xxx1);第四版本的数据元组的主键值为key=v2(例如账号=xxx2)。
140.根据本公开的实施例,因数据索引是依据数据元组的主体数据建立的,用于索引定位数据,因此,索引元组的第一索引字段与数据元组的主体数据(第一数据字段)匹配。与同一组多版本数据关联的数据库的索引页中,可存储有一条或多条索引元组,如图5所示示例中,与同一组多版本数据关联的数据库的索引页中,存储2条索引元组,索引元组的两个第一索引字段值(key=v1,key=v2),与数据元组第一数据字段(data)的多个数据键值(key=v1,key=v2)匹配。并且,在更新数据后,若数据键值key发生变化,则需要新增与之对应的索引元组。
141.根据本公开的实施例,数据元组结构包括的多个字段中,第二数据字段(ctid)的值为:各个版本的前一版本的数据元组在数据表中的存储位置(存储页面信息、以及页面内元组指针下标信息),以使得通过各个第二数据字段值可分别链接至前一版本的数据元组。例如,如图5所示示例中,第一版本的数据元组的ctid为空,表示是该笔数据的最老版本元组。第二版本的数据元组的ctid为(0,1)代表第一版本的数据元组在数据表中的存储位置为第0页的第1组。第四版本的数据元组的ctid为(1,1),代表第三版本的数据元组在数据表中的存储位置为第1页的第1组。如此,执行数据查询时,可根据新老版本数据之间的数据链接关系,定位到任一版本的数据。
142.通过将第二数据字段的值设置为各个版本的前一版本的数据元组在数据表中的存储位置,可使得数据的指向方式由相关技术中(参见图1)的老版本指向新版本,变更为由新版本指向老版本。如此,在执行数据查询时,优先查询到的为较新的数据版本,若需要查询较老版本的数据,可由新版本依次向老版本遍历查询,直到找到需要查询的数据版本。因执行数据查询时,较多的情况为查询较新的数据版本,通过上述存储方式的变更,可快速定位到较新的数据版本,适应大多数数据查询的场景,可加快数据查询的速度。
143.根据本公开的实施例,数据元组结构包括的多个字段中,第三数据字段(delflag)的值为标记值,分别用于表征各个版本的数据元组是否被删除,如delflag为0,表示该版本数据没有被删除,如delflag为1,表示该版本数据被删除。
144.根据本公开的实施例,数据元组结构包括的多个字段中,第四数据字段(xmin)的值表示各个版本的数据元组的操作事务号,xmin可以是插入该元组的事务号,可理解为该元组的生效事务号。多个版本的数据元组的操作事务号可以各不相同,也可以是部分相同。如图5所示示例中,第三版本、第四版本的数据元组的操作事务号xmin相同,代表同一事务对第二版数据连续进行了两次更新操作。
145.根据本公开的实施例,索引元组还可包括第三索引字段(xmin)、第四索引字段(xmax)。其中,索引元组引入xmin与xmax,分别用于记录索引的插入、删除版本号,以提高索引扫描访问效率。
146.图6示意性示出了根据本公开另一实施例的数据处理方法的流程图;图7示意性示出了根据本公开再一实施例的数据处理方法的流程图;图8示意性示出了根据本公开实施例的数据库存储结构执行数据操作的原理图。在此,结合图6、图7、图8分别对基于本公开实施例的数据处理方法执行各种数据操作,如插入、更新、删除、查询等方法进行详细描述。
147.以下结合图8,对本公开实施例的数据处理方法中执行数据插入的方法进行介绍。
148.如图8所示,通过事务号为10的事务操作插入一条data值为value1新数据,即第一版本的数据,其中,第一版本的数据元组的当前事务号,即第四数据字段xmin为10,第一数据字段data值为value1(其中,数据主键key=v1);第二数据字段ctid为空,表示是该笔数据的最老版本元组;第三数据字段delflag的值为0,表示该版本数据没有被删除。
149.同时,插入新链首元组,链首字段(ctid)的值为第一版本数据元组在数据表中的存储位置,ctid=(0,1),代表当前最新版本的数据元组在数据表中的存储位置为第0页的第1组。
150.同时,插入新索引元组,索引元组的第一索引字段(key=v1),与当前数据元组的数据主键相同,第二索引字段ctid指向链首元组位置(ctid),ctid=(0,1)代表链首元组在链首表的存储位置为第0页的第1组。第三索引字段xmin为当前插入索引的事务号10、第四索引字段xmax为0,表示当前未有删除索引的事务。
151.以下结合图6、图8,对本公开实施例的数据处理方法中执行数据更新的方法进行介绍。
152.根据本公开的实施例,如图6所示,执行数据更新的方法包括操作s601~操作s603。
153.在操作s601,在需要更新第一目标数据元组的情况下,获取链首元组的排他锁;
154.在操作s602,在数据表中新增第二目标数据元组,其中第二目标数据元组为对第一目标数据元组更新后的数据元组;
155.在操作s603,将链首字段的值更新为第二目标数据元组在数据表中的存储位置。
156.上述方法的具体执行方法可参照图8所示示例,如图8所示,在第一次更新数据的情况下,首先需要获取链首元组排他锁,在多个事务同时操作该条数据的情况下,存在锁等待队列。
157.在获取到链首元组的排他锁之后,插入第二版本的数据元组,即插入更新后的数据元组。具体地,通过事务号为12的事务操作插入一条data值为value2新数据,即第二版本的数据。其中,第二版本的数据元组的当前事务号,即第四数据字段xmin为12;第一数据字段data值为value2(其中,数据主键key=v1);第二数据字段ctid=(0,1),代表前一版本的数据元组在数据表中的存储位置为第0页的第1组;第三数据字段delflag的值为0,表示该版本数据没有被删除。
158.如图8所示,在第二次更新数据的情况下,同样首先需要获取链首元组排他锁,在获取到链首元组的排他锁之后,插入新版本数据。当前更新事务用于对上一版本的数据连续执行两次更新,因此,通过同一事务连续插入两条新数据:第三版本的数据元组和第四版本的数据元组。其中,第三、四版本的数据元组的当前事务号相同,即第四数据字段xmin都为15;第三、四版本数据元组的第一数据字段data值分别为value3和value4。其中,在第四版本的数据元组中,数据主键的键值进行了变更,由key=v1,变更为key=v2。第三、四版本数据元组的第二数据字段ctid分别指向前一版本的数据元组的存储位置。第三、四版本数据元组的第三数据字段delflag的值为0,表示该版本数据没有被删除。
159.根据本公开的实施例,基于本公开实施例的数据存储结构,通过链首元组指向最新版本的数据元组,因此,在执行数据更新等数据操作时,只需获取链首元组的排他锁进行数据操作。因执行数据更新通常是对最新版本的数据进行更新,因此通过上述数据更新方
法,大多数情况下仅通过一次索引、一次加锁、以及一次数据访问便可定位到最新数据以执行数据更新,相比于相关技术中需要遍历多版本进行加锁、释放锁、遍历查询多个版本的数据才可以以定位到最新数据,本公开实施例的上述方法,解决了数据库更新热点记录遍历多版本加锁、导致更新热点记录处理进一步变慢的问题,较大程度提升了热点数据更新的处理效率。
160.根据本公开的实施例,因数据索引是依据数据元组的主体数据建立的,起到索引作用的索引元组的第一索引字段,与数据元组的第一数据字段data中的数据主键key的键值需匹配,因此,在数据版本更新后,若数据主键key的键值发生更新,则需要新增与之对应的索引元组。
161.具体地,在执行数据更新的过程中,索引变更的方法如下:
162.在第二目标数据元组(更新后的数据)的数据主键的键值,与第一目标数据元组(更新前的数据)的数据主键的键值相同的情况下,无需更新索引元组;
163.在第二目标数据元组(更新后的数据)的数据主键的键值,与第一目标数据元组(更新前的数据)的数据主键的键值不同的情况下,在索引表中新增索引元组,其中新增的索引元组的第一索引字段的值,为第二目标数据元组的数据主键的键值。
164.如图8所示,在第二次更新数据后,第四版本的数据元组中,数据主键的键值进行了变更,由key=v1,变更为key=v2。则需要新增索引,新增的索引中,第一索引字段的值为更新后的数据元组的数据主键的键值,即第一索引字段key=v2,与第四版本的数据元组的数据主键key的键值v2相同。同时,更新旧索引元组xmax为当前事务号15,插入的新索引元组中,xmin为当前事务号15,xmax为0,新索引元组中,第二索引字段ctid=(0,1)指向链首元组位置。
165.本公开实施例的上述索引更新方法与相关技术中(参见图1)不同之处在于:
166.相关技术中,触发执行数据索引更新的情况有两种:1、新旧版本的数据元组的数据主键的键值不同;2、新旧版本的数据元组的数据主键的键值相同,但新旧版本的数据元组不在同一页中;上述两种情形均会触发插入新的索引元组,同时新增的索引ctid指向新插入的数据元组。基于此,在数据版本数量较多、数据页数频繁变更的情况下,索引的数量会大幅增加,且不同的索引指向不同版本的数据,在进行数据操作时,因仅根据索引无法得知哪条索引指向最新版本数据,因此,只能依次遍历多条索引进行数据操作,数据处理效率较低。
167.而本公开实施例的上述索引更新方法,仅在新旧版本的数据元组的数据主键的键值不同的情况下才触发更新索引,但新旧版本的数据元组不在同一页中不会触发更新索引,且无论新版本索引还是旧版本索引,其第二索引字段ctid均指向链首元组位置。
168.因此,相比与相关技术中索引的数量较多,且不同的索引指向不同版本的数据的情况,通过本公开实施例的上述索引更新的方法,可较大程度上减少索引的数量,较大程度上降低了数据索引的次数,提高了数据索引的效率。且执行数据操作时,无论基于哪条索引都会通过链首元组定位到最新数据,可较快速定位到最新数据以执行数据操作,进一步提高了热点数据处理的效率。
169.据本公开的实施例,数据元组结构包括的多个字段中,第三数据字段(delflag)的值用于表征各个版本的数据元组是否被删除。
170.以下结合图7、图8,基于上述数据结构,对本公开实施例的数据处理方法中执行数据删除的方法进行介绍。
171.如图7所示,执行数据删除的方法包括操作s701~操作s703。
172.在操作s701,在第二目标数据元组的第三数据字段值为第一值、且需要删除第二目标数据元组的情况下,获取链首元组的排他锁,其中第一值用于表征在执行删除操作前第二目标数据元组没有被删除;
173.在操作s702,在数据表中新增第三目标数据元组,其中第三目标数据元组的第三数据字段值为第二值,且第三目标数据元组的第一数据字段值为空,第二值用于表征在执行删除操作后第二目标数据元组被删除;
174.在操作s703,将链首字段的值更新为第三目标数据元组在数据表中的存储位置。
175.上述方法的具体执行方法可参照图8所示示例,如图8所示,在对最新第四版本的数据(事务号15)执行数据删除的情况下,首先需要获取链首元组排他锁,在多个事务同时操作该条数据的情况下,存在锁等待队列。
176.在获取到链首元组的排他锁之后,在数据表中新增一组空数据,该数据元组的操作事务号为当前事务号18,即第四数据字段xmin为18;第一数据字段data值为空,代表当前版本数据为空数据;第二数据字段ctid=(2,1),代表前一版本的数据元组在数据表中的存储位置为第2页的第1组;第三数据字段delflag的值为1,表示该版本数据已被删除。最后,将链首字段的值更新为当前数据元组在数据表中的存储位置,ctid=(2,2),并更新索引元组的xmax为当前事务号18。
177.基于本公开实施例的数据存储结构,以下结合图8,对本公开实施例的数据处理方法中执行数据查询的方法进行介绍。
178.如图8所示,执行数据查询时,首先基于目标查询值,通过遍历索引元组的第一索引字段key,从索引表中的索引元组中读取与目标查询值对应的目标索引元组(目标索引元组的第一索引字段值与目标查询值相同)。进一步地,基于第二索引字段ctid=(0,1),定位到链首元组。再基于链首字段ctid=(2,2)从数据表中定位到当前最新版本的数据元组,其在数据表中的存储位置为第2页的第2组。
179.读取最新版本的数据元组(事务号为18),判断其delflag为1,代表当前记录已被删除,该记录不可见,结束这笔记录的查询。
180.若欲查询的不是当前最新版本数据,也可基于新老版本之间的数据链接关系(由新版本指向老版本),由新版本向老版本依次遍历查询,直到找到需要查询的数据版本。
181.根据本公开的实施例,因相关技术中心在热点数据发现方面存在无法准确地定位到热点数据的技术问题,本公开的实施例通过如下方法确定热点记录。
182.该方法包括:获取链首元组的排他锁的锁等待队列的长度;在锁等待队列的长度大于预设阈值的情况下,将第一目标数据元组确定为热点数据。
183.例如,预设阈值设置为5,某一时刻,同时有10个事务并发获取链首元组的锁,则锁等待队列的长度为10,大于预设阈值,则链首元组定位到的那组数据则认为是热点数据。可将链首元组ctid、具体数据、等待队列深度大于阈值时间点、总队列长度、最大深度、初始/最大/最终/平均等锁时间等信息登记到“更新热点记录表”中,通过该表准确有效地发现更新热点记录,并获取具体的热点执行信息。
184.根据本公开的实施例,相关技术中的数据操作机制下(参考图1),由于索引的数量较多,且不同的索引指向不同版本的数据,执行数据操作时,需分散地对多个不同的数据加锁,对于表中个别记录更新热度高的情况,会由于大量正常的串行批处理记录存在而被掩盖,无法准确追踪热点数据。
185.相较而言,基于本公开实施例的数据存储结构,通过链首元组指向数据元组,因此,在执行数据更新、删除等数据操作时,只需获取链首元组的排他锁,无需获取数据元组的排他锁。相比于相关技术,本公开实施例的数据处理方法从原有的需要遍历多版本等锁/加锁,修改为对链首元组的统一加锁,因链首元组直接关联到数据,因此链首元组的热度可直接反映数据本身的热度,此时锁等待队列的深度,即为该数据更新热度的直接体现。可以利用优化后的数据库更新加锁方式,通过对锁等待队列深度的监控实现更新热点记录发现,准确有效地发现更新热点记录,并获取具体的热点执行信息。相较于其他从应用层面更新热点记录发现方案,具有准确识别、无需用户改造、适用性广、通用性强的优点,可有效避免生产问题的发生,提高业务处理的可靠度。
186.基于上述数据处理方法,本公开还提供了一种数据处理装置。以下将结合图9对该装置进行详细描述。
187.图9示意性示出了根据本公开实施例的数据处理装置的结构框图。如图9所示,该实施例的数据处理装置900包括第一读取模块901、第二读取模块902、第三读取模块903。
188.其中,第一读取模块901,用于基于目标查询值,从索引表中的至少一条索引元组中读取目标索引元组,其中索引元组包括第一索引字段、第二索引字段,至少一条索引元组的至少一个第一索引字段值各不相同,使得标识区分不同的索引元组,第二索引字段用于从链首表中定位链首元组;
189.第二读取模块902,用于基于目标索引元组的第二索引字段值,从链首表中读取链首元组,其中,链首元组包括链首字段,链首字段的值为:数据表中多个版本的数据元组中,最新版本的数据元组在数据表中的存储位置;
190.第三读取模块903,用于基于链首字段,从数据表中读取第一目标数据元组,其中第一目标数据元组为当前最新版本的数据元组。
191.根据本公开的实施例,本公开实施例的数据库存储结构做了优化改进,因索引元组中第二索引字段可用于从链首表中定位链首元组,又因为链首字段的值为最新版本的数据元组在数据表中的存储位置。因此,可基于本公开实施例的上述数据存储结构,通过本公开实施例的上述第一读取模块901从索引表中的至少一条索引元组中读取目标索引元组、通过第二读取模块902从链首表中读取链首元组、并通过第三读取模块903可快速查询到最新版本的数据元组。本公开实施例的上述数据处理装置900,在保留原有数据库集中存储新旧版本的基础上,通过调整新旧版本数据排列方式、索引存储方式,避免随版本增多查询变慢的问题,解决了数据库多版本并发控制机制下,随更新版本增多,查询随之变慢的问题,较大程度提升了热点数据查询的处理效率。
192.根据本公开的实施例,其中,第一读取模块901包括读取单元,用于从至少一条索引元组中读取第一索引字段值与目标查询值相同的索引元组,作为目标索引元组。
193.根据本公开的实施例,其中:至少一条索引元组的至少一个第二索引字段值均为链首元组在链首表中的存储位置,以使得可通过任一条索引元组的第二索引字段定位链首
元组。
194.根据本公开的实施例,上述装置还包括第一获取模块、第一添加模块、第一更新模块。
195.其中,第一获取模块,用于在需要更新第一目标数据元组的情况下,获取链首元组的排他锁;第一添加模块,用于在数据表中新增第二目标数据元组,其中第二目标数据元组为对第一目标数据元组更新后的数据元组;第一更新模块,用于将链首字段的值更新为第二目标数据元组在数据表中的存储位置。
196.根据本公开的实施例,上述装置还包括第二获取模块、确定模块。
197.其中,第二获取模块,用于获取链首元组的排他锁的锁等待队列的长度;确定模块,用于在锁等待队列的长度大于预设阈值的情况下,将第一目标数据元组确定为热点数据。
198.根据本公开的实施例,其中:数据元组包括第一数据字段,多个版本的数据元组的多个第一数据字段值,分别为各个版本的数据元组的主体数据,多个版本的主体数据各不相同,但包含相同的数据主键。
199.根据本公开的实施例,其中:数据主键在多个版本下的多个数据键值相同或不同;至少一条索引元组的至少一个第一索引字段值,与多个数据键值匹配。
200.根据本公开的实施例,上述装置还包括第二添加模块,用于在第二目标数据元组的数据主键的键值,与第一目标数据元组的数据主键的键值不同的情况下,在索引表中新增索引元组,其中新增的索引元组的第一索引字段的值,为第二目标数据元组的数据主键的键值。
201.根据本公开的实施例,其中:数据元组还包括第二数据字段,多个版本的数据元组的多个第二数据字段值分别为:各个版本的前一版本的数据元组在数据表中的存储位置,以使得通过各个第二数据字段值可分别链接至前一版本的数据元组。
202.根据本公开的实施例,其中:数据元组还包括第三数据字段,其中,多个版本的数据元组的多个第三数据字段值分别用于表征各个版本的数据元组是否被删除。
203.根据本公开的实施例,上述装置还包括第三获取模块、第三添加模块、第二更新模块。
204.其中,第三获取模块,用于在第二目标数据元组的第三数据字段值为第一值、且需要删除第二目标数据元组的情况下,获取链首元组的排他锁,其中第一值用于表征在执行删除操作前第二目标数据元组没有被删除;第三添加模块,用于在数据表中新增第三目标数据元组,其中第三目标数据元组的第三数据字段值为第二值,且第三目标数据元组的第一数据字段值为空,第二值用于表征在执行删除操作后第二目标数据元组被删除;第二更新模块,用于将链首字段的值更新为第三目标数据元组在数据表中的存储位置。
205.根据本公开的实施例,其中:数据元组还包括第四数据字段,其中,多个版本的数据元组的多个第四数据字段值分别为:各个版本的数据元组的操作事务号。
206.根据本公开的实施例,第一读取模块901、第二读取模块902、第三读取模块903中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,第一读取模块901、第二读取模块
902、第三读取模块903中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一读取模块901、第二读取模块902、第三读取模块903中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
207.图10示意性示出了根据本公开实施例的适于实现数据处理方法的电子设备的方框图。
208.如图10所示,根据本公开实施例的电子设备1000包括处理器1001,其可以根据存储在只读存储器(rom)1002中的程序或者从存储部分1008加载到随机访问存储器(ram)1003中的程序而执行各种适当的动作和处理。处理器1001例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic))等等。处理器1001还可以包括用于缓存用途的板载存储器。处理器1001可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
209.在ram 1003中,存储有电子设备1000操作所需的各种程序和数据。处理器1001、rom 1002以及ram 1003通过总线1004彼此相连。处理器1001通过执行rom 1002和/或ram 1003中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom 1002和ram 1003以外的一个或多个存储器中。处理器1001也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
210.根据本公开的实施例,电子设备1000还可以包括输入/输出(i/o)接口1005,输入/输出(i/o)接口1005也连接至总线1004。电子设备1000还可以包括连接至i/o接口1005的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至i/o接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
211.本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
212.根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的rom 1002和/或ram 1003和/或rom 1002和ram 1003以外的一个或多个存储器。
213.本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序
包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的数据处理方法。
214.在该计算机程序被处理器1001执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
215.在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1009被下载和安装,和/或从可拆卸介质1011被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
216.在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被处理器1001执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
217.根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如java,c ,python,“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
218.附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
219.本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
220.以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本
公开的范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献