13. только от Васи только важное за период времени Последние 10 Over 9000 Следующие / предыдущие 10
14.
15.
16.
17. Что понадобится нам? Insert(item)Delete(item) GetRange(first, last, count)GetCount(first, last)
18.
19.
20. Показать последние 10 GetRange( new Key(userId, DateTime.MaxValue, Guid.MaxValue), new Key(userId, DateTime.MinValue, Guid.MinValue), 10)
21. Показать 10 предшествующих X GetRange( new Key(userId, X.Timestamp, X.ItemId), new Key(userId, DateTime.MinValue, Guid.MinValue), 10)
22. …пришедших от Васи GetRange( new Key(userId, vasya.Id, DateTime.Max, Guid.Max), new Key(userId, vasya.Id, DateTime.Min, Guid.Min), 10);
23. Важные, от Васи, с понедельника по пятницу GetRange( new Key(userId, vasyaId, Priority.High, monday, Guid.Min), new Key(userId, vasyaId, Priority.High, friday, Guid.Max) 10);
24. От Васи, Пети, и Кати GetRange(... vasyaId ..., M).Union( GetRange(... petyaId..., M).Union( GetRange(... katyaId..., M))) .OrderBy(k => k.Timestamp).Take(M); O(A * M * log N)А можно ли эффективнее?
25.
26.
27.
28. Все уже украдено до нас!BerkeleyDB db = BTreeDatabase.Open(“dbFile”, “dbName”, cfg); using(var cur = db.Cursor(…)) { if(cur.Move(newDatabaseEntry(keyBytes), true)) returntrue; } returnfalse;
29. 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
30. Все уже украдено до нас!Cassandra SlicePredicate: start, finish, count, reversed client.multiget_slice(… slicePredicate …) + масштабируемость + шардинг + …
31. Cassandra Под капотом: деревья в памяти + SSTables на диске Web site: http://cassandra.apache.org/