Skip graphs are a generalization of skip lists that allow for multiple concurrent lists at each level. Nodes in a skip graph belong to lists based on the prefix of their random membership vector. Search, insert, and delete operations in skip graphs take expected O(log n) time by traversing neighbor pointers at successive levels. Skip graphs can be used to build peer-to-peer data storage systems with properties like fault tolerance and load balancing.