CN107103055A - 面向内存更新密集型程序的Hourglass和Piggyback算法 - Google Patents
面向内存更新密集型程序的Hourglass和Piggyback算法 Download PDFInfo
- Publication number
- CN107103055A CN107103055A CN201710237896.9A CN201710237896A CN107103055A CN 107103055 A CN107103055 A CN 107103055A CN 201710237896 A CN201710237896 A CN 201710237896A CN 107103055 A CN107103055 A CN 107103055A
- Authority
- CN
- China
- Prior art keywords
- data
- checkpoint
- updater
- pointer
- threads
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- 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/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Debugging And Monitoring (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明公开一种面向内存更新密集型程序的Hourglass和Piggyback算法,其优秀性能来源于在updater和dumper线程之间的指针交换技术,可以避免大量数据拷贝。它周期性的发生updater和dumper线程的角色交换,可以被周期性无止境的复用,一旦上面的部分为空的时候交换上下角色。可以拥有更少的内存和基本没有抖动的延时效果。其都属于轻量级检查点算法的一种,Hourglass结合了目前最好的两个算法zigzag和pingpong,从而利用两个的优点指针交换和比特位标志。Piggyback算法提高性能通过提供一种全量快照,从而可以支持实时olap和oltp的应用。其具有更小的内存占用、全量快照开销、更小的延时、更均匀的延时的优点。
Description
技术领域
本发明涉及内存数据库的备份恢复技术领域,具体地说涉及一种面向内存更新密集型程序的Hourglass和Piggyback算法,都属于轻量级检查点算法的一种。
背景技术
一大类应用涉及到数据密集型的更新操作,他们大多数都会追求瞬时的响应、高吞吐和高可用的性能。比如说在20世纪末,大型证券交易所(比如上海证券交易所)的后台电子交易***(ETS)的性能已经达到了100000个事务每秒,并且能保证在灾难恢复的时候事务零损失。还有更多的例子,比如大型在线游戏(MMOS)和足以支持黑色星期五的性能场景的电商***。这些数据更新密集型的程序通常采用内存计算的技术实现。其中一种策略是采用内存数据库,它可以提供更快和相对磁盘数据库可预测的性能优势(因为数据直接可在内存中访问)。
内存数据库的高可用性依赖于一个更加精密的恢复子***。由于针对磁盘数据库(DRDB)的传统恢复机制并没有特殊针对更新密集型的程序,如果直接采用以前的恢复***而不做任何修改,整个***的性能可能受到恢复***的限制。基于此,我们认为内存数据库的恢复***,尤其是事务日志和检查点子***,需要被重新设计。
对于事务日志,由于内存数据库的高吞吐量性能,单位时间内会产生更多的日志,因此会加重IO的开销,为了阻止事务日志成为***性能的瓶颈,许多相关地优化方法被提出,比如加速IO性能(借助新型硬件),降低IO频率(事务组提交策略),或者减少IO的大小(日志压缩,日志重写)。这部分的研究目前比较充分。
对于检查点技术,我们可以通过周期性生成快照并截断日志来达到缩小日志的目的。显然地,检查点生成的频率越频繁越快就越好,好处是两次检查点间生成的日志量相对更小。然而,如此频繁的执行检查点带来的额外开销是不可忽视的。首先,由于检查点的执行导致延时增加会对***吞吐量和响应时间有很大的影响。其次,不同于磁盘检查点,在数据刷入磁盘之前,内存检查点需要在内存内维护一个完全一致的数据拷贝。不恰当的处理可能导致延时的明显抖动,甚至于***停转。
串行事务处理模型下的一致性检查点算法。要求检查点算法既能备份一致性数据,而且不会有过大的吞吐量损失,它的难点在于如何尽可能快的在内存中生成一致性内存快照,然后异步的备份数据到磁盘。最直接的算法是Snapshot(NS),它通过锁住所有数据然后生成一个数据拷贝。然而,NS利用了一个粗粒度的锁操作,这将会导致一个非常明显的latency抖动。另一个算法Copy On Update(COU),采用影子拷贝的形式,在第一次数据写入的时候。生成快照阶段它不会导致***过大的卡壳,但对于每一次的数据访问都需要内存拷贝操作和细粒度的锁操作。NS和COU都需要利用锁操作去维护一致性的状态。为了确保***低延时和没有卡壳现象,lock free的算法设计很有意义。
据我们所知,只有少量研究涉及到lock free的一致性检查点算法,典型的工作是Tuan cao提出了两个wait free的检查点算法,Zigzag和Pingpong。主要的思路是通过利用额外的内存和比特位数组去避免锁的使用,而且可以消除延时抖动现象。不幸的是当数据量很大的时候,Zigzag依然会有很严重的抖动现象。Pingpong算法需要3到4倍的内存占用,并且依赖于一种冗余写入的方式。尽管大容量高速的物理内存已经大量出现,尽量少的使用内存,不论从价格还是能源角度都是合理的,尤其是对于更新密集型程序。因此,综合考虑内存开销和性能(低延时,均匀延时分布,快速恢复),设计轻量级的无锁的内存检查点算法很有必要。
发明内容
针对上述现有技术的缺陷,本发明提供一种面向内存更新密集型程序的Hourglass和Piggyback算法,都属于轻量级检查点算法的一种。能够解决现有技术的不足,有更好的高可用性。
为实现上述目的,本发明所采取的技术方案是:
一种面向内存更新密集型程序的Hourglass算法,包括如下步骤:
S1、假设更新密集型程序会周期性的达到一个一致性的状态,用tick=1/T的概念描述事务的周期性达到一致性状态的特性,其中T是tick的持续时间;一个tick代表的是数据集两次达到一致性状态的时间点之间的间隔;
S2、在时刻t,假设数据D的状态用Dt表示,D是内存中的数据集;一个检查点C负责维护Dt的一个紧凑的数据快照到磁盘设备中,但得保证是在t+tc时刻之前,其中tc是检查点的执行周期;
S3、将数据D抽象为一个连续的内存空间,按照内存页的形式组织;任何额外的用于完成检查点的内存区域,用的形式表示;
S4、模拟IMDB的恢复***为Updater线程和Dumper线程两个并发线程,D和被不同的算法的两个线程访问;
S5、将周期性的检查分为prepare阶段和dump阶段两个阶段;Dt检查点的实际生成时刻在每个dump阶段的结束时刻,tp和td分别表示prepare和dump阶段的时长;执行检查点的总时间开销to=tp+td不会超过检查点周期的时间tc=tp+k(k∈N+)也就是说to≤tc;
S6、利用pingpong的指针交换技术和zigzag的比特位检查技术来获取一个均匀的访问延时但还能保证只需两份的内存,数据集D和影子拷贝数据 每份数据集伴随着一个比特位数组和
的值表示D[i]是否在当前检查点周期内被更新以及是否需要在下一轮检查点周期被备份;的值表示D[i]是否在当前检查点周期内需要被持久化;
S7、在一个检查周期内,用于更新的数据集(D或者)用“pU”指针表示,另一份数据集用于备份的用“pD”指针表示;
S8、指针交换发生在每一个检查点的开始时段;为确保updater线程不读脏数据,额外的标志位数据用于指示那份数据用于读取最新的数据即从D[i]读取数据,否则从读取数据。
作为对上述技术方案的改进,Updater线程代表更新密集型程序,Dumper线程负责周期性的执行检查点。
本发明还提供一种面向内存更新密集型程序的Piggyback算法,包括如下步骤:
S1、将指针pU和pD分别指向D和dumper线程批量复制持久化pD指向的数据,Piggyback维护一两个bit的数组
有三种状态,{0,1,2},代表我们需要从哪份数据中读取最新的数据;updater读取数据页i从任何一份数据集都行,因为当Db[i]=1,updater从D[i]读取数据页i。当db[i]=2,updater从读取数据页;
pU和pD分别指向D和被初始化位全0,在第一个检查点周期内,假设Updater线程更新了数据页D[0],D[2],和D[3],对应的标志位被设置成1;
S2、在第二个检查点开始,指针pU和pD发生交换,按照全量的方式备份当前pD指向的D的数据;同时,接受updater的更新操作;在第二个检查点周期结束时刻,D中的数据都是当前的最新状态,
S3、定义额外的Dumper::WriteToOnline()函数。负责将pD最新状中最新的数据覆盖pU中相应位置的数据。
与现有技术相比,本发明具有的优点和积极效果是:
本发明的面向内存更新密集型程序的Hourglass和Piggyback算法,其优秀性能来源于在updater和dumper线程之间的指针交换技术,它可以避免大量数据拷贝。它周期性的发生updater和dumper线程的角色交换,就好像沙漏一样,可以被周期性无止境的复用,一旦上面的部分为空的时候交换上下角色。可以拥有更少的内存和基本没有抖动的延时效果。
上述两种算法,都属于轻量级检查点算法的一种,Hourglass结合了目前最好的两个算法zigzag和pingpong,从而利用两个的优点指针交换和比特位标志。Piggyback算法提高性能通过提供一种全量快照,从而可以支持实时olap和oltp的应用。其具有更小的内存占用、全量快照开销、更小的延时、更均匀的延时的优点。
具体实施方式
下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
本发明的面向内存更新密集型程序的Hourglass算法,包括如下步骤:
S1、数据集D和影子拷贝数据每份数据集伴随着一个比特位数组和的值表示D[i]是否在当前检查点周期内被更新以及是否需要在下一轮检查点周期被备份;的值表示D[i]是否在当前检查点周期内需要被持久化;
S2、在第一个检查周期内,用于更新的数据集D用“pU”指针表示,另一份数据集用于备份的用“pD”指针表示。同时,Updater更新数据时,都需要设置的数据为1。Dumper线程直接备份内的数据。
S3、指针交换发生在下一个检查点的开始时段;为确保updater线程不读脏数据,额外的标志位数据用于指示那份数据用于读取最新的数据即从D[i]读取数据,否则从读取数据。
作为对上述技术方案的改进,本发明还提供一种面向内存更新密集型程序的Piggyback算法,包括如下步骤:
S1、将指针pU和pD分别指向D和dumper线程批量复制持久化pD指向的数据,Piggyback维护一两个比特位的数组
有三种状态,{0,1,2},代表我们需要从哪份数据中读取最新的数据;updater读取数据页i从任何一份数据集都行,因为当Db[i]=1,updater从D[i]读取数据页i。当Db[i]=2,updater从读取数据页;
pU和pD分别指向D和被初始化位全0,在第一个检查点周期内,假设Updater线程更新了数据页D[0],D[2],和D[3],对应的标志位被设置成1;
S2、在第二个检查点开始,指针pU和pD发生交换,按照全量的方式备份当前pD指向的D的数据;同时,接受updater的更新操作;在第二个检查点周期结束时刻,D中的数据都是当前的最新状态;
S3、定义额外的Dumper::WriteToOnline()函数;用于修正pU内的数据,在检查点开始时刻保证最新的数据状态。
与现有技术相比,本发明具有的优点和积极效果是:
本发明的面向内存更新密集型程序的Hourglass和Piggyback算法,其优秀性能来源于在updater和dumper线程之间的指针交换技术,它可以避免大量数据拷贝。它周期性的发生updater和dumper线程的角色交换,就好像沙漏一样,可以被周期性无止境的复用,一旦上面的部分为空的时候交换上下角色。可以拥有更少的内存和基本没有抖动的延时效果。
上述两种算法,都属于轻量级检查点算法的一种,Hourglass结合了目前最好的两个算法zigzag和Ping-Pong,从而利用两个的优点指针交换和比特位标志。Piggyback算法提高性能通过提供一种全量快照,从而可以支持实时olap和oltp的应用。其具有更小的内存占用、全量快照开销、更小的延时、更均匀的延时的优点。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等同物界定。
Claims (2)
1.一种面向内存更新密集型程序的Hourglass算法,其特征在于:包括如下步骤:
S1、假设更新密集型程序会周期性的达到一个一致性的状态,用tick=1/T的概念描述事务的周期性达到一致性状态的特性,其中T是tick的持续时间;一个tick代表的是数据集两次达到一致性状态的时间点之间的间隔;
S2、在时刻t,假设数据D的状态用Dt表示,D是内存中的数据集;一个检查点C负责维护Dt的一个紧凑的数据快照到磁盘设备中,但得保证是在t+tc时刻之前,其中tc是检查点的执行周期;
S3、将数据D抽象为一个连续的内存空间,按照内存页的形式组织;任何额外的用于完成检查点的内存区域,用形式表示;
S4、模拟IMDB的恢复***为Updater线程和Dumper线程两个并发线程,D和不同的算法的两个线程访问;
S5、将周期性的检查分为prepare阶段和dump阶段两个阶段;Dt检查点的实际生成时刻在每个dump阶段的结束时刻,tp和td分别表示prepare和dump阶段的时长;执行检查点的总时间开销to=tp+td不会超过检查点周期的时间tc=tp+k(k∈N+)也就是说to≤tc;
S6、利用pingpong的指针交换技术和zigzag的比特位检查技术来获取一个均匀的访问延时但还能保证只需两份的内存,数据集D和影子拷贝数据每份数据集伴随着一个比特位数组和
的值表示D[i]是否在当前检查点周期内被更新以及是否需要在下一轮检查点周期被备份;的值表示D[i]是否在当前检查点周期内需要被持久化;
S7、在一个检查周期内,用于更新的数据集(D或者)用“pU”指针表示,另一份数据集用于备份的用“pD”指针表示;
S8、指针交换发生在每一个检查点的开始时段;为确保updater线程不读脏数据,额外的标志位数据用于指示那份数据用于读取最新的数据即从D[i]读取数据,否则从读取数据。
2.一种面向内存更新密集型程序的Piggyback算法,其特征在于:包括如下步骤:
S1、将指针pU和pD分别指向D和dumper线程批量复制持久化pD指向的数据,Piggyback维护一两个bit的数组
有三种状态,{0,1,2},代表我们需要从哪份数据中读取最新的数据;updater读取数据页i从任何一份数据集都行,因为当Db[i]=1,updater从D[i]读取数据页i;当Db[i]=2,updater从读取数据页;
pU和pD分别指向D和被初始化位全0,在第一个检查点周期内,假设Updater线程更新了数据页D[0],D[2],和D[3],对应的标志位被设置成1;
S2、在第二个检查点开始,指针pU和pD发生交换,按照全量的方式备份当前pD指向的D的数据;同时,受updater的更新操作;在第二个检查点周期结束时刻,D中的数据都是当前的最新状态;
S3、定义额外的Dumper::WriteToOnline()函数;负责将pD最新状中最新的数据覆盖pU中相应位置的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710237896.9A CN107103055B (zh) | 2017-03-29 | 2017-03-29 | 面向内存更新密集型程序的Hourglass方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710237896.9A CN107103055B (zh) | 2017-03-29 | 2017-03-29 | 面向内存更新密集型程序的Hourglass方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107103055A true CN107103055A (zh) | 2017-08-29 |
CN107103055B CN107103055B (zh) | 2020-05-12 |
Family
ID=59676053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710237896.9A Active CN107103055B (zh) | 2017-03-29 | 2017-03-29 | 面向内存更新密集型程序的Hourglass方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107103055B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787532A (zh) * | 2004-12-07 | 2006-06-14 | Nvlsoft有限公司 | 提供3d图像生成服务的***与方法 |
CN101395602A (zh) * | 2005-12-29 | 2009-03-25 | 亚马逊科技公司 | 用于分布式文件存储和索引服务的方法和装置 |
CN103051474A (zh) * | 2012-12-19 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种大规模集群网络布线的方法 |
-
2017
- 2017-03-29 CN CN201710237896.9A patent/CN107103055B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1787532A (zh) * | 2004-12-07 | 2006-06-14 | Nvlsoft有限公司 | 提供3d图像生成服务的***与方法 |
CN101395602A (zh) * | 2005-12-29 | 2009-03-25 | 亚马逊科技公司 | 用于分布式文件存储和索引服务的方法和装置 |
CN103051474A (zh) * | 2012-12-19 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种大规模集群网络布线的方法 |
Non-Patent Citations (2)
Title |
---|
程春玲等: "基于SSC-tree流聚类的入侵检测算法", 《***工程与电子技术》 * |
袁梅宇: "基于动态链接库进行BLOB数据交换的方法", 《微计算机应用》 * |
Also Published As
Publication number | Publication date |
---|---|
CN107103055B (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220309049A1 (en) | Key-Value Store System | |
DE69126416T2 (de) | Speichergerätanordnungsarchitektur mit Copyback-Cachespeicher | |
Arulraj et al. | Write-behind logging | |
Stenström et al. | Comparative performance evaluation of cache-coherent NUMA and COMA architectures | |
DE3855031T2 (de) | Kopiesystem mit "Hot-standby"-Speicher | |
Agawal et al. | Memory-reference characteristics of multiprocessor applications under MACH | |
DE102011076894B9 (de) | Persistenter Speicher für einen Hauptspeicher eines Prozessors | |
US9047351B2 (en) | Cluster of processing nodes with distributed global flash memory using commodity server technology | |
Cox et al. | Software versus hardware shared-memory implementation: A case study | |
Bortnikov et al. | Accordion: Better memory organization for LSM key-value stores | |
DE102011076895A1 (de) | Cachekohärenzprotokoll für persistente Speicher | |
Kissinger et al. | KISS-Tree: smart latch-free in-memory indexing on modern architectures | |
US8396937B1 (en) | Efficient hardware scheme to support cross-cluster transactional memory | |
Graefe | A survey of B-tree logging and recovery techniques | |
US11100083B2 (en) | Read only bufferpool | |
CN110196818A (zh) | 缓存数据的方法、缓存设备和存储*** | |
DE112020006443T5 (de) | Storage class memory | |
CN114780025A (zh) | 软件raid请求处理方法、控制器及raid存储*** | |
Zhou et al. | {ODINFS}: Scaling {PM} performance with opportunistic delegation | |
CN113220490A (zh) | 异步写回持久化内存的事务持久化方法及*** | |
CN107103055A (zh) | 面向内存更新密集型程序的Hourglass和Piggyback算法 | |
DE102021129138A1 (de) | Abdeckungsbasierte komprimierung mit geringer komplexität | |
Fujimoto et al. | The roll back chip: Hardware support for distributed simulation using Time Warp | |
Yang et al. | Optimizing synchronization mechanism for block-based file systems using persistent memory | |
Li et al. | Ssb-tree: Making persistent memory b+-trees crash-consistent and concurrent by lazy-box |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |