Pull to refresh
1
0
waterman @waterman

User

Send message

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

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

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

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


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

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

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

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

Индексы в PostgreSQL — 3

Reading time9 min
Views81K

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

Hash


Устройство


Общая теория


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

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

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

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

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

Reading time14 min
Views38K

image


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


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

Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments34

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

Reading time5 min
Views17K

В 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-ую. В процессе миграции (и разработки вообще) я столкнулся с несколькими нюансами, о которых хотелось бы рассказать.

Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments12

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

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

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

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


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

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

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

Reading time21 min
Views75K


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

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

Что же такое распределённые системы?
Total votes 42: ↑40 and ↓2+38
Comments7

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

Reading time4 min
Views7K

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

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

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

Reading time10 min
Views32K

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

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

Reading time4 min
Views4.2K

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

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

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

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

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

Reading time11 min
Views26K

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

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

Читать далее
Total votes 61: ↑59 and ↓2+67
Comments34

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

Reading time1 min
Views26K
Несколько дней назад Роберт Грэм начал работу над серией статей C10M и планирует закончить работу в июле этого года.

Сегодня уже доступны следующие главы:
Читать дальше →
Total votes 56: ↑47 and ↓9+38
Comments9

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

Reading time6 min
Views4.5K

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

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

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments1

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

Reading time14 min
Views7.6K


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

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

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

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

Reading time1 min
Views1.8K

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

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

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

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

Reading time4 min
Views12K
image

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

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

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

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

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

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

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

Читать дальше →
Total votes 76: ↑61 and ↓15+46
Comments46

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

Reading time1 min
Views778
На время тестирования сайт расположен по адресу rospil.info
Ресурс с трудом работает под натиском хабраэффекта.

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

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

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

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

Читать дальше →
Total votes 137: ↑131 and ↓6+125
Comments48

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

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

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

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

http://vimeo.com/14174734

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

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

Reading time5 min
Views3.3K
          Надо бить суку! Обязательно надо бить суку © А.Н.Стругацкий
          Настоящих буйных мало – вот и нету вожаков © В.С.Высоцкий

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

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

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

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

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity