A Scalable In-Memory Skip-List Index for Key-Value Store

Total Page:16

File Type:pdf, Size:1020Kb

A Scalable In-Memory Skip-List Index for Key-Value Store S3: A Scalable In-memory Skip-List Index for Key-Value Store ∗ Jingtian Zhangy, Sai Wuy , Zeyuan Tany, Gang Cheny, Zhushi Chengz, Wei Caoz, Yusong Gaoz, Xiaojie Fengz yZhejiang University, Hangzhou, Zhejiang, China. zAlibaba Group, Hangzhou, Zhejiang, China. f11421015, wusai, 3160103832, [email protected] fzhushi.chengzs, mingsong.cw, jianchuan.gys, [email protected] ABSTRACT reason of adopting skip-list is two-fold. First, its mainte- Many new memory indexing structures have been proposed nance cost is low, since it does not require complex adjust- and outperform current in-memory skip-list index adopted ment operations in the tree-like index to keep balance. Sec- by LevelDB, RocksDB and other key-value systems. How- ond, when skip-list is full (4MB case in LevelDB), it can be ever, those new indexes cannot be easily intergrated with efficiently flushed to disk and merged with other disk data key-value systems, because most of them do not consider structures (e.g., SSTable). how the data can be efficiently flushed to disk. Some as- However, many new in-memory indexing structures [4, sumptions, such as fixed size key and value, are unrealistic 20, 26, 7, 30, 37, 42] are proposed, showing superior per- for real applications. In this paper, we present S3, a scal- formance than the classic skip-list index. Some core tech- able in-memory skip-list index for the customized version of niques, when designing those efficient new indexes, include RocksDB in Alibaba Cloud. S3 adopts a two-layer struc- cache-sensitive structure, SIMD speedup for multi-core ar- ture. In the top layer, a cache-sensitive structure is used chitecture, specific encoding of the key, latch-free concurrent to maintain a few guard entries to facilitate the search over access and other optimization approaches. Those sophisti- the skip-list. In the bottom layer, a semi-ordered skip-list cated designs allow the new indexes to achieve an order-of- index is built to support highly concurrent insertions and magnitude better performance than skip-list[41]. The prob- fast lookup and range query. To further improve the per- lem, on the other hand, is that they are difficult to be ap- formance, we train a neural model to select guard entries plied to existing disk-based key-value systems. Since many intelligently according to the data distribution and query services on Alibaba Cloud are supported by our customized distribution. Experiments on multiple datasets show that RocksDB (tailored for the cloud environment), we use the S3 achieves a comparable performance to other new mem- RocksDB as our example to illustrate the idea. ory indexing schemes, and can replace current in-memory All hash-based in-memory indices [4, 20] cannot be direct- skip-list of LevelDB and RocksDB to support huge volume ly integrated with the disk-part of LevelDB or RocksDB, be- of data. cause they do not maintain the keys in order. Consequently, they do not support range queries, or we need to transfor- PVLDB Reference Format: m the range queries into multiple lookup requests. Before Jingtian Zhang, Sai Wu, Zeyuan Tan, Gang Chen, Zhushi Cheng, flushing those data back to the disk as a SSTable, a sorting Wei Cao, Yusong Gao, Xiaojie Feng . S3: A Scalable In-memory process is invoked, which is costly and may block write and Skip-List Index for Key-Value Store. PVLDB, 12(12): 2183-2194, read operations. 2019. DOI: https://doi.org/10.14778/3352063.3352134 In RocksDB, the in-memory index is kept small (4MB- 64MB) so that it can be efficiently flushed to disk and does not trigger high compaction overhead 1. This strategy caus- 1. INTRODUCTION es the in-memory index to be frequently rebuilt and flushed Many popular key-value stores, such as LevelDB [8] , out. Many in-memory indices have not taken the case into RocksDB [13] and HBase [1], maintain an in-memory skip- consideration. To achieve a high in-memory performance, list [32] to support efficient data insertion and lookup. The keys and values are normally formatted to be friendly to the cache. Trie-based indices, such as ART [26], Judy [7] and ∗Sai Wu is the corresponding author. Masstree [30], split a key into multiple key slices to facili- tate the search and cache usage. Each slice contains a few bytes of the original key. For example, each layer in the Masstree is indexed by a different 8-byte slice of key. This This work is licensed under the Creative Commons Attribution- will significantly slow down the flushing process, as we need NonCommercial-NoDerivatives 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. For to assemble the keys back. Masstree also maintains the key any use beyond those covered by this license, obtain permission by emailing 1 [email protected]. Copyright is held by the owner/author(s). Publication rights Another reason is that skip-list does not perform well for licensed to the VLDB Endowment. large datasets. However, even if we replace skip-list with Proceedings of the VLDB Endowment, Vol. 12, No. 12 other indices, we still cannot maintain a too large in-memory ISSN 2150-8097. index, since the compaction overhead will become the bot- DOI: https://doi.org/10.14778/3352063.3352134 tleneck and block the insertion and lookup operations. 2183 and value separately and as a result, we need to merge them accessing disk data generates more overhead[39], many key- together before writing the data to disk. value stores adopt the log-structured merge tree (LSM) ar- Many other skip-list-based indices, such as CSSL [37] and chitecture[31]. PI [42, 43], will periodically restructure the index to opti- LevelDB is the most popular LSM key-value stores[8]. In mize the performance. During the restructuring process, the LevelDB, a small in-memory index is employed to support read and write operations are blocked. Besides, both indices fast data insertion and lookup. When the in-memory part, assume that keys are of the same size, so that a specified MemTable, is full, we will flush it back to the disk and cre- number of keys can be exactly processed by a SIMD vector. ate a new one. The disk files, SSTables, are also organized A single SIMD load instruction can load all those keys into as multiple levels. If the number of SSTables at one level a SIMD register. Such optimization may not be possible for reaches the predefined threshold, we will pick one SSTable real applications. On the other hand, FAST [25] addressed and merge it with the next level SSTables. This operation the problem by mapping variable length keys to 4-byte fixed is called compaction in LevelDB and may incur extremely size keys. But if we want to flush the memory data back to high processing overhead. the disk, we must reverse the mapping. Original LevelDB adopts a simple concurrent process s- In this paper, we present S3, a scalable in-memory skip- trategy. It buffers all insertions into a buffer and asks one list index for the customized version of RocksDB in Alibaba thread to conduct all insertions sequentially. Hyper-LevelDB Cloud. Usability is the first-class citizen in our design. S3 improves the strategy by allowing concurrent updates[6]. can be seamlessly integrated with the disk-part of LevelDB RocksDB, on the other hand, introduces a multi-threaded and RocksDB to replace their old skip-list index. S3 al- merging strategy for the disk components[13]. cLSM[21] re- so supports high throughput insertion, efficient lookup and places the global mutex lock with a global reader-writer lock range search. The performance of S3 is approaching to the and uses a concurrent memory component. Hence, opera- state-of-the-art in-memory index, ART [26], while it can be tions can proceed in parallel, but need to be blocked at the easily extended as a disk-based index. start and end of each concurrent compaction. Write ampli- S3 adopts a two-layer design. In the bottom layer, we fication is also an important performance issue for LSM-like build a semi-order skip-list, where keys inside one data entry systems. The LSM-trie data structure uses tries to organize are not required to be sorted. Data entries remain ordered. keys to reduce write amplification. However, it cannot sup- Namely, the maximal key of a data entry is smaller than port range queries[40]. RocksDB's universal compaction re- the minimal key of its successor. This strategy allows us duces write amplification by sacrificing read and range query to further improve the insertion performance, but may slow performance[13]. PebblesDB proposes a scheme to balance down the search process. To address the problem, we inten- the costs of write amplification and range query[33]. WiscK- tionally create some guard entries as shortcuts. Instead of ey directly separates values from keys, significantly reducing starting the search from the head of the skip-list, we jump write amplification regardless of the key distribution in the to the closest shortcut and resume our search, which sig- workload[29]. Most of the above works are orthogonal to nificantly reduces the search overhead. In the paper, we our improvements on the memory component. study the effect of guard entry selection on the performance Some works have been done on the memory componen- theoretically. t of LSM key-value stores. RocksDB offers two hash-based But searching for the proper shortcut introduces addition- memory components as options[13]. HashSkipList organizes al overhead. So in the top layer, we adopt a cache-sensitive data in a hash table with each hash bucket as a skip-list.
Recommended publications
  • Skip Lists: a Probabilistic Alternative to Balanced Trees
    Skip Lists: A Probabilistic Alternative to Balanced Trees Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorithms for insertion and deletion in skip lists are much simpler and significantly faster than equivalent algorithms for balanced trees. William Pugh Binary trees can be used for representing abstract data types Also giving every fourth node a pointer four ahead (Figure such as dictionaries and ordered lists. They work well when 1c) requires that no more than n/4 + 2 nodes be examined. the elements are inserted in a random order. Some sequences If every (2i)th node has a pointer 2i nodes ahead (Figure 1d), of operations, such as inserting the elements in order, produce the number of nodes that must be examined can be reduced to degenerate data structures that give very poor performance. If log2 n while only doubling the number of pointers. This it were possible to randomly permute the list of items to be in- data structure could be used for fast searching, but insertion serted, trees would work well with high probability for any in- and deletion would be impractical. put sequence. In most cases queries must be answered on-line, A node that has k forward pointers is called a level k node. so randomly permuting the input is impractical. Balanced tree If every (2i)th node has a pointer 2i nodes ahead, then levels algorithms re-arrange the tree as operations are performed to of nodes are distributed in a simple pattern: 50% are level 1, maintain certain balance conditions and assure good perfor- 25% are level 2, 12.5% are level 3 and so on.
    [Show full text]
  • Skip B-Trees
    Skip B-Trees Ittai Abraham1, James Aspnes2?, and Jian Yuan3 1 The Institute of Computer Science, The Hebrew University of Jerusalem, [email protected] 2 Department of Computer Science, Yale University, [email protected] 3 Google, [email protected] Abstract. We describe a new data structure, the Skip B-Tree that combines the advantages of skip graphs with features of traditional B-trees. A skip B-Tree provides efficient search, insertion and deletion operations. The data structure is highly fault tolerant even to adversarial failures, and allows for particularly simple repair mechanisms. Related resource keys are kept in blocks near each other enabling efficient range queries. Using this data structure, we describe a new distributed peer-to-peer network, the Distributed Skip B-Tree. Given m data items stored in a system with n nodes, the network allows to perform a range search operation for r consecutive keys that costs only O(logb m + r/b) where b = Θ(m/n). In addition, our distributed Skip B-tree search network has provable polylogarithmic costs for all its other basic operations like insert, delete, and node join. To the best of our knowledge, all previous distributed search networks either provide a range search operation whose cost is worse than ours or may require a linear cost for some basic operation like insert, delete, and node join. ? Supported in part by NSF grants CCR-0098078, CNS-0305258, and CNS-0435201. 1 Introduction Peer-to-peer systems provide a decentralized way to share resources among machines. An ideal peer-to-peer network should have such properties as decentralization, scalability, fault-tolerance, self-stabilization, load- balancing, dynamic addition and deletion of nodes, efficient query searching and exploiting spatial as well as temporal locality in searches.
    [Show full text]
  • On the Cost of Persistence and Authentication in Skip Lists*
    On the Cost of Persistence and Authentication in Skip Lists⋆ Micheal T. Goodrich1, Charalampos Papamanthou2, and Roberto Tamassia2 1 Department of Computer Science, University of California, Irvine 2 Department of Computer Science, Brown University Abstract. We present an extensive experimental study of authenticated data structures for dictionaries and maps implemented with skip lists. We consider realizations of these data structures that allow us to study the performance overhead of authentication and persistence. We explore various design decisions and analyze the impact of garbage collection and virtual memory paging, as well. Our empirical study confirms the effi- ciency of authenticated skip lists and offers guidelines for incorporating them in various applications. 1 Introduction A proven paradigm from distributed computing is that of using a large collec- tion of widely distributed computers to respond to queries from geographically dispersed users. This approach forms the foundation, for example, of the DNS system. Of course, we can abstract the main query and update tasks of such systems as simple data structures, such as distributed versions of dictionar- ies and maps, and easily characterize their asymptotic performance (with most operations running in logarithmic time). There are a number of interesting im- plementation issues concerning practical systems that use such distributed data structures, however, including the additional features that such structures should provide. For instance, a feature that can be useful in a number of real-world ap- plications is that distributed query responders provide authenticated responses, that is, answers that are provably trustworthy. An authenticated response in- cludes both an answer (for example, a yes/no answer to the query “is item x a member of the set S?”) and a proof of this answer, equivalent to a digital signature from the data source.
    [Show full text]
  • Exploring the Duality Between Skip Lists and Binary Search Trees
    Exploring the Duality Between Skip Lists and Binary Search Trees Brian C. Dean Zachary H. Jones School of Computing School of Computing Clemson University Clemson University Clemson, SC Clemson, SC [email protected] [email protected] ABSTRACT statically optimal [5] skip lists have already been indepen- Although skip lists were introduced as an alternative to bal- dently derived in the literature). anced binary search trees (BSTs), we show that the skip That the skip list can be interpreted as a type of randomly- list can be interpreted as a type of randomly-balanced BST balanced tree is not particularly surprising, and this has whose simplicity and elegance is arguably on par with that certainly not escaped the attention of other authors [2, 10, of today’s most popular BST balancing mechanisms. In this 9, 8]. However, essentially every tree interpretation of the paper, we provide a clear, concise description and analysis skip list in the literature seems to focus entirely on casting of the “BST” interpretation of the skip list, and compare the skip list as a randomly-balanced multiway branching it to similar randomized BST balancing mechanisms. In tree (e.g., a randomized B-tree [4]). Messeguer [8] calls this addition, we show that any rotation-based BST balancing structure the skip tree. Since there are several well-known mechanism can be implemented in a simple fashion using a ways to represent a multiway branching search tree as a BST skip list. (e.g., replace each multiway branching node with a minia- ture balanced BST, or replace (first child, next sibling) with (left child, right child) pointers), it is clear that the skip 1.
    [Show full text]
  • Investigation of a Dynamic Kd Search Skip List Requiring [Theta](Kn) Space
    Hcqulslmns ana nqulstwns et Bibliographie Services services bibliographiques 395 Wellington Street 395, rue Wellington Ottawa ON KIA ON4 Ottawa ON KIA ON4 Canada Canada Your file Votre réference Our file Notre reldrence The author has granted a non- L'auteur a accordé une licence non exclusive licence allowing the exclusive permettant a la National Libraq of Canada to Bibliothèque nationale du Canada de reproduce, loan, distribute or sell reproduire, prêter, distribuer ou copies of this thesis in microforni, vendre des copies de cette thèse sous paper or electronic formats. la forme de microfiche/film, de reproduction sur papier ou sur format électronique. The author retains ownership of the L'auteur conserve la propriété du copyright in this thesis. Neither the droit d'auteur qui protège cette thèse. thesis nor substantial extracts fiom it Ni la thèse ni des extraits substantiels may be printed or othexwise de celle-ci ne doivent être imprimés reproduced without the author's ou autrement reproduits sans son permission. autorisation. A new dynamic k-d data structure (supporting insertion and deletion) labeled the k-d Search Skip List is developed and analyzed. The time for k-d semi-infinite range search on n k-d data points without space restriction is shown to be SZ(k1og n) and O(kn + kt), and there is a space-time trade-off represented as (log T' + log log n) = Sà(n(1og n)"e), where 0 = 1 for k =2, 0 = 2 for k 23, and T' is the scaled query time. The dynamic update tirne for the k-d Search Skip List is O(k1og a).
    [Show full text]
  • Comparison of Dictionary Data Structures
    A Comparison of Dictionary Implementations Mark P Neyer April 10, 2009 1 Introduction A common problem in computer science is the representation of a mapping between two sets. A mapping f : A ! B is a function taking as input a member a 2 A, and returning b, an element of B. A mapping is also sometimes referred to as a dictionary, because dictionaries map words to their definitions. Knuth [?] explores the map / dictionary problem in Volume 3, Chapter 6 of his book The Art of Computer Programming. He calls it the problem of 'searching,' and presents several solutions. This paper explores implementations of several different solutions to the map / dictionary problem: hash tables, Red-Black Trees, AVL Trees, and Skip Lists. This paper is inspired by the author's experience in industry, where a dictionary structure was often needed, but the natural C# hash table-implemented dictionary was taking up too much space in memory. The goal of this paper is to determine what data structure gives the best performance, in terms of both memory and processing time. AVL and Red-Black Trees were chosen because Pfaff [?] has shown that they are the ideal balanced trees to use. Pfaff did not compare hash tables, however. Also considered for this project were Splay Trees [?]. 2 Background 2.1 The Dictionary Problem A dictionary is a mapping between two sets of items, K, and V . It must support the following operations: 1. Insert an item v for a given key k. If key k already exists in the dictionary, its item is updated to be v.
    [Show full text]
  • An Experimental Study of Dynamic Biased Skip Lists
    AN EXPERIMENTAL STUDY OF DYNAMIC BIASED SKIP LISTS by Yiqun Zhao Submitted in partial fulfillment of the requirements for the degree of Master of Computer Science at Dalhousie University Halifax, Nova Scotia August 2017 ⃝c Copyright by Yiqun Zhao, 2017 Table of Contents List of Tables ................................... iv List of Figures .................................. v Abstract ...................................... vii List of Abbreviations and Symbols Used .................. viii Acknowledgements ............................... ix Chapter 1 Introduction .......................... 1 1.1 Dynamic Data Structures . .2 1.1.1 Move-to-front Lists . .3 1.1.2 Red-black Trees . .3 1.1.3 Splay Trees . .3 1.1.4 Skip Lists . .4 1.1.5 Other Biased Data Structures . .7 1.2 Our Work . .8 1.3 Organization of The Thesis . .8 Chapter 2 A Review of Different Search Structures ......... 10 2.1 Move-to-front Lists . 10 2.2 Red-black Trees . 11 2.3 Splay Trees . 14 2.3.1 Original Splay Tree . 14 2.3.2 Randomized Splay Tree . 18 2.3.3 W-splay Tree . 19 2.4 Skip Lists . 20 Chapter 3 Dynamic Biased Skip Lists ................. 24 3.1 Biased Skip List . 24 3.2 Modifications . 29 3.2.1 Improved Construction Scheme . 29 3.2.2 Lazy Update Scheme . 32 ii 3.3 Hybrid Search Algorithm . 34 Chapter 4 Experiments .......................... 36 4.1 Experimental Setup . 38 4.2 Analysis of Different C1 Sizes . 40 4.3 Analysis of Varying Value of t in H-DBSL . 46 4.4 Comparison of Data Structures using Real-World Data . 49 4.5 Comparison with Data Structures using Generated Data . 55 Chapter 5 Conclusions ..........................
    [Show full text]
  • A Set Intersection Algorithm Via X-Fast Trie
    Journal of Computers A Set Intersection Algorithm Via x-Fast Trie Bangyu Ye* National Engineering Laboratory for Information Security Technologies, Institute of Information Engineering, Chinese Academy of Sciences, Beijing, 100091, China. * Corresponding author. Tel.:+86-10-82546714; email: [email protected] Manuscript submitted February 9, 2015; accepted May 10, 2015. doi: 10.17706/jcp.11.2.91-98 Abstract: This paper proposes a simple intersection algorithm for two sorted integer sequences . Our algorithm is designed based on x-fast trie since it provides efficient find and successor operators. We present that our algorithm outperforms skip list based algorithm when one of the sets to be intersected is relatively ‘dense’ while the other one is (relatively) ‘sparse’. Finally, we propose some possible approaches which may optimize our algorithm further. Key words: Set intersection, algorithm, x-fast trie. 1. Introduction Fast set intersection is a key operation in the context of several fields when it comes to big data era [1], [2]. For example, modern search engines use the set intersection for inverted posting list which is a standard data structure in information retrieval to return relevant documents. So it has been studied in many domains and fields [3]-[8]. One of the most typical situations is Boolean query which is required to retrieval the documents that contains all the terms in the query. Besides, set intersection is naturally a key component of calculating the Jaccard coefficient of two sets, which is defined by the fraction of size of intersection and union. In this paper, we propose a new algorithm via x-fast trie which is a kind of advanced data structure.
    [Show full text]
  • Leftist Heap: Is a Binary Tree with the Normal Heap Ordering Property, but the Tree Is Not Balanced. in Fact It Attempts to Be Very Unbalanced!
    Leftist heap: is a binary tree with the normal heap ordering property, but the tree is not balanced. In fact it attempts to be very unbalanced! Definition: the null path length npl(x) of node x is the length of the shortest path from x to a node without two children. The null path lengh of any node is 1 more than the minimum of the null path lengths of its children. (let npl(nil)=-1). Only the tree on the left is leftist. Null path lengths are shown in the nodes. Definition: the leftist heap property is that for every node x in the heap, the null path length of the left child is at least as large as that of the right child. This property biases the tree to get deep towards the left. It may generate very unbalanced trees, which facilitates merging! It also also means that the right path down a leftist heap is as short as any path in the heap. In fact, the right path in a leftist tree of N nodes contains at most lg(N+1) nodes. We perform all the work on this right path, which is guaranteed to be short. Merging on a leftist heap. (Notice that an insert can be considered as a merge of a one-node heap with a larger heap.) 1. (Magically and recursively) merge the heap with the larger root (6) with the right subheap (rooted at 8) of the heap with the smaller root, creating a leftist heap. Make this new heap the right child of the root (3) of h1.
    [Show full text]
  • Chapter 10: Efficient Collections (Skip Lists, Trees)
    Chapter 10: Efficient Collections (skip lists, trees) If you performed the analysis exercises in Chapter 9, you discovered that selecting a bag- like container required a detailed understanding of the tasks the container will be expected to perform. Consider the following chart: Dynamic array Linked list Ordered array add O(1)+ O(1) O(n) contains O(n) O(n) O(log n) remove O(n) O(n) O(n) If we are simply considering the cost to insert a new value into the collection, then nothing can beat the constant time performance of a simple dynamic array or linked list. But if searching or removals are common, then the O(log n) cost of searching an ordered list may more than make up for the slower cost to perform an insertion. Imagine, for example, an on-line telephone directory. There might be several million search requests before it becomes necessary to add or remove an entry. The benefit of being able to perform a binary search more than makes up for the cost of a slow insertion or removal. What if all three bag operations are more-or-less equal? Are there techniques that can be used to speed up all three operations? Are arrays and linked lists the only ways of organizing a data for a bag? Indeed, they are not. In this chapter we will examine two very different implementation techniques for the Bag data structure. In the end they both have the same effect, which is providing O(log n) execution time for all three bag operations.
    [Show full text]
  • CMSC 420: Lecture 7 Randomized Search Structures: Treaps and Skip Lists
    CMSC 420 Dave Mount CMSC 420: Lecture 7 Randomized Search Structures: Treaps and Skip Lists Randomized Data Structures: A common design techlque in the field of algorithm design in- volves the notion of using randomization. A randomized algorithm employs a pseudo-random number generator to inform some of its decisions. Randomization has proved to be a re- markably useful technique, and randomized algorithms are often the fastest and simplest algorithms for a given application. This may seem perplexing at first. Shouldn't an intelligent, clever algorithm designer be able to make better decisions than a simple random number generator? The issue is that a deterministic decision-making process may be susceptible to systematic biases, which in turn can result in unbalanced data structures. Randomness creates a layer of \independence," which can alleviate these systematic biases. In this lecture, we will consider two famous randomized data structures, which were invented at nearly the same time. The first is a randomized version of a binary tree, called a treap. This data structure's name is a portmanteau (combination) of \tree" and \heap." It was developed by Raimund Seidel and Cecilia Aragon in 1989. (Remarkably, this 1-dimensional data structure is closely related to two 2-dimensional data structures, the Cartesian tree by Jean Vuillemin and the priority search tree of Edward McCreight, both discovered in 1980.) The other data structure is the skip list, which is a randomized version of a linked list where links can point to entries that are separated by a significant distance. This was invented by Bill Pugh (a professor at UMD!).
    [Show full text]
  • Skiplist Handout
    Introduction to Algorithms March 18, 2004 Massachusetts Institute of Technology 6.046J/18.410J Professors Erik Demaine and Shafi Goldwasser Handout 14 Lecture Notes on Skip Lists Lecture 12 — March 18, 2004 Erik Demaine Balanced tree structures we know at this point: B-trees, red-black trees, treaps. Could you implement them right now? Probably, with time... but without looking up any details in a book? Skip lists are a simple randomized structure you’ll never forget. Starting from scratch Initial goal: just searches — ignore updates (Insert/Delete) for now Simplest data structure: linked list ¡£¢¥¤§¦ Sorted linked list: time 2 sorted linked lists: – Each element can appear in 1 or both lists – How to speed up search? – Idea: Express and local subway lines – Example: 14 , 23, 34 , 42 , 50, 59, 66, 72 , 79, 86, 96 , 103, 110, 116, 125 (What is this sequence?) – Boxed values are “express” stops; others are normal stops – Can quickly jump from express stop to next express stop, or from any stop to next normal stop – Represented as two linked lists, one for express stops and one for all stops: 14 34 42 72 96 14 23 34 42 50 59 66 72 79 86 96 103 110 116 125 – Every element is in linked list 2 (LL2); some elements also in linked list 1 (LL1) – Link equal elements between the two levels – To search, first search in LL1 until about to go too far, then go down and search in LL2 2 Handout 14: Lecture Notes on Skip Lists – Cost: ¢¥¤¦¤ ¦ ¡ ¢ ¢¥¤¦¤¨§ ¦ © ¢¥¤¦¤¨§ ¦ © ¡£¢ ¡£¢ ¢¥¤¦¤¨§ ¦ ¢¥¤¦¤¨§ ¦ ¡ ¢ ¡£¢ – Minimized when ¢¥¤¦¤¨§ ¦ ¡£¢ ¢¤¦¤§ ¦ ¡ ¢ ¢¥¤¦¤¨§
    [Show full text]