{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,31]],"date-time":"2026-01-31T08:14:11Z","timestamp":1769847251052,"version":"3.49.0"},"reference-count":35,"publisher":"Association for Computing Machinery (ACM)","issue":"5","content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Proc. VLDB Endow."],"published-print":{"date-parts":[[2015,1]]},"abstract":"<jats:p>Recent non-volatile memory (NVM) technologies, such as PCM, STT-MRAM and ReRAM, can act as both main memory and storage. This has led to research into NVM programming models, where persistent data structures remain in memory and are accessed directly through CPU loads and stores. Existing mechanisms for transactional updates are not appropriate in such a setting as they are optimized for block-based storage. We present REWIND, a user-mode library approach to managing transactional updates directly from user code written in an imperative general-purpose language. REWIND relies on a custom persistent in-memory data structure for the log that supports recoverable operations on itself. The scheme also employs a combination of non-temporal updates, persistent memory fences, and lightweight logging. Experimental results on synthetic transactional workloads and TPC-C show the overhead of REWIND compared to its non-recoverable equivalent to be within a factor of only 1.5 and 1.39 respectively. Moreover, REWIND outperforms state-of-the-art approaches for data structure recoverability as well as general purpose and NVM-aware DBMS-based recovery schemes by up to two orders of magnitude.<\/jats:p>","DOI":"10.14778\/2735479.2735483","type":"journal-article","created":{"date-parts":[[2015,5,12]],"date-time":"2015-05-12T15:37:52Z","timestamp":1431445072000},"page":"497-508","source":"Crossref","is-referenced-by-count":112,"title":["REWIND"],"prefix":"10.14778","volume":"8","author":[{"given":"Andreas","family":"Chatzistergiou","sequence":"first","affiliation":[{"name":"University of Edinburgh"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Marcelo","family":"Cintra","sequence":"additional","affiliation":[{"name":"Intel, Germany"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Stratis D.","family":"Viglas","sequence":"additional","affiliation":[{"name":"University of Edinburgh"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2015,1]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Core Data Programming Guide","year":"2014","unstructured":"Apple Developer Library. Core Data Programming Guide , 2014 . Apple Developer Library. Core Data Programming Guide, 2014."},{"key":"e_1_2_1_2_1","volume-title":"HOTPAR","author":"Chakrabarti D.","year":"2013","unstructured":"D. Chakrabarti and H.-J. Boehm . Durability semantics for lock-based multithreaded programs . In HOTPAR , 2013 . D. Chakrabarti and H.-J. Boehm. Durability semantics for lock-based multithreaded programs. In HOTPAR, 2013."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/237090.237154"},{"key":"e_1_2_1_4_1","volume-title":"CIDR","author":"Chen S.","year":"2011","unstructured":"S. Chen Rethinking database algorithms for phase change memory . In CIDR , 2011 . S. Chen et al. Rethinking database algorithms for phase change memory. In CIDR, 2011."},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/1950365.1950380"},{"key":"e_1_2_1_6_1","volume-title":"VLDB","author":"Copeland G.","year":"1989","unstructured":"G. Copeland The case for safe RAM . In VLDB , 1989 . G. Copeland et al. The case for safe RAM. In VLDB, 1989."},{"key":"e_1_2_1_7_1","volume-title":"ATC","author":"Cornell B.","year":"2004","unstructured":"B. Cornell : A user-level versioning file system for Linux . In ATC , 2004 . B. Cornell et al. Wayback: A user-level versioning file system for Linux. In ATC, 2004."},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2463676.2463710"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2592798.2592814"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.2011.5767918"},{"key":"e_1_2_1_11_1","volume-title":"TRANSACT","author":"Felber P.","year":"2007","unstructured":"P. Felber Transactifying applications using an open compiler framework . In TRANSACT , 2007 . P. Felber et al. Transactifying applications using an open compiler framework. In TRANSACT, 2007."},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2482767.2482806"},{"key":"e_1_2_1_13_1","volume-title":"MEAOW","author":"Giles E.","year":"2013","unstructured":"E. Giles Software support for atomicity and persistence in non-volatile memory . In MEAOW , 2013 . E. Giles et al. Software support for atomicity and persistence in non-volatile memory. In MEAOW, 2013."},{"key":"e_1_2_1_14_1","volume-title":"ATC","author":"Guerra J.","year":"2012","unstructured":"J. Guerra Software persistent memory . In ATC , 2012 . J. Guerra et al. Software persistent memory. In ATC, 2012."},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/1376616.1376713"},{"key":"e_1_2_1_16_1","volume-title":"SQLite Database","author":"Hipp D. R.","year":"2014","unstructured":"D. R. Hipp SQLite Database , 2014 . D. R. Hipp et al. SQLite Database, 2014."},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.14778\/1454159.1454211"},{"key":"e_1_2_1_18_1","volume-title":"Linux Programmer's Manual","year":"2014","unstructured":"Linux Kernel. Linux Programmer's Manual , 2014 . Linux Kernel. Linux Programmer's Manual, 2014."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/268998.266665"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/128765.128770"},{"key":"e_1_2_1_21_1","volume-title":"VLDB","author":"Ng W. T.","year":"1997","unstructured":"W. T. Ng and P. M. Chen . Integrating reliable memory in databases . In VLDB , 1997 . W. T. Ng and P. M. Chen. Integrating reliable memory in databases. In VLDB, 1997."},{"key":"e_1_2_1_22_1","first-page":"11g","year":"2014","unstructured":"Oracle Corporation. Oracle Berkeley DB 11g , 2014 . Oracle Corporation. Oracle Berkeley DB 11g, 2014.","journal-title":"Oracle Corporation. Oracle Berkeley DB"},{"key":"e_1_2_1_23_1","volume-title":"HPCA","author":"Ouyang X.","year":"2011","unstructured":"X. Ouyang : Rethinking traditional storage primitives . In HPCA , 2011 . X. Ouyang et al. Beyond block I\/O: Rethinking traditional storage primitives. In HPCA, 2011."},{"key":"e_1_2_1_24_1","volume-title":"Storage management in the NVRAM era. PVLDB, 7(2)","author":"Pelley S.","year":"2014","unstructured":"S. Pelley Storage management in the NVRAM era. PVLDB, 7(2) , 2014 . S. Pelley et al. Storage management in the NVRAM era. PVLDB, 7(2), 2014."},{"key":"e_1_2_1_25_1","volume-title":"Morgan & Claypool","author":"Qureshi M. K.","year":"2012","unstructured":"M. K. Qureshi Phase Change Memory: from devices to systems . Morgan & Claypool , 2012 . M. K. Qureshi et al. Phase Change Memory: from devices to systems. Morgan & Claypool, 2012."},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/168619.168631"},{"key":"e_1_2_1_27_1","volume-title":"OSDI","author":"Sears R.","year":"2006","unstructured":"R. Sears and E. Brewer . Stasis: Flexible transactional storage . In OSDI , 2006 . R. Sears and E. Brewer. Stasis: Flexible transactional storage. In OSDI, 2006."},{"key":"e_1_2_1_28_1","volume-title":"FAST","author":"Spillane R. P.","year":"2009","unstructured":"R. P. Spillane Enabling transactional file access via lightweight kernel extensions . In FAST , 2009 . R. P. Spillane et al. Enabling transactional file access via lightweight kernel extensions. In FAST, 2009."},{"key":"e_1_2_1_29_1","volume-title":"FAST","author":"Venkataraman S.","year":"2011","unstructured":"S. Venkataraman Consistent and durable data structures for non-volatile byte-addressable memory . In FAST , 2011 . S. Venkataraman et al. Consistent and durable data structures for non-volatile byte-addressable memory. In FAST, 2011."},{"key":"e_1_2_1_30_1","volume-title":"Write-limited sorts and joins for persistent memory. PVLDB, 7(5)","author":"Viglas S. D.","year":"2014","unstructured":"S. D. Viglas . Write-limited sorts and joins for persistent memory. PVLDB, 7(5) , 2014 . S. D. Viglas. Write-limited sorts and joins for persistent memory. PVLDB, 7(5), 2014."},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/1961295.1950379"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2007.4"},{"key":"e_1_2_1_33_1","volume-title":"Scalable logging through emerging non-volatile memory. PVLDB, 7(10)","author":"Wang T.","year":"2014","unstructured":"T. Wang and R. Johnson . Scalable logging through emerging non-volatile memory. PVLDB, 7(10) , 2014 . T. Wang and R. Johnson. Scalable logging through emerging non-volatile memory. PVLDB, 7(10), 2014."},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/195473.195506"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/2540708.2540744"}],"container-title":["Proceedings of the VLDB Endowment"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.14778\/2735479.2735483","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2022,12,28]],"date-time":"2022-12-28T11:20:33Z","timestamp":1672226433000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.14778\/2735479.2735483"}},"subtitle":["&lt;u&gt;re&lt;\/u&gt;covery &lt;u&gt;w&lt;\/u&gt;rite-ahead system for &lt;u&gt;i&lt;\/u&gt;n-memory &lt;u&gt;n&lt;\/u&gt;on-volatile &lt;u&gt;d&lt;\/u&gt;ata-structures"],"short-title":[],"issued":{"date-parts":[[2015,1]]},"references-count":35,"journal-issue":{"issue":"5","published-print":{"date-parts":[[2015,1]]}},"alternative-id":["10.14778\/2735479.2735483"],"URL":"https:\/\/doi.org\/10.14778\/2735479.2735483","relation":{},"ISSN":["2150-8097"],"issn-type":[{"value":"2150-8097","type":"print"}],"subject":[],"published":{"date-parts":[[2015,1]]}}}