ВНИМАНИЕ!
LLM не вовлечен, опечатки и прочие ошибки сохранены.
Предыстория
С самого начала как я попал в enterprise я знал - карьера идет не туда.
Кнопки, круды, общаться людьми.
Все не то, общаться с машиной интереснее.
Но все не было времени к этому подойти.
Непонимание как выглядит индустрия, недостаток опыта, неуверенность в себе, переезды, свадьба.
Когда жизнь улеглась у меня появилось свободное время и скука.
Так я начал программировать в свободное время. Очень много, иногда больше чем в рабочее время.
Началось летом 2022.
Заглядывая назад первые проекты не были блестящими: GUI для GRPC, "AI native" таск трекер, PaaS/морда для куба.
Не горжусь, но и не стыдно.
Они мне дали важное - открыли много интересных контактов, понимание рынка в разных областях, время для "шопинга" на гитхабе для изучения "а что вообще бывает".
Самое важное это дали понять - "эта область мне не интересна".
И это ключ - познать себя.
Так случайно пересеклись несколько событий:
- на последней работе я сильно вовлекся в observability сетап моего домена
- мне нужна было что-то программировать
- про grafana и elastic слышал только негативные отзывы когда речь заходила о хранении и поиске логов, это давало уверенность что индустрия в нужде (оказалось опенсорсные решения есть, они не так известны или с приколами)
- разговор со старшим коллегой дал уверенность что "все хотят datadog, но дешевле"
Последний пункт оказался весомым.
Человек с большим авторитетом в компании, с опытом заключения контрактов со стороны покупателя убедил, что потенциал большой.
Закрыл он это интересной цитатой директора MySQL которую я не слышал ранее:
“The relational database market is a $9 billion a year market. I want to shrink it to $3 billion and take a third of the market.”
Чел был заинтересован сжать рынок, сделать его дешевле и более доступным.
Что с технологической точки зрения эквивалентно "сделать технологию эффективной и выполнить бОльшее количество CPU инструкций за секунду времени".
Что значит качественный и высокопроизводительный софт - ценовое предложение.
Все это меня толкнуло копать.
2 недели
Первое что я хотел сделать - изучить как выглядит рынок.
И решений оказалось много.
Про какие-то я слышал, про другие узнал в первые.
Третьи оказались в этой области, но конкретно для наблюдения систем не применялись, только для продуктовой аналитики.
Под-домменов применения оказалось еще больше - IoT, хранения истории событий, аудит логи, просто поиск по логам из разных источников.
Некоторые решения были супер эффективными, но сложными в настройке и управлении как clickhouse.
Некоторые были хороши, но закрытые и дорогие.
Еще была категория хороших, но не популярных.
Четвертые были "обобщенными", когда натягивали одно решение на другое, оно как-то работало и с этим мирились.
Идея подтвердилась, есть потенциал сделать круче.
2 месяца: что такое база данных
Есть разные прекрасные книги как Crafting interpreters - Robert Nystrom.
По базам данных таких ресурсов нет.
Есть супер база по устройству реляционных баз как Database internals и также оч старая академическая литература которая рассматривает способы хранения данных от магнитных лент.
Сложным, но приемлимым материалом оказались лекции университета CMU от Andy Pavlo - бомбезный чел, говорит "на первом месте семья, на втором базы данных".
Курс лекций не учит как сделать базу, а скорее академический набор техник и исследований как реализуются те или иные компоненты или почему mmap под запретом.
Также из его лекций можно узнать, что все взлетевшие базы данных сделали людей неприлично состоявшимися финансово.
Потому осталось читать код, много кода на языках которые я не понимаю.
Мне также хотелось изучить не только хорошие примеры, но и плохие, о которых мы знаем как супер неэффективные.
Пара баз данных оказались для меня библиями OLAP - clickhouse и duckdb. Вторая менее очевидный пример, но она более специализирована, не имеет такого большого набора фичей и легче прослеживать поток данных внутри.
4 месяца: первый разультат
Первый результат был фейк. Он включал 20% минимума.
Это был поток данных от представления логов на клиенте до представления структуры данных на диске. Только данные никогда не были ни диске, они всегда были в памяти.
Долгий путь изучения и около месяца кода привели к первым шагам.
Все это - много времени и никакого результата - дали мне много чего подумать
- я ничего не знаю о базах данных
- я ничего не знаю о системном программировании (когда пользоваль программы не человек, а другая система)
- я ничего не знаю о производительности систем
- мне очень интересно
- иногда одиноко, оказывается мало инженеров работают в базах данных или заинтересованы в этом, сложно найти тусовку и спросить совет / "поразгонять" темку.
Я давно не испытывал подобной свежести, поэтому мне было легко продолжать.
6 месяцев: первые спутники
На подобных проектах периодически встречаю людей который проявляют заинтересованность.
Как правило после двух недель они исчезают.
На опыте я бы рекомендовал всем игнорировать случайные встречи.
В большинстве люди либо не знают чего хотят, либо ищут удачи.
Первые пол года уже дали понимание как сделать такой софт.
Картину из разных компонент, как они взаимодействуют и огромный документ с планами и недостающими техническими деталями дабы улучшить производительность и качество еще выше.
Например хотелось свои numa корутины (привет clickhouse/silk), профилировщик как pprof backend, качественный fuzz, Deterministic Simulation Testing, continous benchmarking и тонна других подходов для отслеживания качества.
Все это открыло огромный список литературы для изучения, в очень далекий горизонт набор публикаций и в менее далекий десяток книг.
По пути хочу всем порекомендовать computerenhance, почему наш софт плохой и база о том как работает компьютер.
До этого момента я читал какие-то книги, но чаще всего они мне казались бесполезными, как Чистый код, и за редким исключением хорошими как High Performance Browser Networking и упомянутый ранее Crafting interpreters.
Последняя помогла мне написать свой язык запросов.
Список собранной литературы
- Database internals - Alex Petrov - база. Не супер важно, если есть время.
- Linux System Programming - Robert Love - точно необходимо пробежаться по теоретической части, открывает набор базового API, особенно важно когда речь о чтении файлов. Узнал об fadvise, pre pulling, direct io и все такое.
- What Every Programmer Should Know About Memory - Ulrich Drepper - супер глубокая теория о том почему мы имеет такую память и что с этим делать
- С++ Concurrency in action - Anthony Williams - базовые примитивы конкурентности, я сильно хромал (и до сих пор) с memory ordering, но источник помог мне хотя бы корректно реализовать Atomic Reference Counter не смотря на то что я не пишу на C++
- Is Parallel Programming Hard, And, If So, What Can You Do About It? - Paul E. McKenney - оч глубокое чтиво о конкуретном программировании, примеры различных алгоримтов из реальных проектов типа линукса и почему это так, из нее узнал подробнее что не так с Reference Counter и что такое RCU (Read Copy Update) и какие еще есть альтернативы мютексам
И есть прост список на почитать без личного мнения:
- The art of multiprocessing programming - Maurice Herlihy & Nir Shavit
- The garbage collection handbook - Richard Jones, Antony Hosking, Eliot Moss
- Memory systems - Bruce Jacob, Spencer W. Ng, David T. Wang
- Operating systems, 3 easy pieces - Remzi H. Arpaci-Dusseau, Andrea C. Arpaci-Dusseau
- Performance Analysis and tuning on modern CPUs - Denis Bakhvalov
- System performance - Brendan Gregg
- Latency - Pekka Enberg
- Structure and Interpretation of Computer Programs - Harold Abelson and Gerald Jay Sussman with Julie Sussman
- Distributed systems - MAARTEN VAN STEEN, ANDREW S. TANENBAUM
11 месяцев (сегодня)
Что имею:
- план
- фундамент решения
- тесты подтверждающие корректность
- уверенность в своих силах продолжать и дальше изучать как сделаны другие базы
- желание найти работу в базах данных
- пытаться сделать решение из своей базы данных и найти партнеров / пользователей / клиентов
Также по пути нашел оч классную тусовку Handmade networks - коммьюнити в котором люди делают независимый качественный софт в которому нет оправдания медленному софту, большим бинарникам, запуску за 10 секунд (привет discord) и прочему - это просто плохой софт.
Такое коммьюнити сильно бодрит, не перевелись специалисты.
Жизнь сложилась так, что возможно мне придется приостановить работу над проектом и найти работу, сделать это конечно хочется среди баз данных.
Но в дальнейшем обязательно продолжить, так как изначальная идея не изменилась - это возможно и у рынка есть нужда.
Всем кто хочет программировать - желаю удачи и сил, все получится.
Проект о котором я говорю - https://ochi.dev/ или github.com/ochi-team/ochi
Если кому интересно общаться о программировании - я открыт.


тут как раз новость была https://clickhouse.com/blog/andy-pavlo-joins-clickhouse
У меня момент «вау» был при осознании, что многие облачные версии баз данных построены поверх S3 и это позволило много что упростить.
Например, разные версии облачного Postgres
В начале такой подход не очень укладывался в традиционные представления как должна работать база данных