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

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

Upload: louvain

Post on 15-Jan-2016

68 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

индексыЕгоров Павел

СКБ Контур, Екатеринбургhttp://skbkontur.ru/career/vacancies

3-я конференция .NET разработчиков25 сентября 2011

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

1. Почему SQL – отстой? :-)2. Типовые задачи

3. Алгоритмы и структуры данных: решение типовых задач

4. «Все уже украдено до нас!»5. Что осталось за кадром?

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

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

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

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

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

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

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

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

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

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

Следующие / предыдущие 10

только от Васитолько важноеза период времени

Последние 10

Over 9000

Page 10: Специализированные высокопроизводительные индексы
Page 11: Специализированные высокопроизводительные индексы
Page 12: Специализированные высокопроизводительные индексы

Что могут деревья поиска?

• Search, Add, RemoveO(log N)

• Итерирование в порядке возрастанияпереход на следующий элемент – O(1)

• Порядковый номер ключаO(log N)

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

Что понадобится нам?

Insert(item)Delete(item)

GetRange(first, last, count)GetCount(first, last)

Page 14: Специализированные высокопроизводительные индексы
Page 15: Специализированные высокопроизводительные индексы
Page 16: Специализированные высокопроизводительные индексы

Показать последние 10

GetRange(new Key(userId, DateTime.MaxValue, Guid.MaxValue),new Key(userId, DateTime.MinValue, Guid.MinValue), 10)

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

Показать 10 предшествующих X

GetRange(new Key(userId, X.Timestamp, X.ItemId),new Key(userId, DateTime.MinValue, Guid.MinValue), 10)

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

…пришедших от Васи

GetRange(new Key(userId, vasya.Id, DateTime.Max, Guid.Max),new Key(userId, vasya.Id, DateTime.Min, Guid.Min), 10);

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

Важные, от Васи, с понедельника по пятницу

GetRange(new Key(userId, vasyaId, Priority.High,

monday, Guid.Min),new Key(userId, vasyaId, Priority.High,

friday, Guid.Max)10);

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

От Васи, Пети, и Кати

GetRange(... vasyaId ..., M).Union (GetRange(... petyaId ..., M).Union(

GetRange(... katyaId ..., M))).OrderBy(k => k.Timestamp).Take(M);

O(A * M * log N) А можно ли эффективнее?

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

HEAP

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

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

IEnumerable<Key> GetRange (string author);

var heap = new Heap<IEnumerator<Key>>();foreach(var a in authors){

heap.Add(GetRange(a).GetEnumerator()); for(int j=0; j<M; k++){

var i = heap.ExtractRoot(); yield return i.Current; if (i.MoveNext())

heap.Add(i);}

O(A * log N + M * log A)было O(A * M * log N)

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

Все уже украдено до нас!BerkeleyDB

db = BTreeDatabase.Open(“dbFile”, “dbName”, cfg);

using (var cur = db.Cursor(…)) {if (cur.Move(new DatabaseEntry(keyBytes), true))

return true;} return false;

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

Все уже украдено до нас!Cassandra

SlicePredicate: start, finish, count, reversedclient.multiget_slice(… slicePredicate …)

+ масштабируемость+ шардинг+ …

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

Cassandra

Под капотом: деревья в памяти + SSTables на диске

Web site:http://cassandra.apache.org/

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

Все уже украдено до нас!

Составные индексы SQL :-)

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

Что осталось за кадром

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

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

Конец!

Павел ЕгоровСКБ Контур, Екатеринбург

[email protected]/xoposhiy