треки / 03
Бази даних і структури даних
Найщільніший і найретельніше вибудуваний кластер каналу. Віктор будує навчальний шлях, де кожне відео створює проблему, яку розвʼязує наступне: спершу сирий шок від навіщо взагалі індекси (той самий запит, у 60 000 разів швидше), потім дерева, щоб пояснити, чим індекс є фізично і чому диски вимагають неглибоких B+ дерев, далі нутрощі індексів (MySQL проти Postgres, кластерний проти heap, UUID проти автоінкременту — з експериментами на 16 млн рядків), потім місце, де B-дерева пасують, — пошук усередині рядка — яке відкриває повнотекстовий пошук та інвертовані індекси (побудовані вручну, стиснені й забенчмарчені проти рідного FULLTEXT у MySQL), і нарешті фільтри Блума як імовірнісний фінал, що обганяє кожну базу даних і кеш у цій драбині. Усе вимірюється наживо, все спирається на його історії з практики — насамперед на систему повнотекстового пошуку на 300 ТБ, яку він власноруч побудував у продакшені, — а повторюваний висновок і є тезою каналу: знай властивості й нутрощі своїх інструментів, а не хайп.
Порядок перегляду
-
1
жива демонстрація в MySQL: 3.3 с → 0.05 мс на 10 млн рядків, плюс де індекси ламаються
-
2
O(n*m) проти O(n+m), закодоване наживо на JS і спроєктоване на індекси баз даних
-
3Дерева. Пошук. Алгоритми. Бази даних середній
місток на дошці: бінарний пошук → BST → AVL → неглибокі дискові B+ дерева
-
4
хардкорні нутрощі з експериментами на 16 млн рядків: кластерний проти heap, MVCC, штрафи за UUID
-
5
вручну будує інвертований індекс продакшен-рівня через map-reduce; бʼє MySQL LIKE: 40 с → 21 мс
-
6
розділення на файл токенів + бінарні postings, n-грамні токенізатори, пошук через S3 Range-запити
-
7
фільтри Блума проти Map/MySQL/Redis/Memcached на 10 млн ключів, і каскад CRLite у Firefox
-
8
Q&A-продовження про UUID-ключі та стиснення інвертованого індексу
-
9Відповідаю на питання №2 середній
алгоритми в реальному житті: аналіз складності на ревʼю, історія з практики про топологічне сортування стека