[S02E06] Проектирование хранилища типа "ключ-значение" | BookClub DOTNET

BookClub DotNet Season 2 #6
КАЖЕТСЯ, ЭТО СУНДУК С СОКРОВИЩАМИ!
- У тебя есть ключик?
- У меня есть кое-что получше: кэш ключика!
Ну что ж, посмотрим, как там хранится наш ключик и сможем ли мы быстро открыть сундук и слинять с монетами!
Ведущие:
- Роман Гашков
- Григорий Кузьмин
- Роман Щербаков
Дизайн и иллюстрации:
- Серафима Лебедева
Выпуск на KZread: • [S02E06] Проектировани...
Выпуск на других платформах: bookclub-dotnet.mave.digital/...
Канал книжного клуба: t.me/bookclubdotnet
Сайт книжного клуба: bookclub.dotnet.ru
Книга
System Design. Подготовка к сложному интервью (www.piter.com/product/system-...)
The following music was used for this media project:
Music: Ambient Corporate by WinnieTheMoog
Free download: filmmusic.io/song/6188-ambien...
License (CC BY 4.0): filmmusic.io/standard-license
Ключевые слова: архитектура, системный дизайн, алгоритмы, паттерны, программирование, собеседование, книга, книжный клуб, architecture, system design, algorithms, patterns, programming, interview, book, bookclub

Пікірлер: 22

  • @redkostia
    @redkostia4 ай бұрын

    Дерево меркла - в учебниках по математике для первоклашек у дочки проходил)

  • @daredever

    @daredever

    4 ай бұрын

    а как они это детям объясняют?

  • @redkostia

    @redkostia

    4 ай бұрын

    @@daredever у них это называется арифметическая пирамида, и она нужна, что бы состав чисел изучать, на какие слагаемые можно число разложить)

  • @redkostia

    @redkostia

    4 ай бұрын

    ​​@@daredeverя про дерево меркла сам узнал в позапрошлом году, когда внезапно пришлось смарт контракт пилить😂 надо было розсчитать роялтис с картинки. Типа картинкой владеют несколько организаций, которые сами потом шарят доход между акционерами. В итоге для верификации перед расчетом нода получает хеши с каждого горизонтального уровня дерева и рутовый хеш. Потом свои данные тянет, строит у себя дерево и если хеши совпадают, то значит запрос пришёл от своих, а не от злоумышленников. И безопасно получается и не надо все данные гонять между нодами. А потом с дочкой математику делал, смотрю там наполовину заполненное дерево и надо его достроить)

  • @redkostia
    @redkostia4 ай бұрын

    По поводу согласованности, я так понимаю, что система только должна сказать, что тут конфликт, а ты сам дальше иди мержи как-то. Как в гите) ещё это видимо чтото про crdt. Доклад помгю смотрел, смутно помню только kzread.info/dash/bejne/pGl7lMuQisrbn5c.htmlsi=L7vkinhjmhdct_nV

  • @daredever

    @daredever

    4 ай бұрын

    тогда выходит метод get должен отдавать не просто значение, а прям целый набор еще и с векторными часами которые раскрывают внутреннее устройство бд, хмм

  • @redkostia

    @redkostia

    4 ай бұрын

    @@daredever ну видимо во внутреннюю апишку так отдают, а там уже думать надо что клиенту показать

  • @AEF23C20
    @AEF23C204 ай бұрын

    ребяты, все бд делятся на статические и динамические, отсюда и исходите всегда статическая бд - это неизменяемая по времени бд, вот она есть - и есть, она константа однако же, если весьма сильно думать, то динамическая изменяемая по времени бд - это набор статических бд, и уже тут могут быть варианты и далее всё сииильно упрощается

  • @daredever

    @daredever

    4 ай бұрын

    а можешь развернуть что упрощается?

  • @AEF23C20

    @AEF23C20

    4 ай бұрын

    конечно же доступ, причём во всех смыслах, в максимально широких смыслах для 99.9 глобальных операций - изначально нужен доступ, а затем эта самая "операция" будь то банальное чтение, или копирование итд итп оно статическое - значит не изменяемое, значит оно единоразово хешировано/кешировано/индексировано/оптимизировано в общем смысле отсутствует концепция "конкуренции" как таковая, оно только "на чтение" - откуда взяться конкуренции? имеется ввиду сложно реализуемой конкуренции за этот читаемый кусок? в некотором смысле этот подход ничем не отличается от иммутабельных конструкций в некоторых языках и исполняющих средах хотите изменить что либо? плодите копию этого нужного изменяемого - её и меняйте только полная копия никогда не нужна, а все изменения "идут поверх", на не полную копию, и оно снова статическое бггг но тогда версионирование возникает как "само собой" разумеющийся факт, мержинг [если нужен] всего этого почти тривиален итд итп далее рекурсия [расписывать полностью как что и зачем - бессмысленно, вопрос слишком широкий, и не для ютуба же] пс: а главный [и весьма очевидный] фокус тут в том, что это всё весьма легко реплицируется прямиком по клиентам (и от клиента к клиенту, без сирвака - тоже работает), а самый бамбический фокус - это в "производных" данных от статических - данные становятся не нужны, нужны указатели на данные, а указатели на данные передаются мгновенно, и указатели на данные могут существовать в принципе - только на статические данные

  • @AEF23C20
    @AEF23C204 ай бұрын

    концепция децентрализации и прочих распределённых процессов не может рассматриваться как розовый конь в вакууме потому что на самом деле [в реальности] идея преследующая например равномерную нагрузку на ноды - не нужна пример: у меня ноды собственного изготовления стоят, и в каждой ноде потребитель ноды сразу имеет то что ему нужно но как и зачем мне преследовать цель равномерной нагрузки на ноды то? потребители разные бггг, что потребители потребляют чащще всего - то и хранится ближе к потребителю но это противоречит некой концепции равной нагрузки на ноды итд итп

  • @daredever

    @daredever

    4 ай бұрын

    это другой тип задачи просто, называется проблема знаменитостей когда надо следить не ха равномерностью данных на нодах, а за частотой использования или роста объема связанной информации

  • @AEF23C20

    @AEF23C20

    4 ай бұрын

    тогда это не нода, это в некотором смысле - суб-нода это то, что обслуживает конкретную ноду, если[?] в этом есть необходимость сама архитектура нод - одноранговая по определению однако же над этой "одноранговостью" существует некоторый "над-ранговый" элемент и "под-ранговый" элемент, но это уже не ноды на конкретную ноду можно "подлепить" сирвачков, и они "помогут" этой самой конкретной ноде - это и есть "подранговый" элемент но разве этот "элемент" нужен везде? зачем чёрт побери? вы понимаете, вот это вот повсеместное безумное "взять всё и поделить" - смахивает на шариковщину, так шариков - сабака, ему простительно - что с него взять?

  • @AEF23C20
    @AEF23C204 ай бұрын

    особенно "доставляют" некие требования и обычно эти требования настолько [запредельно] безумны, что как говорится хоть стой хоть падай все эти "требователи" формирующие некие "требования" будто массово свалились с луны, ну или с планеты рептилоидов всё то что происходит - оно предельно изначально объяснено, где то в начале 70-ых прошлого программы - это алгоритмы и данные, но это полу-правда на самом деле, программы - это __подготовленные__ данные и нужные [подходящщие] алгоритмы над этими данными - вот это правда но тогда получается так, что если у вас нет подготовленных данных - вы ничего не добьётесь, по определению но уже тогда получается так, что универсальных данных - не существует, но тогда и универсальные алгоритмы - не то что бесполезны, а вообще то [логически] - не являются решением задачи (с) но уже тогда получается так, что данные нужно анализировать, и на основе анализа данных и применять нужные [подходящие] алгоритмы а кто нибудь хоть когда нибудь данные анализирует? ну да ну да

  • @daredever

    @daredever

    4 ай бұрын

    вообще говоря даже в этой задаче есть более менее конкретные требования к данным, которые могут например помочь рассчитать емкость бд, подумать на тем как это будет лежать в памяти и т.д. если по мнению собеседуемого требований не хватает или они кажутся ему подозрительными то всегда можно задать уточняющий вопрос - это тоже часть «решения», могут намеренно что-то упустить ожидая как раз некий анализ

  • @AEF23C20

    @AEF23C20

    4 ай бұрын

    "более менее конкретные требования к данным, которые могут например помочь рассчитать емкость бд, подумать на тем как это будет лежать в памяти и т.д." вот вы напейсали вот это вот, а выше оно обозначено как __подготовленные__ данные это одно и то же, это синонимы нет смысла пользовать данные, если эти данные __не__ __подготовлены__ должным образом для эксплуатации пс: а теперь внимательно читаем определение: "программы - это __подготовленные__ данные и нужные [подходящщие] алгоритмы над этими данными"

  • @AEF23C20
    @AEF23C204 ай бұрын

    ребяты, вот вы рассказываете [впрочем не вы, а вы книжку рассказываете, главу], но я одного понять не могу вот у меня база работает поверх собственной торрент-сети, где файлики базы всегда статические/шифрованные и с избыточной информацией для самовосстановления [шифрованные рар-архивы бггг] ага, это всё имеет лютый оверхед, впрочем не такой уж он и лютый, это как посмотреть я всего лишь про то, что вы говорите про теорию [книжка про теорию], а есть практика - примеры реализаций так вот существуют примеры, где уже книжка - не работает потому что на самом деле существуют "системы", где уже реализовано то, что эта теоретическая книжка даже не допускает но тогда как это [теоретически] недопустимое уже [практически] работает давно и успешно?

  • @redkostia

    @redkostia

    4 ай бұрын

    Смысл книжки выучить умные слова, чтобы рассказать их на собесе)

  • @AEF23C20

    @AEF23C20

    4 ай бұрын

    стоп, подождите, получается так что эти "радийные" парни на собес дружно собираются что ли?

  • @redkostia

    @redkostia

    4 ай бұрын

    @@AEF23C20 они пилят контент для тех, кто собирается на собес. Ну и сам от собеса никогда не зарекайся)

  • @daredever

    @daredever

    4 ай бұрын

    @@AEF23C20 нам книжка показалось интересной, лично я на нее смотрю как на набор задачек, большая часть из них довольно редко попадается в обычной работе в таком виде. чаще мы доделываем уже что-то написанное

Келесі