12. только от Васитолько важноеза период времениПоследние 10Over 9000Следующие / предыдущие 10
14. Что могут деревья поиска?Search, Add, RemoveO(log N)Итерирование в порядке возрастанияпереход на следующий элемент – O(1)Порядковый номер ключаO(log N)
18. Показать последние 10GetRange( new Key(userId, DateTime.MaxValue, Guid.MaxValue), new Key(userId, DateTime.MinValue, Guid.MinValue), 10)
19. Показать 10 предшествующих XGetRange( new Key(userId, X.Timestamp, X.ItemId), new Key(userId, DateTime.MinValue, Guid.MinValue), 10)
20. …пришедших от ВасиGetRange( new Key(userId, vasya.Id, DateTime.Max, Guid.Max), new Key(userId, vasya.Id, DateTime.Min, Guid.Min), 10);
21. Важные, от Васи, с понедельника по пятницуGetRange( new Key(userId, vasyaId, Priority.High, friday, Guid.Min), new Key(userId, vasyaId, Priority.High,monday, Guid.Max) 10);
22. От Васи, Пети, и КатиGetRange(... vasyaId ..., M).Union(GetRange(... petyaId..., M).Union(GetRange(... katyaId..., M))).OrderBy(k => k.Timestamp).Take(M);O(A * M * log N)А можно ли эффективнее?
24. Извлечение минимального элемента O(log N)IEnumerable<Key>GetRange(string author);var heap = new Heap<IEnumerator<Key>>();foreach(vara inauthors)heap.Add(GetRange(a).GetEnumerator()); for(int j=0; j<M; j++){ vari = heap.ExtractRoot(); yieldreturni.Current; if(i.MoveNext()) heap.Add(i);}было O(A * M * log N)O(A * log N + M * log A)
25. Все уже украдено до нас!BerkeleyDBdb = BTreeDatabase.Open(“dbFile”, “dbName”, cfg); using(var cur = db.Cursor(…)) {if(cur.Move(newDatabaseEntry(keyBytes), true)) returntrue;} returnfalse;
26. Berkeley DBПод капотом B+Tree (или Hash)Whitepaper: http://www.usenix.org/event/usenix99/full_papers/olson/olson.pdfWeb site: http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html
27. Все уже украдено до нас!CassandraSlicePredicate: start, finish, count, reversedclient.multiget_slice(… slicePredicate …)+ масштабируемость+ шардинг+ …
30. Что осталось за кадромНадежное хранениеМасштабированиеОтказоустойчивостьШардингКак жить с отложенной консистентностью?…
31. Общая картинкаТут была импровизация с рисованием маркерами на доске :-)Я рассказал о том, как все устроено в целом, как взаимодействую индексы и хранилище и т.п.
32. Общая картинкаЕсть ещё одна презентация, немного раскрывающая тему общей картинки:http://www.slideshare.net/xoposhiy/highload-dump-2011