Pull to refresh
15
0
sania @sania

User

Send message

Оптимизация производительности запросов в ClickHouse: как ускорить неускоряемое

Reading time16 min
Views9.7K

Привет, Хабр! Меня зовут Максим Кита, я разработчик баз данных, специализируюсь на анализе, планировании и выполнении запросов, а также на оптимизации производительности.

Я расскажу о высокоуровневой архитектуре ClickHouse, CI/CD, тестировании производительности, интроспекции, абстракциях и алгоритмах и выборе библиотек для высокопроизводительных приложений. Поделюсь ниндзя-техниками, которые помогут ускорить ваши системы. Вы сможете попробовать эти советы и практики на своем проекте и оценить насколько они полезны.

Читать далее
Total votes 34: ↑34 and ↓0+34
Comments2

Коллеги, вы меня огорчаете

Reading time12 min
Views169K
В июле и августе 2020 года я, с подачи Григория Петрова, проводил для компании Evrone технические интервью на позицию Senior Golang Backend developer. И, видимо, буду вынужден продолжать проводить, о чём ниже.

Задача формулировалась как «найти человека, который сможет задать и поддерживать высокий уровень профессионализма в применении языка Go». То есть, сформулирована она была по-человечески, перевод на канцелярит — мой. Под эту задачу я сформировал новый опросник вместо того, которым пользовался несколько лет — старый был с жестким закосом под DevOps. Методику, которой я пользуюсь для создания опросников и количественной оценки соответствия кандидатов, я излагал в своем докладе «Техническое интервью как инженерная задача» на конференции Saint TeamLead 2019.

И вот что я хочу сказать вам, коллеги: вы меня огорчаете.


Читать дальше →
Total votes 181: ↑137 and ↓44+93
Comments1152

Ускоряем неускоряемое или знакомимся с SIMD, часть 2 — AVX

Reading time6 min
Views25K

Предыдущая часть вызвала бурную дискуссию, в ходе которой выяснилось, что AVX/AVX2 на самом деле есть в десктопных CPU, нет только AVX512. Поэтому продолжаем знакомиться с SIMD, но уже с современной его частью — AVX. А так же разберём некоторые комментарии:


  • медленнее ли _mm256_load_si256, чем прямое обращение к памяти?
  • влияет ли на скорость использование AVX команд над SSE регистрами?
  • действительно ли так плохо использовать _popcnt?
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments15

Руководство по ассемблеру Go

Reading time12 min
Views24K


Прежде чем заняться реализацией runtime и изучением стандартной библиотеки, необходимо освоить абстрактный ассемблер Go. Надеюсь, это руководство поможет вам быстро овладеть нужными знаниями.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments8

Go: ускоряем выборку больших таблиц из MySQL

Reading time9 min
Views17K
Я использую Go для написания рекламной сети вот уже почти год. Разработку веду на сервере Intel i7-7700, 16Gb RAM, 256Gb SSD. И в скрипте который выполняется раз в сутки появилась задача выбрать все показы за прошедшие сутки и пересчитать на этой основе статистику за день сразу по нескольким объектам (сайт, кампания, баннер).

По идиомам Go делается всё достаточно тривиально:
Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments30

Blockchain на Go. Часть 1: Прототип

Reading time4 min
Views35K

Содержание


  1. Blockchain на Go. Часть 1: Прототип
  2. Blockchain на Go. Часть 2: Proof-of-Work
  3. Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
  4. Blockchain на Go. Часть 4: Транзакции, часть 1
  5. Blockchain на Go. Часть 5: Адреса
  6. Blockchain на Go. Часть 6: Транзакции, часть 2
  7. Blockchain на Go. Часть 7: Сеть

Блокчейн одна из самых революционных технологий 21 века, до сих пор не реализовавшая весь свой потенциал. По сути, блокчейн это просто распределенная база данных. Что же делает ее уникальной? Это база данных полностью открыта и хранится у каждого участника полной или частичной копией. Новая запись создается только с согласия всех кто хранит базу. Благодаря этому существуют такие вещи как криптовалюта и умные контракты.


В этой серии уроков мы создадим, основанную на блокчейне, упрощенную криптовалюту. В качестве языка используем Go.

Читать дальше →
Total votes 35: ↑24 and ↓11+13
Comments5

Пишем DNS proxy на Go

Reading time4 min
Views19K

Давно хотел решить проблему с рекламой. Наиболее простым способом сделать это на всех устройствах оказалось поднятие своего DNS сервера с блокированием запросов на получений IP адресов рекламных доменов.
Читать дальше →
Total votes 39: ↑31 and ↓8+23
Comments15

Реверс-инжиниринг первых умных часов Seiko UC-2000

Reading time32 min
Views31K


Где-то в конце 1983 — начале 84 года, японская компания Seiko начала продавать первые в истории компьютеризированные часы — Seiko Data-2000 и Seiko UC-2000. Data-2000 имели возможность хранить 2КБ заметок, их нужно было вводить с помощью специальной компактной клавиатуры, которая шла в комплекте. UC-2000, по сути, те же Data-2000 с корпусом другого цвета, но они уже позиционировались как часть Наручной Информационной Системы, которая, среди прочего, включала терминал UC-2200, представляющий из себя компьютер с Z80-совместимым процессором, интерпретатором Бэйсика и термопринтером, но без экрана, в качестве которого использовались часы (как это не странно). Среди прочего, терминал давал возможность загружать на часы приложения со специальных картриджей. Подробнее о линейке ранних умных часов Seiko можно почитать, например, в этой статье. В этом же посте я расскажу, как написал (возможно) первую, за более чем 33 года, программу для этих часов.
Total votes 139: ↑139 and ↓0+139
Comments35

Как написать хорошее решение для Highload Cup, но недостаточно хорошее чтобы выйти в топ

Reading time6 min
Views6.8K

На прошлой неделе закончилось соревнование HighLoad Cup, идея которого заключалась в реализации HTTP сервера для сайта путешественников. О том как за 5 дней написать решение на Go, которое принесет 52 место в абсолютном зачете из 295, читайте под катом.

Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments8

Разбираемся с новым sync.Map в Go 1.9

Reading time7 min
Views74K

Одним из нововведений в Go 1.9 было добавление в стандартную библиотеку нового типа sync.Map, и если вы ещё не разобрались что это и для чего он нужен, то эта статья для вас.


Для тех, кому интересен только вывод, TL;DR:


если у вас высоконагруженная (и 100нс решают) система с большим количеством ядер процессора (32+), вы можете захотеть использовать sync.Map вместо стандартного map+sync.RWMutex. В остальных случаях, sync.Map особо не нужен.


Если же интересны подробности, то давайте начнем с основ.

Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments26

Машина времени в git

Reading time5 min
Views192K
В последнее время мои коллеги начинают знакомство с git'ом. И один из интересующих их вопросов — как откатиться до определённой ревизии. В интернете можно найти набор команд, но хочется, чтобы было понимание каждой из них. Баловство с комадами git'а без понимания может привести к потере истории разработки.

В этой статье я хочу рассказать о командах git checkout и git reset с ключами --soft и --hard.
Читать дальше →
Total votes 127: ↑122 and ↓5+117
Comments39

Простой алгоритм для поиска всех совпадающих под-текстов в двух текстах

Reading time4 min
Views29K
По долгу службы мне часто нужно находить все пересечения между текстами (например, все цитаты из одного текста в другом). Я достаточно долго искал стандартное решение, которое бы позволило бы это делать, но найти его мне так и не удалось — обычно решается какая-то совсем или немного другая задача. Например, класс SequenceMatcher из difflib в стандартной библиотеке Питона находит самую длинную общую подпоследовательность в двух последовательностях hashable элементов, а потом рекурсивно повторяет поиск слева и справа от нее. Если в одном из текстов будет более короткая подпоследовательность, которая содержится внутри уже найденной (например, если кусок длинной цитаты где-то был повторен еще раз), он ее пропустит. Кроме того, когда я загнал в него «Войну и мир» и «Анну Каренину» в виде списков слов и попросил для начала найти самую длинную подпоследовательность, он задумался на семь минут; когда я попросил все совпадающие блоки, он ушел и не вернулся (в документации обещают среднее линейное время, но что-то в прозе Льва Толстого, по-видимому, вызывает к жизни worst-case квадратичное).

В конечном итоге я придумал свой алгоритм, тем самым наверняка изобретя велосипед, который надеюсь увидеть в комментариях. Алгоритм делает ровно то, что мне нужно: находит все совпадающие последовательности слов в двух текстах (за исключением тех, что в обоих текстах входят в состав более крупных совпадающих последовательностей) и сравнивает «Войну и мир» с «Анной Карениной» за минуту.

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments39

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 2 из 6

Reading time7 min
Views142K

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Update:


Внимание, статья 4в даёт новую, более простую версию растеризатора.

Давайте знакомиться, это я.



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

В прошлый раз мы нарисовали проволочную сетку трёхмерной модели, в этот раз мы зальём полигоны. Точнее, треугольники, так как OpenGL практически любой полигон триангулирует, поэтому ни к чему разбирать сложный случай. Напоминаю, что этот цикл статей создан для самостоятельного программирования. Время, которое я здесь привожу — это не время чтения моего кода. Это время написания вашего кода с нуля. Мой код здесь только для того, чтобы сравнить ваш (рабочий) код с моим. Я совсем не являюсь хорошим программистом, поэтому ваш код может быть существенно лучше моего. Любая критика приветствуется, любым вопросам рад.

Пожалуйста, если вы следуете этому туториалу и пишете свой код, выкладывайте его на github.com/code.google.com и им подобные и давайте ссылки в комментариях! Это может хорошо помочь как и вам (другие люди могут чего посоветовать), так и будущим читателям.
Читать дальше →
Total votes 119: ↑116 and ↓3+113
Comments116

Пара маленьких лайфхаков поиска по товарам в интернет-магазине

Reading time5 min
Views45K
Случайно увидел вот такую подсказку на Озоне:



Это для меня, наверное, лучший пример, как не надо делать поиск в интернет-магазине. Дело в том, что все эти советы спокойно может взять на себя железный мозг, и разгрузить тем самым мозг пользователя. Покупатель при этом даже не заметит, что что-то пошло не так, а, значит, его ничего не остановит перед покупкой. Надо отметить, что ряд ошибок этот конкретный поиск правит, но в моём случае с копипастой названия книги из оптового прайса не прокатило.

У нас самих не лучший в мире поиск, но он продаёт. Давайте покажу, что мы сделали.
Читать дальше →
Total votes 60: ↑55 and ↓5+50
Comments32

Статистика надёжности SSD носителей

Reading time2 min
Views81K
Некоторое время назад я создал опрос по надёжности SSD. Несмотря на то, что мне кажется, что результатов слишком мало, но ждать нет особого смысла.

Итак, для начала статистика размеров.

На картинке видно, что наиболее популярны форматы 120, 80 и 60, которые выпускаются только Intel.
Можно также заметить, что диски объёмом 120/128 особо популярны среди пользователей алтернативных операционных систем (включая OS X).

Продолжим данными по производителям.
Читать дальше →
Total votes 84: ↑82 and ↓2+80
Comments40

30 советов, как эффективно трудиться и не сойти с ума, работая дома

Reading time5 min
Views16K
Тем, кому знакомы прелести работы дома (на себя, фрилансером или удаленно на ставку), также знаком соблазн поваляться на диване и затягивание сроков.

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

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

Так как же работать эффективно и в то же время не довести себя до нервного истощения? Я недавно уволился с постоянной работы и поэтому спросил совета у читателей своего блога. Они, как и всегда, откликнулись на мою просьбу, и я отобрал наиболее понравившиеся мне рекомендации, чтобы люди могли использовать их как руководство (ну, я тоже собираюсь руководствоваться этими советами).
Читать дальше →
Total votes 125: ↑123 and ↓2+121
Comments198

Тренажерный зал для мозга

Reading time1 min
Views1.6K
Хочу рассказать вам о книге Тома Вуджека «Тренировка ума». Книга показалась мне достаточно интересной.

Эта книга — практическое пособие по тренировке мозга, умственных способностей.

Книга состоит из двенадцати глав. Каждая глава — это своего рода тренажер, предназначенный для развития определенного качества вашего ума. На одних тренажерах вы будете попеременно то прилагать усилия, то расслабляться, погружаясь в безмятежное спокойствие; на других вам придется муштровать свой ум «до седьмого пота». Одни упражнения предназначены для активации вашего левого полушария — аналитической, логической части мозга, другие — для правого полушария, интуитивной части мозга, также ответственной и за пространственное восприятие. А все вместе тренажеры обеспечат вам всестороннюю интеллектуальную тренировку.

Скачать книгу (1,23 мб)

Оригинал заметки: Саморазвитие для умных людей
Total votes 27: ↑23 and ↓4+19
Comments29

Технологии, взгляд в будущее

Reading time2 min
Views1.2K
Из прочитанного больше всего поражает синтез золота, единая валюта киловатт-час, портативные квантовые генераторы, развитие искусственного интеллекта. Если взять вкупе эти четыри технологии, то будет глобальное перераспределение средств на мировом рынке. Так что, продаем золотишко накопленное?

Прогнозы Артура Кларка

2009 — в одной из стран третьего мира взорвется атомная бомба, после чего ООН примет решение об уничтожении ядерного оружия

2010 — развертывание системы тотального электронного слежения для искоренения преступности и появление портативных квантовых генераторов, извлекающих энергию прямо из вакуума
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments29

Indexisto — мобильный браузер-читалка нового поколения

Reading time3 min
Views9.1K
Тернист и пивотист путь стартапера. Вот и мы в Indexisto продолжаем поиск наилучшего применения тому что умеем, и вот что получилось:

Indexisto


Мы сделали мобильный браузер-читалку (пока только Android — тыц Play Market). Далее в процессе рассказа будет понятнее почему в названии присутствует громкое слово «браузер» и почему «нового поколения».
Читать дальше →
Total votes 48: ↑38 and ↓10+28
Comments23

Психиатр о запретах Youtube, Wifi для детей, блокировании сайтов

Reading time3 min
Views229K
Когда моего знакомого психиатра А.Г. Данилина переполняет профессиональное чувство глупости мира сего, он просит сделать ролик, где делится своими мыслями со зрителями. Я думаю, что разговор получился довольно интересный.



«Я понимаю, что это очередной глас вопиющего в пустыне, но так как 10 октября мы празднуем день психического здоровья, то мне очень хочется, как профессионалу с большим стажем сообщить тем, кто захочет посмотреть это видео, что политика тотальных запретов не в состоянии привести общество и человека к состоянию психического здоровья.
Читать дальше →
Total votes 338: ↑325 and ↓13+312
Comments323
1

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Specialist
SQL
Golang
High-loaded systems
MySQL
Database
Ajax