1 / 31

Специализированные высокопроизводительные индексы

3 -я конференция .NET разработчиков 2 5 сентября 2011. Специализированные высокопроизводительные индексы. Егоров Павел СКБ Контур, Екатеринбург http://skbkontur.ru/career/vacancies. Почему SQL – отстой? :-) Типовые задачи А лгоритмы и структуры данных: решение типовых задач

louvain
Download Presentation

Специализированные высокопроизводительные индексы

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3-я конференция .NET разработчиков 25 сентября 2011 Специализированные высокопроизводительные индексы Егоров Павел СКБ Контур, Екатеринбург http://skbkontur.ru/career/vacancies

  2. Почему SQL – отстой? :-) • Типовые задачи • Алгоритмы и структуры данных: решение типовых задач • «Все уже украдено до нас!» • Что осталось за кадром?

  3. +Structured Query Language • + Атомарность и изоляция • + Контроль целостности

  4. Купить более крутую железяку • Потом ещё круче! • И ещё…

  5. Радикальное упрощение запросов • Шардинг

  6. Structured Query Language • Атомарность и изоляция • Контроль целостности Structured Query Language Атомарность и изоляция Контроль целостности

  7. только от Васи только важное за период времени Последние 10 Over 9000 Следующие / предыдущие 10

  8. Что могут деревья поиска? • Search, Add, Remove O(log N) • Итерирование в порядке возрастания переход на следующий элемент – O(1) • Порядковый номер ключа O(log N)

  9. Что понадобится нам? • Insert(item)Delete(item) • GetRange(first, last, count)GetCount(first, last)

  10. Показать последние 10 • GetRange( • new Key(userId, DateTime.MaxValue, Guid.MaxValue), • new Key(userId, DateTime.MinValue, Guid.MinValue), • 10)

  11. Показать 10 предшествующих X • GetRange( • new Key(userId, X.Timestamp, X.ItemId), • new Key(userId, DateTime.MinValue, Guid.MinValue), • 10)

  12. …пришедших от Васи • GetRange( • new Key(userId, vasya.Id, DateTime.Max, Guid.Max), • new Key(userId, vasya.Id, DateTime.Min, Guid.Min), • 10);

  13. Важные, от Васи, с понедельника по пятницу • GetRange( • new Key(userId, vasyaId, Priority.High, • monday, Guid.Min), • new Key(userId, vasyaId, Priority.High, • friday, Guid.Max) • 10);

  14. От Васи, Пети, и Кати • GetRange(... vasyaId ..., M).Union( • GetRange(... petyaId..., M).Union( • GetRange(... katyaId..., M))) • .OrderBy(k => k.Timestamp).Take(M); O(A * M * log N)А можно ли эффективнее?

  15. HEAP • Вставка – O(log N) • Извлечение минимального элемента O(log N)

  16. IEnumerable<Key>GetRange(string author); var heap = new Heap<IEnumerator<Key>>(); foreach(vara in authors){ heap.Add(GetRange(a).GetEnumerator()); for(int j=0; j<M; k++){ vari = heap.ExtractRoot(); yieldreturni.Current; if(i.MoveNext()) heap.Add(i); } O(A * log N + M * log A) было O(A * M * log N)

  17. Все уже украдено до нас!BerkeleyDB • db = BTreeDatabase.Open(“dbFile”, “dbName”, cfg); • using(var cur = db.Cursor(…)) • { • if(cur.Move(newDatabaseEntry(keyBytes), true)) • returntrue; • } • returnfalse;

  18. Berkeley DB • Под капотом B+Tree (или Hash) • Whitepaper: http://www.usenix.org/event/usenix99/full_papers/olson/olson.pdf • Web site: http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html

  19. Все уже украдено до нас!Cassandra • SlicePredicate: start, finish, count, reversed • client.multiget_slice(… slicePredicate …) • + масштабируемость • + шардинг • + …

  20. Cassandra • Под капотом: • деревья в памяти + SSTables на диске • Web site: • http://cassandra.apache.org/

  21. Все уже украдено до нас! • Составные индексы SQL :-)

  22. Что осталось за кадром • Надежное хранение • Масштабирование • Отказоустойчивость • Шардинг • Как жить с отложенной консистентностью? • …

  23. Конец! • Павел Егоров • СКБ Контур, Екатеринбург • pe@skbkontur.ru • twitter.com/xoposhiy

More Related