Как стать автором
Обновить
1
0
waterman @waterman

Пользователь

Отправить сообщение

MVCC-2. Слои, файлы, страницы

Время на прочтение12 мин
Количество просмотров44K
В прошлый раз мы поговорили о согласованности данных, посмотрели на отличие между разными уровнями изоляции транзакций глазами пользователя и разобрались, почему это важно знать. Теперь мы начинаем изучать, как в PostgreSQL реализованы изоляция на основе снимков и механизм многоверсионности.

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

Отношения (relations)


Если заглянуть внутрь таблиц и индексов, то окажется, что они устроены схожим образом. И то, и другое — объекты базы, которые содержат некоторые данные, состоящие из строк.

То, что таблица состоит из строк, не вызывает сомнений; для индекса это менее очевидно. Тем не менее, представьте B-дерево: оно состоит из узлов, которые содержат индексированные значения и ссылки на другие узлы или на табличные строки. Вот эти узлы и можно считать индексными строками — фактически, так оно и есть.

На самом деле есть еще некоторое количество объектов, устроенных похожим образом: последовательности (по сути однострочные таблицы), материализованные представления (по сути таблицы, помнящие запрос). А еще есть обычные представления, которые сами по себе не хранят данные, но во всех остальных смыслах похожи на таблицы.

Все эти объекты в PostgreSQL называются общим словом отношение (по-английски relation). Слово крайне неудачное, потому что это термин из реляционной теории. Можно провести параллель между отношением и таблицей (представлением), но уж никак не между отношением и индексом. Но так уж сложилось: дают о себе знать академические корни PostgreSQL. Мне думается, что сначала так называли именно таблицы и представления, а остальное наросло со временем.
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии18

Индексы в PostgreSQL — 3

Время на прочтение9 мин
Количество просмотров78K

В первой статье мы рассмотрели механизм индексирования PostgreSQL, во второй — интерфейс методов доступа, и теперь готовы к разговору о конкретных типах индексов. Начнем с хеш-индекса.

Hash


Устройство


Общая теория


Многие современные языки программирования включают хеш-таблицы в качестве базового типа данных. Внешне это выглядит, как обычный массив, но в качестве индекса используется не целое число, а любой тип данных (например, строка). Хеш-индекс в PostgreSQL устроен похожим образом. Как это работает?

Как правило, типы данных имеют очень большие диапазоны допустимых значений: сколько различных строк можно теоретически представить в столбце типа text? В то же время, сколько разных значений реально хранится в текстовом столбце какой-нибудь таблицы? Обычно не так много.

Идея хеширования состоит в том, чтобы значению любого типа данных сопоставить некоторое небольшое число (от 0 до N−1, всего N значений). Такое сопоставление называют хеш-функцией. Полученное число можно использовать как индекс обычного массива, куда и складывать ссылки на строки таблицы (TID). Элементы такого массива называют корзинами хеш-таблицы — в одной корзине могут лежать несколько TID-ов, если одно и то же проиндексированное значение встречается в разных строках.

Хеш-функция тем лучше, чем равномернее она распределяет исходные значения по корзинам. Но даже хорошая функция будет иногда давать одинаковый результат для разных входных значений — это называется коллизией. Так что в одной корзине могут оказаться TID-ы, соответствующие разным ключам, и поэтому полученные из индекса TID-ы необходимо перепроверять.
Читать дальше →
Всего голосов 33: ↑33 и ↓0+33
Комментарии16

Разбираем лямбда-выражения в Java

Время на прочтение14 мин
Количество просмотров37K

image


От переводчика: LambdaMetafactory, пожалуй, один из самых недооценённых механизмов Java 8. Мы открыли его для себя совсем недавно, но уже по достоинству оценили его возможности. В версии 7.0 фреймворка CUBA улучшена производительность за счет отказа от рефлективных вызовов в пользу генерации лямбда выражений. Одно из применений этого механизма в нашем фреймворке — привязка обработчиков событий приложения по аннотациям, часто встречающаяся задача, аналог EventListener из Spring. Мы считаем, что знание принципов работы LambdaFactory может быть полезно во многих Java приложениях, и спешим поделиться с вами этим переводом.


В этой статье мы покажем несколько малоизвестных хитростей при работе с лямбда-выражениями в Java 8 и ограничения этих выражений. Целевая аудитория статьи — senior Java разработчики, исследователи и разработчики инструментария. Будет использоваться только публичный Java API без com.sun.* и других внутренних классов, поэтому код переносим между разными реализациями JVM.

Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии34

Шесть советов об использовании PostgreSQL в функциональных тестах

Время на прочтение5 мин
Количество просмотров17K

В 2018-м году, работая в Akvelon Inc., я собеседовал одного человека. Перед интервью мне дали на проверку его тестовое задание: небольшое web-приложение по типу записной книжки или todo-списка – React\TypeScript, C# на бэке и MS SQL Server в качестве персистентного хранилища. Приложение было модное: с обилием unit-тестов на mock’ах, упакованное в docker-образ – видно, что человек старался. И у этого решения был всего один недостаток – оно не работало. Совсем. Падало при попытке сохранить новую строку в базу данных.



Этот случай мне очень хорошо запомнился, поскольку подсветил сразу несколько типовых проблем.


Первая из них – ложная уверенность от модульных тестов. Даже 100% покрытие кода тестами не гарантирует, что в нём нет ошибок.


И вторая – отсутствие функциональных тестов. Если ваше приложение работает с СУБД, то вы обязательно должны покрыть эту часть кода реальными тестами с реальной базой данных. И здесь есть очень важное условие: проверять нужно именно на той версии СУБД, которая работает у вас в production’е. Думаю, очень многие разработчики под Oracle, прогоняющие свои тесты на H2\HSQLDB, сталкивались с ситуацией, когда тесты проходят, а production не работает (boolean, group by и другие чудеса).


Сейчас я работаю в основном с PostgreSQL и мигрирую наши микросервисы с 10-й версии на 11-ую. В процессе миграции (и разработки вообще) я столкнулся с несколькими нюансами, о которых хотелось бы рассказать.

Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии12

Как проходят архитектурные секции собеседования в Яндексе: практика дизайна распределённых систем

Время на прочтение25 мин
Количество просмотров135K
Привет, меня зовут Костя Кардаманов, я работаю в отделе технологий разработки Яндекса. Обычно такой же фразой я приветствую и кандидатов на собеседовании. А сегодня я хотел бы рассказать вам, как и зачем мы проводим интервью по дизайну систем с бэкенд-разработчиками. Сразу скажу: для фронтендеров, мобильных разработчиков и ML-инженеров подобный тип собеседований применим слабо, так что эти специальности мы здесь обсуждать не будем.

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

Что такое дизайн информационных систем


Основная цель любой IT-компании — производить сервисы, которые решают задачи пользователей. Мы должны уметь собирать элементы системы в единый механизм, который будет эффективно выполнять поставленную цель, и если первый тип собеседований нацелен в первую очередь на проверку необходимого минимума, то интервью про дизайн систем проверяет достаточность навыков кандидата в достижении конечной цели. Далекому от IT пользователю принципы и устройство систем могут казаться бесконечно сложными, но мы, их разработчики, должны иметь (не обязательно детальное) представление о принципах функционирования и роли каждого компонента.

Опытный читатель может сказать — в мире полно платных и бесплатных решений, из которых я могу собрать систему как из деталей конструктора, зачем мне понимать устройство этих деталей?
Читать дальше →
Всего голосов 67: ↑65 и ↓2+90
Комментарии37

Страх и ненависть в распределённых системах

Время на прочтение21 мин
Количество просмотров72K


Роман Гребенников объясняет сложность построения распределённых систем. Это — доклад Highload++ 2016.

Всем привет, меня зовут Гребенников Роман. Я работаю в компании Findify. Мы делаем поиск для онлайн-магазинов. Но разговор не об этом. В компании Findify я занимаюсь распределенными системами.

Что же такое распределённые системы?
Всего голосов 42: ↑40 и ↓2+38
Комментарии7

Что там с квантово-устойчивой криптографией

Время на прочтение4 мин
Количество просмотров6.9K

В начале июля институт NIST одобрил четыре защищенных алгоритма. В блоге T1 Cloud мы рассказываем про облачные технологии, разработку и информационную безопасность. Поэтому сегодня мы решили подробнее поговорить о новых алгоритмах — обсудить принципы работы, мнение сообщества и перспективы внедрения таких систем на практике.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

Охота на бройлеров. Как работают китайские телефонные хакеры

Время на прочтение10 мин
Количество просмотров31K

Несколько лет назад, когда я ещё работал в антивирусной компании, я купил недорогой смартфон на Android для пожилой родственницы. Телефон позиционировался, как отечественный продукт, но по факту был, разумеется, китайским аппаратом, выпущенным под российским брендом. Удаляя идущие с завода ненужные приложения и добавляя отсутствующие, я решил заодно установить и антивирус — мало ли, на какую ссылку нажмёт малограмотная в айтишных делах пользовательница? Каково же было моё удивление, когда на совершенно новом аппарате с ходу обнаружился троян, способный загружать и устанавливать без ведома юзера любые приложения. Попытка вылечить телефон не увенчалась успехом, не помог и сброс до заводских настроек — троян сидел в прошивке, к которой антивирусное ПО не имеет доступа, если аппарат, конечно, не рутован. Изучение вопроса показало, что китайские смартфоны с «сюрпризами» присутствуют на отечественном рынке в широчайшем ассортименте. Более того, в Китае существует целая индустрия по производству, распространению и эксплуатации мобильных вредоносных программ, прошитых в firmware, и за минувшие годы в этой сфере почти ничего не изменилось. А причём тут охота на бройлеров, спросите вы? Сейчас расскажу.
Читать дальше →
Всего голосов 83: ↑82 и ↓1+111
Комментарии50

Разработка навыка для «Алисы» на основе Google Keep заметок

Время на прочтение4 мин
Количество просмотров4K

На данный момент я активно пользуюсь приложением Google Keep для управления заметками на смартфоне. Для покупок в магазине достаточно удобно пользоваться заметками вида "чеклист", о которых и пойдет речь ниже.

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

Казалось бы причем тут Алиса... так вот еще удобнее было бы добавлять такие пункты покупок в список, используя голосовой помощник от Яндекса.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии6

Сказка про Guid.NewGuid()

Время на прочтение11 мин
Количество просмотров25K

C#. Guid.NewGuid(). Linux. Windows. Randomness or Uniqueness. RNG and PRNG. Performance. Benchmarking.

Цель нашей сегодняшней сказки — развлечься как следует. Детективная история в поисках потерянного перфоманса с красивым финалом и эффектным результатом непосредственно связана с набором слов из предыдущего абзаца.

Читать далее
Всего голосов 61: ↑59 и ↓2+67
Комментарии34

Проблема 10 миллионов соединений

Время на прочтение1 мин
Количество просмотров25K
Несколько дней назад Роберт Грэм начал работу над серией статей C10M и планирует закончить работу в июле этого года.

Сегодня уже доступны следующие главы:
Читать дальше →
Всего голосов 56: ↑47 и ↓9+38
Комментарии9

Безопасная разработка и уязвимости программного кода

Время на прочтение6 мин
Количество просмотров4.4K

Часть 2. Как искать ошибки в чужом коде

В предыдущей статье мы рассматривали фреймворки и методологии для безопасной разработки собственного кода. Но, что делать, если вы не пишете код самостоятельно, а используете в своей работе чужой исходный код, например, если вам необходимо контролировать качество кода, предоставляемого подрядчиком или собственным подразделением разработчиков. В случае с собственными разработчиками вы можете, конечно, порекомендовать им использовать те методологии, о которых мы говорили в первой статье и, возможно, качество кода действительно улучшится. Но как можно проверить код, поставляемый сторонним подрядчиком? 

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии1

«Типичная ошибка — бездумно бенчмаркать всё подряд»: интервью с Андреем Акиньшиным о бенчмаркинге

Время на прочтение14 мин
Количество просмотров7.5K


В прошлом году у Андрея Акиньшина (DreamWalker) вышла книга «Pro .NET Benchmarking»: подробнейший труд о бенчмаркинге, полезный как .NET-разработчикам, так и айтишникам других направлений.

Когда до её выхода оставалась пара месяцев, мы проводили конференцию DotNext 2019 Piter, где в онлайн-трансляции расспросили Андрея про книгу и вообще про бенчмаркинг. Казалось бы, с тех пор это интервью должно было устареть: там о книге говорят в будущем времени, а сейчас ей уже полгода. Но за эти полгода человечество не стало как-то иначе считать 99-й перцентиль — так что для всех, кому может пригодиться бенчмаркинг, в ответах Андрея по-прежнему много актуального и интересного.

Он выступит на будущем DotNext с темой «Поговорим про перформанс-анализ» — то есть не про написание бенчмарков, а про анализ собранных ими значений. Прямо сейчас Андрей штудирует сотни статей по математической статистике, чтобы рассказать вам про те методы, которые лучше всего подходят для перфоманс-анализа в реальной жизни. В книге такому анализу тоже уделено внимание, а в интервью Андрей как раз объяснял его важность. Поэтому в ожидании нового доклада мы открыли для всех видеозапись интервью, а специально для Хабра сделали текстовую расшифровку: теперь его можно не только посмотреть, но и прочитать.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+28
Комментарии6

Перевод выступления Дэвида Хейнемейерa Ханссонa на Startup School'2008

Время на прочтение1 мин
Количество просмотров1.8K

Часть 1, часть 2

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

Дэвид Хейнемейер Ханссон, автор Ruby on Rails, рассказывает о стартапах — о завышенных целях и ожиданиях, о вариантах получения прибыли, о привлечении пользователей, о продаже стартапа.
Под катом также ссылки на русский текст, английский текст и видео с английскими субтитрами
Читать дальше →
Всего голосов 44: ↑38 и ↓6+32
Комментарии15

Книги для стартаперов

Время на прочтение4 мин
Количество просмотров12K
image

Мания стартапов, накрывшая волной и Россию, со временем породила миф: тебе достаточно иметь крутую идею, желание и способности что-то сделать и перед тобой все двери открыты. Конечно, эти качества помогают в реализации проекта, но не стоит забывать о том, что большинство стартаперов не имеют практики в маркетинге, создании презентаций, общении с инвесторами или с командой. Они не знают, как нанимать и мотивировать сотрудников, как показать продукт с лучшей стороны и где стоит пожертвовать фичами ради удобства. А это не менее важно, чем голова на плечах и золотые руки.

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

Некоторые книги непосредственно про стартапы, другие — про маркетинг, третьи — про мотивацию, четвертые — про саморазвитие. Так или иначе, считаю, что все это стоит знать начинающим предпринимателям.
Читать дальше →
Всего голосов 113: ↑94 и ↓19+75
Комментарии56

Бизнес для программистов. Как начать свое дело

Время на прочтение2 мин
Количество просмотров19K
Многие из читателей Хабрахабра хотели бы открыть свой бизнес и перестать работать на «дядю». Но как это сделать? Какие опасности это таит? Ответы на эти и другие вопросы можно найти в замечательной книге «Бизнес для программистов. Как начать свое дело».

Ее написал Эрик Синк – бывший разработчик Spyglass, основатель и руководитель SourceGear, одного из основных поставщиков ПО в области контроля версий, а также колумнист MSDN.

Основная тема книги – это как стартовать и развить свою маленькую компанию независимого поставщика ПО. Эрик разбивает эту задачу на несколько традиционных компонентов: как стать предпринимателем, люди, маркетинг, продажи. Но каждый из них рассматривает через призму восприятия программиста. Например, приводит следующий совет по поиску идей:
Idea FindGoodProductIdea ()
{
ArrayList candidateList = BrainstormLotsOfIdeas();
return ChooseTheBestIdea(candidateList);
}

Читать дальше →
Всего голосов 76: ↑61 и ↓15+46
Комментарии46

Сервис противодействия распилам и откатам в государственных учреждениях

Время на прочтение1 мин
Количество просмотров771
На время тестирования сайт расположен по адресу rospil.info
Ресурс с трудом работает под натиском хабраэффекта.

image
Cайт работает в режиме тестирования, возможны любые изменения. Основная версия будет доступна по адресу rospil.net

Ресурс посвящен борьбе с коррумпированными чиновниками, которые используют систему государственных закупок для личного обогащения. Заявляется цель — сбор информации о воровстве, а так же конкретная работа по каждому конкурсу с привлечением экспертов. Вместе спокойно и последовательно добъемся устранения нарушений по одному конкурсу и привлечения к ответственности жуликов, вместо сотни бессмысленных показных скандалов в духе «все плохо и все своровали».
Читать дальше →
Всего голосов 263: ↑248 и ↓15+233
Комментарии163

Основы программирования под Android на примере игры Судоку

Время на прочтение6 мин
Количество просмотров375K
В статье описаны основные трудности создания приложений под Android.
Рассматриваются базовые понятия программирования Android.
Для примера описано создание игры Sudoku из книги Hello, Android – Ed Burnette.
Осторожно много скриншотов.

Читать дальше →
Всего голосов 137: ↑131 и ↓6+125
Комментарии48

Ричард Фейнман. Характер физических законов. Лекция 1

Время на прочтение1 мин
Количество просмотров8.6K
Мой хороший друг по собственной инициативе решил сделать перевод популярных лекций известного физика-теоретика, лауреата Нобелевской премии Ричарда Фейнмана, прочитанных им в Корнельском университете в 1964 году.

В настоящий момент предварительно готова одна лекция, которую я с удовольствием представляю Вашему вниманию. Уже готов вариант с субтитрами, по мере готовности версии с озвучкой обновлю пост.

Итак, «Характер физических законов», лекция первая.

http://vimeo.com/14174734

Те, кто интересуется, кто же такой Ричард Фейнман и почему его лекции настолько интересны, для начала могут ознакомиться со статьей в Wiki.
Читать дальше →
Всего голосов 105: ↑100 и ↓5+95
Комментарии44

Как я выиграл суд у Макхоста

Время на прочтение5 мин
Количество просмотров3.2K
          Надо бить суку! Обязательно надо бить суку © А.Н.Стругацкий
          Настоящих буйных мало – вот и нету вожаков © В.С.Высоцкий

Мы были клиентами Макхоста, у нас стоял хороший арендованный выделенный сервер. Мы заплатили за год вперед. Макхост с друзьями нас кинул, как и еще несколько тысяч своих клиентов.
Сайты наши не пострадали, но повисли деньги и было выпито немало крови, потрачено нервов.

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

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

Под катом анализ ситуации, исковое заявление, приведшее в скором итоге к вынесению решения в нашу пользу, а также мои впечатления от процесса.
Читать дальше →
Всего голосов 384: ↑375 и ↓9+366
Комментарии155
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность