<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Design Proposal for a Unified B-epsilon-tree: Embracing NVM in Memory Hierarchies</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Sajad Karim</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Johannes Wünsche</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>David Broneske</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michael Kuhn</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Gunter Saake</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>DZHW</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Otto von Guericke University Magdeburg</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Non-volatile memory (NVM) represents a new class in the traditional storage hierarchy. The technologies in this class share characteristics of both primary and secondary storage; they provide latency that approaches that of DRAM, albeit moderately higher1, yet significantly lower than that of secondary storage devices, are addressable from cache lines, and, most importantly, ofer persistence. NVM is often referred to as a disruptive memory technology because it has invalidated the traditional programming paradigms used in applications such as database management systems (DBMS) and file systems (FS). Substantial research have focused on integrating NVM into diverse DBMS and FS, specifically through optimizing data structures such as B-trees and LSM-trees. Despite these advancements, considerable opportunities remain to further exploit NVM to boost application performance, particularly by exploring variations of these data structures. In this work, we present a proposal to optimize the B -tree for use with NVM. The proposed modifications aim to capitalize on the unique characteristics of NVM, enhancing the tree's eficiency in both read and write operations. Additionally, the suggested changes are designed to reduce computational overhead, particularly by minimizing the need for tree rebalancing operations. The development of the tree is in progress, and it is assumed that completion will take some time; therefore, this paper is presented as preliminary work.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Non-Volatile Memory</kwd>
        <kwd>Persistent Memory</kwd>
        <kwd>B-tree</kwd>
        <kwd>B-epsilon-tree</kwd>
        <kwd>Key-Value Store</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        move the data across the storage devices depending on
their usage and access patterns. For example, bcache and
One of the key challenges that applications used for data dm-cache in the Linux kernel use solid-state drives as a
management and analysis face is keeping the data as cache for hard disk drives.
close as possible to the CPU. This issue is exacerbated Non-volatile memory, or persistent memory, is a
comby the unbounded growth of data. The volume of data paratively new storage class in the storage hierarchy that
doubles approximately every two years [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. This estimate is considered a solution to the above-mentioned
probwas made before the onset of the recent pandemic, which lem. It shares characteristics of primary and secondary
has further fueled its growth as people increasingly relied storage. The modules in this class are byte-addressable,
on digital services for their day-to-day chores. provide access latency close to DRAM1, and ofer much
      </p>
      <p>
        The extensibility of DRAM has resolved this issue to higher capacity than DRAM. Furthermore, they are
capasome extent, resulting in a new type of database sys- ble of storing data persistently. NVM has not only added
tem called the main memory database system [
        <xref ref-type="bibr" rid="ref6 ref7 ref8">6, 7, 8</xref>
        ], further heterogeneity to the storage landscape but has
where all data resides in DRAM. Nevertheless, given the also invalidated the traditional programming paradigm
exponential growth of data, DRAM will never be sufi- because, contrary to the traditional model where data
cient to accommodate all the data, and more importantly, structures are generally categorized into memory and
this solution is not viable for many businesses due to its storage resident data structures [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], NVM bound data
cost impact. Moreover, its further expansion has become structures cover both aspects and linked intricacies [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
another challenging task. Consequently, applications de- Considerable research have been conducted to exploit
vise optimized designs that logically arrange the memory the characteristics of NVM, and in particular to the
deand storage in the traditional storage landscape at difer- sign proposal presented in this paper, several designs
ent levels and incorporate diferent migration policies to for the index structures [
        <xref ref-type="bibr" rid="ref11 ref12 ref13 ref14 ref15 ref16">11, 12, 13, 14, 15, 16</xref>
        ] typical to
key-value storage engines are presented. However, one
35th GI-Workshop on Foundations of Databases (Grundlagen von Daten- key aspect not addressed in the cited literature (discussed
banken), May 22-24, 2024, Herdecke, Germany. briefly in Section 3) is the disregard for the
heterogene$ sajad.karim@ovgu.de (S. Karim); johannes.wuensche@ovgu.de ity of the modern storage landscape. They all present
(mJ.icWhaüenls.kcuhhe)n;@broovngeus.kdee@(Mdz.hKwu.ehun)(;Ds.aaBkreo@neosvkgeu);.de (G. Saake) NVM-DRAM optimized B-trees and do not consider block
0009-0002-4910-8453 (S. Karim); 0000-0002-5304-7262
(J. Wünsche); 0000-0002-9580-740X (D. Broneske); 1There are various types of non-volatile memory, including
Ferroelec0000-0001-8167-8574 (M. Kuhn); 0000-0001-9576-8474 (G. Saake) tric RAM [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], Magnetoresistive RAM [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], Phase Change Memory [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ],
©At2tr0i2b4utCioonpy4r.0igIhnttefornratthioisnpaalp(CerCbByYit4s.0a)u.thors. Use permitted under Creative Commons License and Resistive RAM [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], each ofering distinct latencies.
devices, for instance. Moreover, to the best of our knowl- to the rudimental version, it does not store the values in
edge, no research has optimized the B -tree for NVM the internal nodes, and the values are instead stored in
despite the fact that it ofers similar scan operations as the leaf nodes only [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ].
other B-tree variants yet its inserts and deletes are an B-trees perform read, insert, delete, and range query
order of magnitude faster [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. Therefore, in this work, operations in logarithmic time. Insertion is eficient when
several changes to the B -tree are proposed that we ar- made to a non-full node, or else it can trigger the
nodegue will significantly benefit the index structure. These split operation. Splitting propagates upwards, and in the
changes primarily utilize NVM to improve key tree work- worst case, it can result in an increase in the height of the
lfows, including indexing and bufering, ofering several tree. The delete operation can trigger a merge operation.
notable benefits: B-trees have an optimal query performance, but their
write operation is not optimal [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]. Therefore, in order
• The tree would become NVM-aware, allowing to mitigate this limitation and make it write-optimized,
direct reads/writes to the nodes on NVM and fur- bufers are added to the internal nodes in B  -tree [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
ther optimizing both read and write operations. B -trees are basically B+-trees with bufers in
inter• In many instances, the design would reduce data nal nodes that store messages for the child nodes. The
fragmentation, I/O, and other computation costs. key diference between a B +-tree and the original B-tree
• Last but not least, the tree would be able to per- is that in a B+-tree, all data is stored in the leaves and
form low-latency point queries. the internal nodes only store keys for fast searching,
whereas in a B-tree, both keys and data can be stored at
      </p>
      <p>
        The remainder of this paper is structured as follows. any level [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. Additionally, B+-trees have leaves that are
Section 2 provides background on the B-tree and its vari- linked, facilitating eficient range queries, unlike B-trees
ants, and it also briefly describes non-volatile memory. where leaf nodes are not inherently linked [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. On the
Section 3 details some relevant work. The design pro- other hand, the primary diference between a B +-tree and
posal is discussed in Sections 4 and 5, which are then a B -tree lies in how they handle updates and bufering.
followed by some important use cases in Section 6. Sec- A B -tree extends the B+-tree by introducing the concept
tion 7 details a preliminary experiment supporting the of a "message" which is used to bufer insertions,
deledesign, and Section 8 concludes with a summary. tions, and updates. These messages are stored in separate
bufers at each node of the tree. This allows B  -trees to
2. Background delay actual updates to the structure, potentially reducing
disk I/O by batching operations, and eficiently merging
In this section, we discuss the B-tree and its commonly these updates during searches or structural changes. This
used variants, followed by a brief discussion on NVM bufering mechanism is particularly advantageous for
enand the Intel® Optane™ DC Persistent Memory. vironments with high write loads, enhancing throughput
and decreasing latency compared to B+-trees, where
updates directly modify nodes. Moreover, a message can be
2.1. B-tree family an insert, delete, and update operation, which is normally
B-trees are tree-based, one-dimensional, multi-level, and encoded in a single message called the upsert message.
widely used index structures for secondary storage. They propagate gradually from the root node to the
tarThey were first introduced by Bayer and McCreight in get leaf node, and they are flushed down to the child
1972 [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], and since then, many variants of B-trees have node only when the bufer in the internal node is full.
been introduced. B-trees are primarily dominant across The allocation of space for data and bufer is controlled
diferent file systems [
        <xref ref-type="bibr" rid="ref19 ref20">19, 20</xref>
        ] and database management by a tuning parameter called epsilon ( ). The tree is a
systems [
        <xref ref-type="bibr" rid="ref21 ref22">21, 22</xref>
        ], and no other index structure has been B+-tree when it is set to ’0’, and the tree behaves like a
able to prove the same flexibility and generality [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. bufered repository tree [
        <xref ref-type="bibr" rid="ref17 ref27">17, 27</xref>
        ] when the value is set to
      </p>
      <p>
        A B-tree is a balanced m-ary search tree. It can also ’1’. However, most configurations use  =1/2, and with
be considered as a generalization of a balanced search this value, B -trees provide asymptotically better insert
tree. It contains two types of nodes, internal and leaf performance with the same asymptotic point query
pernodes, with all the leaf nodes at the same level as the formance as B-trees [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
tree grows (logarithmically) upwards. Internal nodes,
including the root node, contain an ordered sequence of 2.2. Non-Volatile Memory
keys and values, and they also contain pointers to the
child nodes. Whereas the leaf nodes only contain the Non-volatile memory is an emerging storage class that
pair of keys and values in a sequenced order. B+-tree is efectively bridges the gap between main memory and
a widely known variant that was introduced to enhance secondary storage. This class ofers significantly higher
the branching factor of the internal nodes, and contrary capacity than DRAM while maintaining reasonably
comparable latency. Additionally, these technologies are non- quency. It maintains the data in diferent data structures
volatile and directly accessible from cache lines. Exam- across DRAM and NVM and ensures the consistency of
ples include Phase Change Memory [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ], Spin Transfer data in DRAM using logging. LB-Tree [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] is another
Torque RAM (STT-RAM) [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ], Carbon NanoTube RAM recently proposed optimized indexing solution. It also
(NRAM) [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ], and Memristors [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ]. uses a tailored node layout for the nodes in NVM, and it
      </p>
      <p>
        Currently, Intel® is the only producer of commercially uses three techniques to boost performance by moving
available persistent memory modules [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ], developed entries within nodes and performing logless node splits
through an advanced NVM technology known as 3D to reduce write/update overheads.
XPoint, often termed "cross-point." Developed in collab- Lastly, to our knowledge, the only storage engine that
oration with Micron, 3D XPoint is thought to function uses B -tree and incorporates NVM in its storage stack
similarly to PCM [
        <xref ref-type="bibr" rid="ref33 ref34 ref35">33, 34, 35</xref>
        ], recording data by changing is Haura2 [
        <xref ref-type="bibr" rid="ref37 ref38">37, 38</xref>
        ]. It is a write-optimized key-value and
the resistance of its material. However, further produc- object storage stack and follows the layered approach
tion of this technology has been discontinued [
        <xref ref-type="bibr" rid="ref36">36</xref>
        ]. These used in ZFS [
        <xref ref-type="bibr" rid="ref39">39</xref>
        ]. Its ObjectStore module facilitates basic
modules, designed for use with Intel® Xeon Scalable Pro- operations such as create, read, write, and query, using a
cessors, come in various generations, ofering difering key-value system. It uniquely handles large objects by
performance and capacity levels. They are available in breaking them into chunks with distinct identifiers. The
the DIMM form factor, compatible with standard DDR4 Database module oversees databases composed of B
sockets, and can coexist with conventional DDR4 DRAM trees, managing data and metadata separately. The Tree
DIMMs on the same memory channel. The modules fea- module implements the B -tree, while the
DataManageture an internal granularity of 256 bytes and can operate ment module maintains data integrity and interacts with
in three modes: memory, app direct, and dual modes [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ]. other modules for functionalities like caching and
compression. The StoragePool module queues and dispatches
I/O operations, and the Vdev module ofers various
stor3. Related Work age device interfaces, including single, mirror, and parity
options for data redundancy. Although it uses DAX to
access NVM, it does not fully leverage NVM capabilities
due to the lack of support for direct reads and in-place
updates. Nodes can be distributed among various storage
devices – NVM, HDD, and SSD – according to user
preferences. Nevertheless, the system treats nodes on NVM
identically to those on other devices, replicating them to
DRAM for processing during operations.
      </p>
      <p>
        As already discussed, NVM is byte-addressable, and its
capabilities cannot be leveraged using the traditional
programming model. Therefore, numerous research studies
have been conducted on optimizing diferent data
structures to leverage NVM. CDDS B-Tree [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] is one of the
earliest works that presents a single-level data store using
a consistent and durable B-tree. It uses versioning instead
of logging to achieve consistency and durability, and it
uses copy-on-write to ensure the consistency of update
operations. It also leaves the entries in the nodes unsorted 4. Design Goals
to overcome the write amplification that is detrimental to
the performance of NVM. In [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], a write-atomic B-tree One key aspect not addressed in the literature mentioned
(wBTree) is presented. It further reduces the overheads above is the neglect of the heterogeneity of the modern
in CDDS B-Tree by using an indirect slot array/bitmap storage landscape, except in [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ]. They present
NVMto prevent index items from moving during insertions DRAM optimized B-trees but do not consider block
storand deletions. It ensures consistency using redo-logging age, such as solid-state drives. Moreover, while they
or atomic operations. Moreover, in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], a workload- optimize B+-trees for NVM, the only implementation we
adaptive and cache-optimized B+-tree, NVTree, is pre- found that uses B -trees with NVM is [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ].
sented where the leaf nodes are considered as the critical Furthermore, the optimizations presented for B+-trees
data and the consistency is only enforced on them. The in- cannot be fully applied to B -trees due to the diferences
ternal nodes are built using the leaf nodes and maintained discussed in Section 2.1. Additionally, the design in [
        <xref ref-type="bibr" rid="ref38">38</xref>
        ]
in a cache-optimized structure in the main memory, and does not fully exploit NVM’s characteristics. Therefore,
also, the sizes of the nodes adapt over time to improve by utilizing the optimizations discussed in the literature,
the performance of the tree. we aim to present an NVM-optimized B -tree that covers
      </p>
      <p>
        Furthermore, in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], FPTree, again an optimized B+- the following aspects:
tree is presented that follows NVTree, however, it
incorporates a technique called "fingerprinting" to over- • The design should consider the heterogeneity of
come search overhead for nodes in NVM. In [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], another the modern storage landscape and leverage the
DRAM-NVM B+-tree is presented that segregates the data characteristics of the storage stack.
into cold and hot categories according to their access
fre
      </p>
    </sec>
    <sec id="sec-2">
      <title>5. Design Proposal</title>
      <p>The core functionalities of the B -tree include managing
the index structure in the root and internal nodes, as
well as maintaining the bufers to mitigate the cost of
the writes and updates. The suggested design primarily
targets enhancing these functionalities by
incorporating NVM and adding other enhancements to address the
goals mentioned in the previous section. A conceptual
diagram of a well-grown tree spread across diferent
storage media is presented in Figure 1.</p>
      <sec id="sec-2-1">
        <title>In the figure, the tree is distributed across DRAM,</title>
        <p>
          NVM, SSD, and HDD. The internal nodes are persisted
on NVM and SSD, and the leaf nodes are stored on SSD
and HDD3. The nodes are depicted using various
objects and colors to highlight diferences in their layouts
and structures. Nodes with a red border (in NVM and
SSD) represent hot nodes whose working copies exist in
DRAM (highlighted with a red box). When nodes are
moved from NVM to DRAM, they are transformed into
typical internal nodes with bufers. This process is
discussed in Section 5.1. Next, nodes filled with white color
and a gray border (in NVM) are also frequently accessed
nodes, but they do not meet the criteria, for example [
          <xref ref-type="bibr" rid="ref40">40</xref>
          ]4,
to be moved to DRAM. Unlike typical B -tree internal
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>3Node placement is determined by access frequency, with node</title>
        <p>
          layout (data structure) varying across diferent devices.
4The rule outlined in [
          <xref ref-type="bibr" rid="ref40">40</xref>
          ] serves as an illustrative example, yet
it requires adaptation to more realistically reflect contemporary
workloads and application environments.
        </p>
        <sec id="sec-2-2-1">
          <title>5.1. Indices in NVM</title>
          <p>
            In the suggested design, the internal nodes are
preferably5 stored on NVM. As previously discussed, the
internal nodes of a B -tree typically contain keys, pivots,
and messages. In contrast, the proposed design stipulates
that internal nodes in NVM contain only keys and pivots,
while messages are maintained in a shared centralized
bufer in NVM, as discussed in Section 5.2. The internal
nodes on NVM are directly accessed for lookups and the
centralized bufer for messages. This segregation ofers
the following benefits:
• Contrary to [
            <xref ref-type="bibr" rid="ref38">38</xref>
            ], which first copies the nodes
to DRAM from storage, including NVM, before
performing any processing on the nodes, direct
access in the suggested approach – on the nodes
that are located on NVM – would reduce transfer
costs and related computations.
• [
            <xref ref-type="bibr" rid="ref38">38</xref>
            ] experiences high fragmentation as it moves
nodes to and from memory for processing, and
employs copy-on-write technique to ensure the
consistency. In the suggested design, storing the
messages in a diferent data structure (discussed
in Section 5.2) reduces fragmentation. This is
because only the specific parts that need changes
would be updated, rather than the entire data set,
making it more eficient for small changes.
• Read queries, especially point queries, will be
faster because they will only access the needed
parts of the data on NVM, not the whole data
block.
          </p>
          <p>Lastly, the design assumes the frequently accessed
nodes (or hot nodes) would be in the main memory.
However, as the internal nodes on NVM follow a diferent
5A cold or rarely accessed node can be moved to slow storage.
structure and its data is stored across diferent data struc- and must be accessed individually for each key—unlike
tures, therefore, copying an internal node between NVM typical settings where messages benefit from spatial
localand DRAM requires transforming the nodes into the re- ity. Nevertheless, these settings can support write-heavy
spective layouts. For example, moving a node from NVM workloads, and the tree can be gradually adapted for
readto DRAM would require copying the keys and values heavy workloads by storing linked messages in a separate
from the node, and the respective messages from the node (e.g., bufer node) to achieve spatial locality.
shared bufer.</p>
        </sec>
        <sec id="sec-2-2-2">
          <title>5.3. Read Bufer for Values in DRAM</title>
        </sec>
        <sec id="sec-2-2-3">
          <title>5.2. Shared Bufer for Internal Nodes in NVM</title>
        </sec>
      </sec>
      <sec id="sec-2-3">
        <title>This improvement is induced by the shared bufer in</title>
        <p>
          NVM. A small centralized bufer in DRAM is maintained
In [
          <xref ref-type="bibr" rid="ref38">38</xref>
          ], and generally in the B -tree, updates involve first to store recent reads. This data structure would have
fetching the relevant nodes into main memory and dese- a significant impact on the frequently accessed values.
rializing them. Updates are then applied, and the nodes The recently queried values are temporarily stored in
are serialized and written back to the persistent media. this bufer, and an eviction policy is used to replace them
This process incurs significant I/O and computational with the recent ones.
costs, even for minor updates.
        </p>
        <p>
          In the proposed design, these costs are reduced by 5.4. In-place Writes
using a centralized bufer, which is an NVM-optimized
hash table [
          <xref ref-type="bibr" rid="ref41 ref42">41, 42</xref>
          ]. As mentioned previously, the
internal nodes on NVM share this centralized bufer to store
updates/messages. This bufer, a hash table, stores keys
and messages. Updates to a key in an internal node on
NVM are made directly in this hash table, where it retains
the most recent messages and integrates new messages
with existing ones, if necessary. Additionally, a second
hash table is maintained to link the messages with their
respective internal nodes on NVM, particularly useful
during flush operations to identify messages associated
with the donor node.
        </p>
        <p>Consequently, messages are added to both the bufer
and the auxiliary hash table without incurring additional
I/O or computational costs. Furthermore, during a flush
operation among the nodes in NVM, only the pointers in
the auxiliary hash table need updating, significantly
reducing I/O and computational expenses. The centralized
bufer ofers the following benefits:</p>
      </sec>
      <sec id="sec-2-4">
        <title>The proposition mentioned in this section is not partic</title>
        <p>ularly related to leveraging NVM; it could be applied to
nodes stored on NVM and other block devices.</p>
        <p>
          As already mentioned in [
          <xref ref-type="bibr" rid="ref38">38</xref>
          ], and typically in the B
tree, updates on nodes are performed in DRAM, incurring
significant I/O and computation costs. This workflow can
be simplified, and the costs can be avoided in some cases,
especially for small updates.
        </p>
        <p>The proposed change enables direct in-place updates
in the bufer segment of a B  -tree node on block storage
by writing update messages sequentially to available
ofsets until the bufer, which is half of the standard 4 MB
node size, is full. This method avoids the need to transfer
the entire node into DRAM for read-modify-write cycles
since updates are performed in granular block sizes of 4
KB. The updates in the bufer area are not normalized,
meaning there could be multiple update messages for a
single key. Normalization of messages occurs in DRAM
when reading the bufer’s contents, streamlining the
pro• Updates to the nodes on NVM do not require mov- cess and reducing I/O and computational costs
associing the entire node to DRAM; instead, they can ated with data serialization and deserialization. When
be made directly onto the shared bufer. This re- the bufer reaches capacity, the node is fetched into main
duces I/O and computations such as serialization memory for updates and written back to storage. A
conand deserialization. ceptual diagram is shown in Figure 2.
• This would help reduce the fragmentation
men</p>
        <p>tioned in the previous section. Keys/Pivots Buffer (Messages)
• The flush operation within the nodes on NVM Time t
only requires updating the pointers in the aux- Time t+1
iliary hash table, which again saves on I/O and Time t+2
computation. Time t+3</p>
      </sec>
      <sec id="sec-2-5">
        <title>The suggested change makes the tree more write</title>
        <p>optimized by saving I/O and computation costs, thus
allowing more time for batch updates to nodes on slow
storage. However, this might negatively afect range
queries since messages are scattered across the bufer
Batch 1</p>
        <p>Batch 2</p>
        <p>Batch 3</p>
        <p>Free Buffer</p>
      </sec>
      <sec id="sec-2-6">
        <title>The image illustrates the state of a node at diferent</title>
        <p>timestamps. At time ’t’, the bufer contains keys and
pivots, and its bufer part does not contain any messages
or updates. At time ’t+1’, a batch of messages in cyan is
moved from the parent node and written to the bufer.
Next, at time ’t+2’, a batch of messages in brown is again
lfushed down from the parent node and written to the
next available location in the bufer. Finally, at time ’t+3’,
the batch of messages in blue is moved to the node.</p>
        <p>On the other hand, in the typical design, each node
undergoes three read-modify-write cycles for updates,
which can lead to increased computation costs and
fragmentation, given that the node is retrieved from
persistent media or storage for each update.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>6. Use cases</title>
      <sec id="sec-3-1">
        <title>In this section, some important workflows, along with the impacts of the proposed design, are mentioned.</title>
        <sec id="sec-3-1-1">
          <title>6.1. Tree building</title>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>As previously discussed, in the typical programming</title>
        <p>model, the B -tree grows in DRAM using
memoryresident data structures and is persisted using
storageresident data structures.</p>
        <p>The suggested design begins with the same workflow.
However, the flow changes when the nodes are flushed to
the persistent media. In this design, the internal nodes are
by default flushed onto NVM where keys and pivots are
stored in an optimized node layout, and the messages are
moved to the centralized bufer as discussed in Section 5.2.
Later, when the tree needs to access the nodes on NVM,
their data is directly accessed from the respective data
structures, and only the nodes on other block storages are
copied into DRAM. That said, frequently accessed nodes
on NVM can be moved to DRAM to minimize latency.</p>
        <sec id="sec-3-2-1">
          <title>6.2. Read and update on a grown tree</title>
          <p>of the node are pushed into the centralized bufer in NVM.
This change in workflow allows the algorithm more time
and space to perform batch updates to subsequent nodes
and eventually to the leaf nodes. Furthermore, if the
descent of the messages only involves the internal nodes
on NVM, it involves merely updating the pointers in the
auxiliary hash table in NVM.</p>
        </sec>
        <sec id="sec-3-2-2">
          <title>6.3. Highly random workload</title>
          <p>This section discusses a scenario involving a highly
random workload. Consider a dense tree distributed across
various storage devices, with internal nodes on NVM and
leaf nodes on SSD and HDD. Here, small updates
accumulate in a central bufer in NVM. Furthermore, most
leaf nodes receive a single or few updates from their
preceding internal node in NVM, necessitating occasional
lfushing of updates to the leaf nodes. The primary
challenge with this flushing process is the significant write
amplification it causes. For instance, flushing 1000 small
updates from NVM to 1000 leaf nodes on SSD or HDD
would result in 1000 writes of 4 MB each (the default node
size). Additionally, this process also requires reading leaf
nodes into DRAM first, which incurs additional cost.</p>
          <p>There are two potential solutions to mitigate this
issue. First, a small bufer could be integrated into each
leaf node (as discussed in Section 5.4), allowing small
updates to be directly written to this bufer area without
needing to read the entire node into DRAM, deserialize,
serialize, and then write it back to storage. This approach
would still involve 1000 writes but would reduce the
data size of each write, saving on read and computation
costs. Second, instead of flushing small updates directly
to leaf nodes, messages related to the internal node in
NVM could be serialized and stored as a typical node
(e.g., bufer node). This strategy would result in a single
write. However, when accessing the internal node later,
its corresponding bufer node would need to be retrieved
from storage.</p>
          <p>This use case discusses a scenario where the hot nodes 7. Preliminary Experiments
are in DRAM, the internal nodes are on NVM, and the leaf
nodes, or the least accessed nodes, are on slow storage. In this section, we present a small (single-threaded)
exper</p>
          <p>The scan operations on the nodes in DRAM follow iment6, in favor of the proposed design, particularly the
the typical workoflw. However, the flow changes when granular reads on NVM. The experiments are performed
accessing nodes on NVM. First, they can be queried with- in a sandbox where NVM is accessed using diferent
apout being fetched into DRAM. Second, the centralized proaches and access patterns. In it, multiple Objects
bufer can be queried simultaneously. Only the nodes on are used to imitate the internal node structure (partially)
slow storage need to be moved into DRAM. where all the Objects contain 1024 Strings. However,</p>
          <p>
            Moreover, the update operation on nodes on NVM the sizes of the Strings vary in each Object, from 4 KB
does not require moving the nodes into DRAM. Contrary to 2 bytes, which is done to cover primitive data types
to [
            <xref ref-type="bibr" rid="ref38">38</xref>
            ], where all involved nodes must be in DRAM, in like ints.
the suggested design, when the child node is on NVM,
upon flush from the parent node, the respective messages
          </p>
        </sec>
      </sec>
      <sec id="sec-3-3">
        <title>6https://github.com/sajadkarim/libmem_sandbox.git (dimes_23.cpp)</title>
        <p>The experiments are conducted on a dual-socket server DRAM (Sequential) DRAM (Random)
featuring Intel® Xeon® Gold 5220R CPUs. Each CPU Direct (Sequential) Direct (Random)
has 24 physical cores, with each socket being equipped IInn--ddiirreecctt III((SSeeqquueennttiaial)l) IInn--ddiirreecctt III((RRaannddoomm))
with 4 PMem7 and 6 DRAM DIMMs. The experiments Bytes Read (Direct) Bytes Read (In-direct)
are run on NUMA node ’0’ to minimize memory access
(o5v.4e.r0h-e1a26d-sg, eannedricth).eTmheacPhMinemermunosduUlebuisnatcuce2s0s.e0d4.i3nLaTppS 600 4096
direct mode using fsdax8.</p>
        <p>The results are illustrated in Figure 3. The experiment )s 400
ibnavcoklivnesdiwferreitnitnsge1tt0in24gso, bejiethctesr troanNdVomMlyanodr sreeqaudeinngtiathlleym, i(eTmm200 64
for instance. This process is repeated for each Object
type, as indicated on the horizontal axis, using their
respective String sizes. The right vertical axis shows the 0
data moved to DRAM from NVM, and the left one shows 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
the time taken in milliseconds. Block Size (bytes)</p>
        <p>
          The direct approach reads (pmem_memcpy) the strings
in the objects one by one from NVM. Conversely, the
indirect-II approach first copies ( pmem_memcpy) the entire Figure 3: Accessing NVM in diferent settings and access
object into DRAM, then reads (memcpy) the strings in the patterns, and imitating the node reading behavior in [
          <xref ref-type="bibr" rid="ref38">38</xref>
          ].
objects one by one. It imitates the workflow in [
          <xref ref-type="bibr" rid="ref38">38</xref>
          ]. Next,
the in-direct-I approach simply copies (pmem_memcpy)
the entire object into DRAM without performing any pose. Additionally, the suggested designs do not account
other operation. Lastly, the DRAM case shows the time for the heterogeneity of the modern storage landscape,
taken by the individual strings to be copied to a difer- and those that do, fail to fully leverage NVM’s potential.
ent location in DRAM in the aforementioned in-direct-II The observed gap likely results from uncertainty about
approach. future NVM product availability, particularly following
        </p>
        <p>
          The case that took the least time, unsurprisingly, in- Intel’s discontinuation of its Optane Persistent Memory
volves copying data within DRAM. The next expected modules.
pattern is the in-direct-I case, which consumes the same The insights from this study will deepen our
underamount of time throughout the experiments as it copies standing of storage solutions that balance the speed of
the same volume of data each time from NVM. The in- DRAM with the capacity of NVMe SSDs. Particularly
direct-II case takes longer as it involves copying the data relevant is Compute Express Link (CXL), a leading
into DRAM, then copying the strings one by one to a dif- terconnect technology that enables rapid data transfers
ferent location in DRAM. The case that is of our interest and manages large, variable-speed memory pools. CXL’s
is the direct case. It performs read operations in small coherent memory protocol, which maintains data
conblocks (the size of the String in the respective Object sistency across local memory caches, positions it as a
type), yet it takes less time than the in-direct cases, ex- transformative technology for future enterprise data
storcept for 4096. However, the cost to serialize/deserialize age [
          <xref ref-type="bibr" rid="ref43">43</xref>
          ]. Therefore, the findings from this work remain
the node is not considered in the experiment. Therefore, relevant as they contribute to the development of storage
this case supports the design decision of keeping the heterogeneity-aware index structures like B-trees, which
data in optimized data structures in NVM and perform- are expected to benefit significantly from CXL’s
capabiling direct/small reads instead of copying entire nodes to ities. The suggested design proposal primarily targets
DRAM [
          <xref ref-type="bibr" rid="ref38">38</xref>
          ]. the incorporation of NVM to enhance the indexing and
bufering of the tree, and it significantly impacts various
8. Conclusion workflows of the tree. Nevertheless, the actual impact
can only be gauged after the tree is developed9. Lastly,
this paper is presented as preliminary work, and we
consider it a first step towards a heterogeneity-aware storage
engine.
        </p>
      </sec>
      <sec id="sec-3-4">
        <title>In this work, a design proposal for an NVM-optimized</title>
        <p>B -tree is presented. While various B-tree variants have
been developed to utilize the characteristics of NVM,
none have specifically optimized a B  -tree for this
pur</p>
      </sec>
      <sec id="sec-3-5">
        <title>7Intel® Optane™ DC Persistent Memory modules are configured in</title>
        <p>interleaved settings, and the block size is 4 KB.
8https://docs.pmem.io/ndctl-user-guide/managing-namespaces</p>
      </sec>
      <sec id="sec-3-6">
        <title>9The tree is currently in the development phase, and the status can</title>
        <p>be found at: https://github.com/sajadKarim/haldendb/</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Acknowledgments</title>
      <sec id="sec-4-1">
        <title>This work is part of SPP 2377 and funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) – 502268500.</title>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>T.</given-names>
            <surname>Mikolajick</surname>
          </string-name>
          , et al.,
          <article-title>FeRAM technology for high density applications</article-title>
          ,
          <source>Microelectronics Reliability</source>
          <volume>41</volume>
          (
          <year>2001</year>
          )
          <fpage>947</fpage>
          -
          <lpage>950</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Slaughter</surname>
          </string-name>
          , et al.,
          <article-title>Fundamentals of MRAM technology</article-title>
          ,
          <source>Journal of superconductivity 15</source>
          (
          <year>2002</year>
          )
          <fpage>19</fpage>
          -
          <lpage>25</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S. W.</given-names>
            <surname>Fong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. M.</given-names>
            <surname>Neumann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.-S. P.</given-names>
            <surname>Wong</surname>
          </string-name>
          ,
          <article-title>Phase-change memory - Towards a storage-class memory</article-title>
          ,
          <source>IEEE Transactions on Electron Devices</source>
          <volume>64</volume>
          (
          <year>2017</year>
          )
          <fpage>4374</fpage>
          -
          <lpage>4385</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Chen</surname>
          </string-name>
          , ReRAM: History, status, and future,
          <source>IEEE Transactions on Electron Devices</source>
          <volume>67</volume>
          (
          <year>2020</year>
          )
          <fpage>1420</fpage>
          -
          <lpage>1433</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>U.</given-names>
            <surname>Kazemi</surname>
          </string-name>
          ,
          <article-title>A Survey of Big Data: Challenges and Specifications</article-title>
          , CiiT
          <source>International Journal of Software Engineering and Technology</source>
          <volume>10</volume>
          (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>F.</given-names>
            <surname>Faerber</surname>
          </string-name>
          , et al.,
          <article-title>Main memory database systems</article-title>
          ,
          <source>Foundations and Trends® in Databases 8</source>
          (
          <year>2017</year>
          )
          <fpage>1</fpage>
          -
          <lpage>130</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>P.-Å.</given-names>
            <surname>Larson</surname>
          </string-name>
          , et al.,
          <article-title>Modern main-memory database systems</article-title>
          ,
          <source>Proceedings of the VLDB Endowment</source>
          <volume>9</volume>
          (
          <year>2016</year>
          )
          <fpage>1609</fpage>
          -
          <lpage>1610</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J.</given-names>
            <surname>DeBrabant</surname>
          </string-name>
          , et al.,
          <article-title>Anti-caching: A new approach to database management system architecture</article-title>
          ,
          <source>Proceedings of the VLDB Endowment</source>
          <volume>6</volume>
          (
          <year>2013</year>
          )
          <fpage>1942</fpage>
          -
          <lpage>1953</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Scargall</surname>
          </string-name>
          ,
          <article-title>Programming persistent memory: A comprehensive guide for developers</article-title>
          , Springer Nature,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Rudof</surname>
          </string-name>
          ,
          <article-title>Persistent memory programming</article-title>
          ,
          <source>Login: The Usenix Magazine</source>
          <volume>42</volume>
          (
          <year>2017</year>
          )
          <fpage>34</fpage>
          -
          <lpage>40</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S.</given-names>
            <surname>Venkataraman</surname>
          </string-name>
          , et al.,
          <article-title>Consistent and Durable Data Structures for Non-Volatile Byte-Addressable Memory</article-title>
          , in: FAST, volume
          <volume>11</volume>
          ,
          <year>2011</year>
          , pp.
          <fpage>61</fpage>
          -
          <lpage>75</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>S.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Q.</given-names>
            <surname>Jin</surname>
          </string-name>
          ,
          <string-name>
            <surname>Persistent</surname>
            <given-names>B</given-names>
          </string-name>
          +
          <article-title>-trees in non-volatile main memory</article-title>
          ,
          <source>Proceedings of the VLDB Endowment</source>
          <volume>8</volume>
          (
          <year>2015</year>
          )
          <fpage>786</fpage>
          -
          <lpage>797</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>J.</given-names>
            <surname>Yang</surname>
          </string-name>
          , et al.,
          <string-name>
            <surname>NV-Tree</surname>
          </string-name>
          :
          <article-title>A consistent and workload-adaptive tree structure for non-volatile memory</article-title>
          ,
          <source>IEEE Transactions on Computers</source>
          <volume>65</volume>
          (
          <year>2015</year>
          )
          <fpage>2169</fpage>
          -
          <lpage>2183</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>I.</given-names>
            <surname>Oukid</surname>
          </string-name>
          , et al.,
          <article-title>FPTree: A Hybrid SCM-DRAM Persistent and Concurrent B-Tree for Storage Class Memory</article-title>
          ,
          <source>in: Proceedings of the 2016 International Conference on Management of Data, SIGMOD '16</source>
          ,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computing Machinery, New York, NY, USA,
          <year>2016</year>
          . doi:
          <volume>10</volume>
          .1145/2882903.2915251.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zhan</surname>
          </string-name>
          , et al.,
          <string-name>
            <surname>HBtree: A Heterogeneous B</surname>
          </string-name>
          <article-title>+tree with Multigranularity for Hybrid NVM-SSD Storage</article-title>
          , in: 2022 IEEE International Conference on Networking,
          <source>Architecture and Storage (NAS)</source>
          ,
          <year>2022</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>4</lpage>
          . doi:
          <volume>10</volume>
          .1109/NAS55553.
          <year>2022</year>
          .
          <volume>9925539</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>J.</given-names>
            <surname>Liu</surname>
          </string-name>
          , et al.,
          <source>LB+Trees: Optimizing Persistent Index Performance on 3DXPoint Memory, Proc. VLDB Endow</source>
          .
          <volume>13</volume>
          (
          <year>2020</year>
          )
          <fpage>1078</fpage>
          -
          <lpage>1090</lpage>
          . URL: https://doi.org/10.14778/3384345.3384355.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Bender</surname>
          </string-name>
          , et al.,
          <string-name>
            <surname>An Introduction</surname>
          </string-name>
          to B
          <article-title>-trees</article-title>
          and WriteOptimization, login; magazine
          <volume>40</volume>
          (
          <year>2015</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>R.</given-names>
            <surname>Bayer</surname>
          </string-name>
          ,
          <string-name>
            <surname>E.</surname>
          </string-name>
          <article-title>McCreight, Organization and Maintenance of Large Ordered Indices</article-title>
          ,
          <source>in: Proceedings of the ACM SIGFIDET (now SIGMOD) Workshop on Data Description, Access and Control</source>
          , Association for Computing Machinery, New York, NY, USA,
          <year>1970</year>
          , p.
          <fpage>107</fpage>
          -
          <lpage>141</lpage>
          . doi:
          <volume>10</volume>
          .1145/1734663.1734671.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>O.</given-names>
            <surname>Rodeh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bacik</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          <article-title>Mason, BTRFS: The Linux B-tree filesystem</article-title>
          ,
          <source>ACM Transactions on Storage (TOS) 9</source>
          (
          <issue>2013</issue>
          )
          <fpage>1</fpage>
          -
          <lpage>32</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>B.</given-names>
            <surname>Djordjevic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Timcenko</surname>
          </string-name>
          ,
          <article-title>Ext4 file system in Linux environment: Features and performance analysis</article-title>
          ,
          <source>International Journal of Computers</source>
          <volume>6</volume>
          (
          <year>2012</year>
          )
          <fpage>37</fpage>
          -
          <lpage>45</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>D.</given-names>
            <surname>Comer</surname>
          </string-name>
          ,
          <article-title>Ubiquitous B-tree</article-title>
          ,
          <source>ACM Computing Surveys (CSUR) 11</source>
          (
          <year>1979</year>
          )
          <fpage>121</fpage>
          -
          <lpage>137</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>G.</given-names>
            <surname>Graefe</surname>
          </string-name>
          , et al.,
          <string-name>
            <surname>Modern</surname>
            <given-names>B-tree techniques</given-names>
          </string-name>
          ,
          <source>Foundations and Trends® in Databases 3</source>
          (
          <year>2011</year>
          )
          <fpage>203</fpage>
          -
          <lpage>402</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>M.</given-names>
            <surname>Jürgens</surname>
          </string-name>
          ,
          <source>Data Storage and Index Structures</source>
          , Springer Berlin Heidelberg, Berlin, Heidelberg,
          <year>2002</year>
          , pp.
          <fpage>15</fpage>
          -
          <lpage>34</lpage>
          . doi:
          <volume>10</volume>
          .1007/ 3-540-45935-
          <issue>9</issue>
          _
          <fpage>3</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <surname>Navathe</surname>
          </string-name>
          , et al.,
          <source>Fundamentals of database systems (6th Edition)</source>
          ,
          <source>Pearson Education. ISBN 9780136086208</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>O.-Y.</given-names>
            <surname>Khavrona</surname>
          </string-name>
          , B
          <article-title>-tree and cache-oblivious lookahead array: a comparative study of two write-optimised data structures</article-title>
          ,
          <source>Master's thesis</source>
          , University of Twente, The Netherlands,
          <year>2021</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>G. S.</given-names>
            <surname>Brodal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Fagerberg</surname>
          </string-name>
          ,
          <article-title>Lower bounds for external memory dictionaries</article-title>
          .,
          <source>in: SODA</source>
          , volume
          <volume>3</volume>
          ,
          <year>2003</year>
          , pp.
          <fpage>546</fpage>
          -
          <lpage>554</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>A. L.</given-names>
            <surname>Buchsbaum</surname>
          </string-name>
          , et al.,
          <article-title>On external memory graph traversal</article-title>
          .,
          <source>in: Symposium on Discrete Algorithms (SODA)</source>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>A.</given-names>
            <surname>Faraclas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Williams</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gokirmak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Silva</surname>
          </string-name>
          ,
          <article-title>Modeling of set and reset operations of phase-change memory cells</article-title>
          ,
          <source>IEEE electron device letters 32</source>
          (
          <year>2011</year>
          )
          <fpage>1737</fpage>
          -
          <lpage>1739</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <surname>A. K. Mishra</surname>
          </string-name>
          , et al.,
          <article-title>Architecting on-chip interconnects for stacked 3D STT-RAM caches in CMPs</article-title>
          ,
          <source>in: Proceedings of the International Symposium on Computer Architecture (ISCA)</source>
          , IEEE,
          <year>2011</year>
          , pp.
          <fpage>69</fpage>
          -
          <lpage>80</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>B.</given-names>
            <surname>Gervasi</surname>
          </string-name>
          ,
          <article-title>Will Carbon Nanotube Memory Replace DRAM?</article-title>
          ,
          <source>IEEE Micro 39</source>
          (
          <year>2019</year>
          )
          <fpage>45</fpage>
          -
          <lpage>51</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <surname>D. B. Strukov</surname>
            ,
            <given-names>G. S.</given-names>
          </string-name>
          <string-name>
            <surname>Snider</surname>
            ,
            <given-names>D. R.</given-names>
          </string-name>
          <string-name>
            <surname>Stewart</surname>
            ,
            <given-names>R. S.</given-names>
          </string-name>
          <string-name>
            <surname>Williams</surname>
          </string-name>
          ,
          <article-title>The missing memristor found</article-title>
          ,
          <source>nature</source>
          <volume>453</volume>
          (
          <year>2008</year>
          )
          <fpage>80</fpage>
          -
          <lpage>83</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <surname>Intel</surname>
          </string-name>
          , Intel® Optane™ DC Persistent Memory,
          <source>Last accessed: April</source>
          <volume>27</volume>
          ,
          <year>2024</year>
          . URL: https://www.intel.com/ content/www/us/en/products/docs/memory-storage/
          <article-title>optane-persistent-memory/overview</article-title>
          .html.
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <surname>H</surname>
          </string-name>
          .-Y. Cheng, et al.,
          <article-title>3D cross-point phase-change memory for storage-class memory</article-title>
          ,
          <source>Journal of Physics D: Applied Physics</source>
          <volume>52</volume>
          (
          <year>2019</year>
          )
          <fpage>473002</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>M.</given-names>
            <surname>Katsaragakis</surname>
          </string-name>
          , et al.,
          <article-title>Energy Consumption Evaluation of Optane DC Persistent Memory for Indexing Data Structures</article-title>
          ,
          <source>in: 2022 IEEE 29th International Conference on High Performance Computing</source>
          , Data, and
          <string-name>
            <surname>Analytics</surname>
          </string-name>
          (HiPC), IEEE,
          <year>2022</year>
          , pp.
          <fpage>75</fpage>
          -
          <lpage>84</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>B.</given-names>
            <surname>Kersting</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Salinga</surname>
          </string-name>
          ,
          <article-title>Exploiting nanoscale efects in phase change memories</article-title>
          ,
          <source>Faraday Discussions</source>
          <volume>213</volume>
          (
          <year>2019</year>
          )
          <fpage>357</fpage>
          -
          <lpage>370</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <surname>Intel</surname>
          </string-name>
          , Intel® Optane™ DC Persistent Memory,
          <source>Last accessed: April</source>
          <volume>27</volume>
          ,
          <year>2024</year>
          . URL: https://www.intel.com/content/www/us/ en/support/articles/000024320/memory-and-storage.html.
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>F.</given-names>
            <surname>Wiedemann</surname>
          </string-name>
          ,
          <article-title>Modern Storage Stack with Key-Value Store Interface and Snapshots Based on Copy-</article-title>
          <string-name>
            <surname>On-Write</surname>
            <given-names>B</given-names>
          </string-name>
          <article-title>-</article-title>
          <string-name>
            <surname>Trees</surname>
          </string-name>
          ,
          <source>Master's thesis</source>
          , Universität Hamburg,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <given-names>S.</given-names>
            <surname>Karim</surname>
          </string-name>
          , et al.,
          <article-title>Assessing non-volatile memory in modern heterogeneous storage landscape using a write-optimized storage stack</article-title>
          ,
          <source>in: Grundlagen von Datenbanken</source>
          ,
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [39]
          <string-name>
            <given-names>W.</given-names>
            <surname>Fuzong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Helin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Jian</surname>
          </string-name>
          ,
          <article-title>Dynamic data compression algorithm selection for big data processing on local file system</article-title>
          ,
          <source>in: Proceedings of the International Conference on Computer Science and Artificial Intelligence</source>
          ,
          <year>2018</year>
          , pp.
          <fpage>110</fpage>
          -
          <lpage>114</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [40]
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Putzolu</surname>
          </string-name>
          ,
          <article-title>The 5 minute rule for trading memory for disc accesses and the 10 byte rule for trading memory for cpu time</article-title>
          ,
          <source>in: Proceedings of the 1987 ACM SIGMOD international conference on Management of data</source>
          ,
          <year>1987</year>
          , pp.
          <fpage>395</fpage>
          -
          <lpage>398</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [41]
          <string-name>
            <given-names>L.</given-names>
            <surname>Vogel</surname>
          </string-name>
          , et al.,
          <article-title>Plush: A write-optimized persistent logstructured hash-table</article-title>
          ,
          <source>Proceedings of the VLDB Endowment</source>
          <volume>15</volume>
          (
          <year>2022</year>
          )
          <fpage>2895</fpage>
          -
          <lpage>2907</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          [42]
          <string-name>
            <given-names>B.</given-names>
            <surname>Lu</surname>
          </string-name>
          , et al.,
          <source>Dash: Scalable Hashing on Persistent Memory, Proceedings of the VLDB Endowment</source>
          <volume>13</volume>
          (
          <year>2020</year>
          )
          <fpage>1147</fpage>
          -
          <lpage>1161</lpage>
          . doi:
          <volume>10</volume>
          .14778/3389133.3389134.
        </mixed-citation>
      </ref>
      <ref id="ref43">
        <mixed-citation>
          [43]
          <string-name>
            <given-names>S.</given-names>
            <surname>Jain</surname>
          </string-name>
          , et al.,
          <article-title>Memory Sharing with CXL: Hardware and Software Design Approaches</article-title>
          ,
          <source>arXiv preprint 2404.03245</source>
          (
          <year>2024</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>