2,577 research outputs found

    Concurrent Access Algorithms for Different Data Structures: A Research Review

    Get PDF
    Algorithms for concurrent data structure have gained attention in recent years as multi-core processors have become ubiquitous. Several features of shared-memory multiprocessors make concurrent data structures significantly more difficult to design and to verify as correct than their sequential counterparts. The primary source of this additional difficulty is concurrency. This paper provides an overview of the some concurrent access algorithms for different data structures

    Cache craftiness for fast multicore key-value storage

    Get PDF
    We present Masstree, a fast key-value database designed for SMP machines. Masstree keeps all data in memory. Its main data structure is a trie-like concatenation of B+-trees, each of which handles a fixed-length slice of a variable-length key. This structure effectively handles arbitrary-length possiblybinary keys, including keys with long shared prefixes. [superscript +]-tree fanout was chosen to minimize total DRAM delay when descending the tree and prefetching each tree node. Lookups use optimistic concurrency control, a read-copy-update-like technique, and do not write shared data structures; updates lock only affected nodes. Logging and checkpointing provide consistency and durability. Though some of these ideas appear elsewhere, Masstree is the first to combine them. We discuss design variants and their consequences. On a 16-core machine, with logging enabled and queries arriving over a network, Masstree executes more than six million simple queries per second. This performance is comparable to that of memcached, a non-persistent hash table server, and higher (often much higher) than that of VoltDB, MongoDB, and Redis.National Science Foundation (U.S.). (Award 0834415)National Science Foundation (U.S.). (Award 0915164)Quanta Computer (Firm

    Endurable Transient Inconsistency in Byte-Addressable Persistent B+-Tree

    Get PDF
    Department of Computer Science and EngineeringWith the emergence of byte-addressable persistent memory (PM), a cache line, instead of a page, is expected to be the unit of data transfer between volatile and non-volatile devices, but the failure-atomicity of write operations is guaranteed in the granularity of 8 bytes rather than cache lines. This granularity mismatch problem has generated interest in redesigning block-based data structures such as B+-trees. However, various methods of modifying B+-trees for PM degrade the efficiency of B+-trees, and attempts have been made to use in-memory data structures for PM. In this study, we develop Failure-Atomic ShifT (FAST) and Failure-Atomic In-place Rebalance (FAIR) algorithms to resolve the granularity mismatch problem. Every 8-byte store instruction used in the FAST and FAIR algorithms transforms a B+-tree into another consistent state or a {\it transient inconsistent} state that read operations can tolerate. By making read operations tolerate transient inconsistency, we can avoid expensive copy-on-write, logging, and even the necessity of read latches so that read transactions can be non-blocking. Our experimental results show that legacy B+-trees with FAST and FAIR schemes outperform the state-of-the-art persistent indexing structures by a large margin.clos

    Scalable Reliable SD Erlang Design

    Get PDF
    This technical report presents the design of Scalable Distributed (SD) Erlang: a set of language-level changes that aims to enable Distributed Erlang to scale for server applications on commodity hardware with at most 100,000 cores. We cover a number of aspects, specifically anticipated architecture, anticipated failures, scalable data structures, and scalable computation. Other two components that guided us in the design of SD Erlang are design principles and typical Erlang applications. The design principles summarise the type of modifications we aim to allow Erlang scalability. Erlang exemplars help us to identify the main Erlang scalability issues and hypothetically validate the SD Erlang design

    B-tree concurrency control and recovery in a client-server database management system

    Get PDF
    In this thesis, we consider the management of transactions in a data-shipping client-server database system in which the physical database is organized as a sparse B±tree or B-link-tree index. Client transactions perform their operations on cached copies of index and data pages. A client transaction can contain any number of operations of the form "fetch the first (or next) matching record", "insert a record", or "delete a record", where database records are identified by their primary keys. Efficient implementation of these operations on B±tree and B-link trees are developed for page-server systems. Our algorithms guarantee recoverability of the logical database operations as well as the tree-structure modifications on the physical B±tree or B-link tree. Record updates and structure modifications are logged using physiological log records, which are generated by clients and shipped to the server. During normal processing client transaction aborts and rollbacks are performed by the clients themselves. The server applies the write-ahead logging (WAL) protocol, and the steal and no-force buffering policies for data and index pages. The server performs the restart recovery after a system failure using an ARIES-based recovery protocol. Tree-structure modifications such as page splits and merges are defined as small atomic actions, where each action affects only two levels of a B±tree, or a single level of a B-link tree, while retaining the structural consistency and balance of the tree. In the case of a B-link tree, our balance conditions guarantee that all pages always contain at least m (a chosen minimum load factor) records and that the length of the search path of a database record is never greater than twice the tree height. Deletions are handled uniformly with insertions, so that underflows are disposed of by merging a page into its sibling page or redistributing the records between two sibling pages. Each structure modification is logged using a single physiological redo-only log record. Hence, structure modifications need never be undone during transaction rollback or restart recovery. Our algorithms allow for inter-transaction caching of data and index pages, so that a page can reside in a client cache even when no transaction is currently active at the client. Cache consistency is guaranteed by a replica-management protocol based on callback locking. In one set of our algorithms, both the concurrency-control and replica-management protocols operate at the page level. These algorithms are most suitable for object-oriented database and CAD/CAM applications, where long-lasting editing sessions are typical. Another set of our algorithms is designed for general database applications where concurrency and transaction throughput are the major issues. In these algorithms, transaction isolation is guaranteed by the key-range locking protocol, and replica management operates in adaptive manner, so that only the needed record may be called back. A leaf (data) page may now contain uncommitted updates by several client transactions, and uncommitted updates by one transaction on a leaf page may migrate to another page in structure modifications. Moreover, a record in a leaf page cached at one client can be updated by one transaction while other records in copies of the same page cached at other clients can simultaneously be fetched by other transactions.reviewe

    Maintaining consistency in distributed systems

    Get PDF
    In systems designed as assemblies of independently developed components, concurrent access to data or data structures normally arises within individual programs, and is controlled using mutual exclusion constructs, such as semaphores and monitors. Where data is persistent and/or sets of operation are related to one another, transactions or linearizability may be more appropriate. Systems that incorporate cooperative styles of distributed execution often replicate or distribute data within groups of components. In these cases, group oriented consistency properties must be maintained, and tools based on the virtual synchrony execution model greatly simplify the task confronting an application developer. All three styles of distributed computing are likely to be seen in future systems - often, within the same application. This leads us to propose an integrated approach that permits applications that use virtual synchrony with concurrent objects that respect a linearizability constraint, and vice versa. Transactional subsystems are treated as a special case of linearizability

    O2-tree: a shared memory resident index in multicore architectures

    Get PDF
    Shared memory multicore computer architectures are now commonplace in computing. These can be found in modern desktops and workstation computers and also in High Performance Computing (HPC) systems. Recent advances in memory architecture and in 64-bit addressing, allow such systems to have memory sizes of the order of hundreds of gigabytes and beyond. This now allows for realistic development of main memory resident database systems. This still requires the use of a memory resident index such as T-Tree, and the B+-Tree for fast access to the data items. This thesis proposes a new indexing structure, called the O2-Tree, which is essentially an augmented Red-Black Tree in which the leaf nodes are index data blocks that store multiple pairs of key and value referred to as \key-value" pairs. The value is either the entire record associated with the key or a pointer to the location of the record. The internal nodes contain copies of the keys that split blocks of the leaf nodes in a manner similar to the B+-Tree. O2-Tree structure has the advantage that: it can be easily reconstructed by reading only the lowest value of the key of each leaf node page. The size is su ciently small and thus can be dumped and restored much faster. Analysis and comparative experimental study show that the performance of the O2-Tree is superior to other tree-based index structures with respect to various query operations for large datasets. We also present results which indicate that the O2-Tree outperforms popular key-value stores such as BerkelyDB and TreeDB of Kyoto Cabinet for various workloads. The thesis addresses various concurrent access techniques for the O2-Tree for shared memory multicore architecture and gives analysis of the O2-Tree with respect to query operations, storage utilization, failover and recovery
    corecore