<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Форматы хранения данных</title>
    <description/>
    <link>https://tproger.ru/tag/data-storage-formats</link>
    <atom:link href="https://tproger.ru/tag/data-storage-formats/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sat, 24 Oct 2026 05:34:50 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Форматы хранения данных</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>S3 в инфраструктуре: где объектное хранилище помогает, а где не заменит файловую систему</title>
      <link>https://tproger.ru/articles/s3-v-infrastrukture-gde-obektnoe-hranilishhe-pomogaet-a-gde-ne</link>
      <comments>https://tproger.ru/articles/s3-v-infrastrukture-gde-obektnoe-hranilishhe-pomogaet-a-gde-ne?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дима Дмитриев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/s3-v-infrastrukture-gde-obektnoe-hranilishhe-pomogaet-a-gde-ne</guid>
      <description><![CDATA[<p>Разбираем, где S3 подходит для бэкапов, архивов, логов и медиаданных, а где нужны файловые или блочные хранилища. Versioning, Object Lock, репликация и практический пилот перед миграцией.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/s3-v-infrastrukture-gde-obektnoe-hranilishhe-pomogaet-a-gde-ne">S3 в инфраструктуре: где объектное хранилище помогает, а где не заменит файловую систему</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 18 Aug 2026 07:16:51 GMT</pubDate>
      <content:encoded><![CDATA[<p>Объём бэкапов, логов и медиаконтента растёт быстрее бюджета на инфраструктуру, а требования к сохранности и восстановлению данных становятся жёстче. В какой-то момент файловое хранилище начинает требовать всё больше дисков, контроллеров и внимания команды.</p><p>У <a href="https://linx.ru/cloud/object-storage-s3/">S3-совместимого объектного хранилища</a> другая логика: приложение обращается к объектам через API, а вопросы физического размещения и масштабирования решает сама система хранения. Для бэкапов, архивов и медиаданных модель такого рода подходит хорошо, однако перед переходом на нее важно проверить, как конкретное приложение работает с объектами и что произойдет с данными при нагрузке или восстановлении.</p><h2>Как устроено S3</h2><p>В объектном хранилище данные организованы в бакеты, где у объекта три составляющие: содержимое, уникальный ключ и метаданные. Вложенных директорий в привычном смысле здесь нет — папки в интерфейсах появляются потому, что ключ объекта разбирают по разделителю. Например, backups/2026/08/db-dump.tar.gz читается человеком как путь по папкам, а для хранилища — просто одна строка-идентификатор.</p><p>В отличие от файловой системы, где приложение может открывать файл, записывать данные частями, дополнять его и использовать блокировки, S3 работает с объектами через API. Объект загружается целиком, а изменения выполняются отдельными операциями API.</p><p>Переименование объекта выполняется копированием под новым ключом с последующим удалением исходного — приложению, которое часто переименовывает или дописывает файлы либо использует файловые блокировки, потребуется изменить логику работы с данными при переходе на S3.</p><p>Управляется модель небольшим набором предсказуемых HTTPS-операций.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-08-17/17660b4e-f38e-42ec-8d53-d73765978182.webp" alt="" /></figure><p>S3 API используется разными объектными хранилищами, однако поддерживаемые функции могут различаться. Перед миграцией стоит проверить конкретные API-операции приложения, политики доступа, уведомления, Object Lock, репликацию и подпись запросов. Совместимость проверяют на рабочих сценариях приложения и часто в них применяемых API-операциях.</p><h2>Где подходит модель</h2><p>Зная, как устроена модель, проще понять, где S3 подходит лучше всего. Он хорошо работает с данными, которые сохраняются целыми объектами, хранятся независимо друг от друга и читаются по ключу. Например, так удобно хранить резервные копии, архивы, медиаконтент, логи и аналитические данные.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-08-17/e6bf3c95-a2f8-4ec9-8fb5-b94492c8b212.webp" alt="" /></figure><p>Для задач с частыми синхронными изменениями нужна другая модель хранения. Например, для дисков виртуальных машин, транзакционных логов СУБД, рабочих каталогов сборки и приложений с POSIX-блокировками подходит блочное или файловое хранилище. S3 при этом можно использовать для снапшотов, регулярных выгрузок и резервных копий.</p><h2>Что защищает данные внутри S3 и где заканчивается эта защита</h2><p>Для критичных данных в S3 используются versioning, Object Lock и репликация. Эти функции решают разные задачи и применяются в разных сценариях.</p><p>Versioning сохраняет предыдущие версии объектов. При повторной записи по тому же ключу создаётся новая версия с собственным version ID. DELETE добавляет delete marker, поэтому предыдущие версии остаются доступными для восстановления.</p><p>Versioning увеличивает объём хранения. Приложение, которое ежедневно переписывает крупный объект, создаёт последовательность его полных версий. Lifecycle-политика позволяет определить срок хранения старых версий и правила очистки незавершённых multipart-загрузок. Versioning переводится в состояние suspended, а полностью отключить его нельзя. При создании бакета с Object Lock versioning включается автоматически.</p><p>Object Lock реализует модель WORM, Write Once, Read Many. Для объекта задаётся срок retention, в течение которого система сохраняет его в защищённом состоянии.</p><p>В режиме Governance пользователь с расширенными правами может снять защиту вручную. В режиме Compliance защищённая версия сохраняется до окончания retention, включая случаи с root-аккаунтом. Срок хранения стоит рассчитывать заранее: установленный retention нельзя сократить, поэтому версия продолжит занимать место до окончания заданного периода.</p><p>Репликация создаёт дополнительные копии объектов и повышает устойчивость к отказам оборудования. В <a href="https://linx.ru/cloud/object-storage-s3/">Linx Cloud</a> используется фактор репликации 3, RF3, поэтому каждый объект хранится в трёх экземплярах.</p><p>Репликация переносит изменения вместе с объектами. Если исходные данные уже содержат логическую ошибку, она попадёт и в реплики. Для критичных данных поэтому требуется отдельный домен отказа, регулярная проверка восстановления и схема резервного копирования 3-2-1 или 3-2-1-1-0.</p><h2>Своя инфраструктура или сервис провайдера</h2><p>S3-сервис можно развернуть внутри собственной инфраструктуры или использовать как управляемую услугу провайдера. На уровне приложения подключение выглядит одинаково: endpoint, access key, secret key и S3 API — разница в эксплуатации инфраструктуры.</p><figure><img src="https://media.tproger.ru/user-uploads/99633/2026-08-17/3a92450a-1f79-4be0-a4f6-81d5b0741d6c.webp" alt="" /></figure><p>Перед выбором провайдера стоит свериться с матрицей ответственности — кто чинит платформу при сбое, кто управляет ключами и доступом, кто следит за квотами и кто в итоге отвечает за резервные копии данных. Такая матрица для S3 есть и у Linx Cloud — сверить её с внутренними регламентами команды стоит ещё до того, как сервис запущен в работу.</p><h2>Как это устроено у Linx Cloud</h2><p>Если выбор сделан в пользу провайдера, вот пример конкретной реализации. В основе сервиса <a href="https://linx.ru/cloud/object-storage-s3/">Объектное хранилище (S3)</a> в Linx Cloud — Ceph: мы выбрали его из-за совместимости с S3 API (по нашему опыту, полнее её реализует разве что сам AWS), а также из-за масштабируемости и гибкости для развития продукта.</p><p>Путь запроса такой: HTTPS endpoint → сетевой периметр с WAF и NGFW → балансировщики нагрузки → Ceph Object Gateway (RGW), который уже разбирает команды S3 API и передаёт операции в backend-кластер. Сами объекты лежат на OSD-узлах с репликацией в три копии (RF3), а управляющие компоненты кластера вынесены на отдельное оборудование.</p><p>Подключиться к сервису можно по интернету или по выделенному каналу точка-точка — из виртуального ЦОД Linx Cloud, серверной стойки в дата-центре Linx или с любой внешней площадки. По документации сервис поддерживает multipart upload, versioning, Object Lock/WORM, presigned URL, репликацию бакетов и lifecycle-правила удаления. Один PUT рассчитан максимум на 5 Гбайт — для объектов крупнее нужен multipart.</p><p>Этого достаточно для типовых задач: интеграции с Veeam, архивного хранения, выдачи приватных объектов по временным ссылкам. Но перед миграцией конкретного приложения тест всё равно нужен — оно может опираться на уведомления о событиях, свою схему управления пользователями, определённый способ адресации объектов или редкую операцию API.</p><h2>Что проверить на пилоте</h2><p>Каким бы ни было решение — свой кластер или сервис вроде Linx Cloud — переводить на него прод стоит только после пилота, и строить его нужно на реальном потоке данных приложения: одна команда aws s3 cp с тестовым файлом ничего не покажет.</p><ul><li>Поэтому сначала измеряется профиль данных: средний и максимальный размер объектов, общее количество объектов, соотношение GET и PUT, частота LIST, пиковая нагрузка и допустимая задержка.</li><li>Затем проверяется совместимость приложения с нужными функциями S3. В тест входят multipart, versioning, Object Lock, lifecycle, presigned URL и права доступа. Для каждого механизма важно проверить именно тот сценарий, который используется в рабочей системе.</li><li>После этого оцениваются сеть и безопасность. Тест показывает поведение канала под нагрузкой, работу при обрыве соединения, доступные маршруты и стоимость исходящего трафика. На уровне безопасности проверяются разделение прав, хранение и ротация ключей, шифрование, аудит операций и сценарий компрометации учётной записи.</li><li>Финальная часть пилота посвящена восстановлению и стоимости. Нужно выполнить возврат старой версии и полное восстановление данных, измерить объём накопленных неактуальных версий и рассчитать расходы на запросы, хранение и трафик с учётом ожидаемого роста данных.</li></ul><p>Критерий успеха зависит от сценария. Для бэкапов главное — успешное восстановление, факта одной только загрузки недостаточно. Для медиаконтента важна стабильная выдача и то, что временные ссылки действительно работают.</p><p>Для data lake — скорость, с которой выбранный аналитический стек читает данные, и отсутствие «болезни мелких файлов», когда объектов становится очень много. Одна и та же <a href="https://linx.ru/cloud/object-storage-s3/">платформа S3</a> может отлично закрывать один сценарий и требовать уже другого архитектурного решения в соседнем.</p><h2>Вместо вывода</h2><p>S3 подходит для бэкапов, архивов, медиаконтента и аналитических данных, которые хранятся и читаются как объекты. Для дисков ВМ, СУБД и рабочих каталогов с частыми изменениями больше подходят файловые и блочные хранилища.</p><p>Поэтому перед миграцией стоит провести пилот на реальных данных приложения: проверить нагрузку, нужные API-операции, восстановление и стоимость хранения с учётом трафика. Результаты помогут определить, какую часть инфраструктуры имеет смысл перевести на S3 и где сохранить другие типы хранилищ.</p>]]></content:encoded>
    </item>
    <item>
      <title>Год разработки, 25 инженеров и снижение TCO на 40%: как создали российский ПАК виртуализации с нуля</title>
      <link>https://tproger.ru/articles/god-razrabotki--25-inzhenerov-i-snizhenie-tco-na-40---kak-sozdali-</link>
      <comments>https://tproger.ru/articles/god-razrabotki--25-inzhenerov-i-snizhenie-tco-na-40---kak-sozdali-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Соколова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/god-razrabotki--25-inzhenerov-i-snizhenie-tco-na-40---kak-sozdali-</guid>
      <description><![CDATA[<p>«Гравитон» разработал ПАК виртуализации «Гелиус», где аппаратная часть и программная часть созданы, производятся и сопровождаются одной компанией. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/god-razrabotki--25-inzhenerov-i-snizhenie-tco-na-40---kak-sozdali-">Год разработки, 25 инженеров и снижение TCO на 40%: как создали российский ПАК виртуализации с нуля</a>»</p>]]></description>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Визуализация]]></category>
      <category><![CDATA[Инфраструктура]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 29 Jan 2026 09:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>⭐ Участник Продуктовой Премии Tproger 2025 — проголосовать за кейс <a href="https://tprg.ru/A9Vl">можно по ссылке</a></b></p><p>При импортозамещении российские компании сталкиваются с одной проблемой: покупают серверы у одного производителя, программы у другого, а потом мучаются со стыковкой и поддержкой. <a href="https://tprg.ru/yGZ2" rel="nofollow">«Гравитон»</a> за 13 месяцев разработал <a href="https://tprg.ru/lZGg" rel="nofollow">ПАК виртуализации «Гелиус»</a>, где и аппаратная часть, и программная часть созданы, производятся и сопровождаются одной компанией.</p><p>Команда построила гиперконвергентное решение — в разработке участвовал весь департамент инженерных решений. Это решение сокращает стоимость инфраструктуры на 35-40% в перспективе 3-5 лет по сравнению со стандартным подходом.</p><figure><img src="https://media.tproger.ru/user-uploads/113485/2026-01-28/a0856b3d-5167-4321-a52d-b7d1b4ff11c3.webp" alt="" /></figure><h2>Задача: частное облако без зависимости от нескольких вендоров</h2><p>Бизнес-задача — снизить расходы на IT-инфраструктуру для российских компаний. Гиперконвергентное решение сокращает расходы на персонал за счёт упрощения обслуживания и позволяет эффективнее использовать имеющиеся ресурсы в модели IaaS.</p><p>Техническая задача — разработать программно-аппаратный комплекс на базе серверного и коммутационного оборудования российского производства (включённого в Единый реестр российской радиоэлектронной продукции) и программного обеспечения (включённого в Реестр российского программного обеспечения).</p><h2>Параметры проекта</h2><p><b>Срок разработки:</b> март 2021 — апрель 2022 (13 месяцев)</p><p><b>Команда:</b> около 25 инженеров и разработчиков</p><p><b>Экономический эффект:</b> снижение стоимости владения инфраструктурой на 35-40% в перспективе 3-5 лет по сравнению с классической схемой (выделенные серверы, отдельные системы хранения данных, лицензии на ПО от разных вендоров и расходы на обслуживание)</p><p><b>Статус: </b>внесён в Реестр Минпромторга (№10445375 от 07.05.2024, действует до 06.05.2027) и Реестр российского программного обеспечения (№23667 от 29.08.2024)</p><h2>Архитектура: гиперконвергенция вместо классической инфраструктуры</h2><p>Программно-аппаратный комплекс «Гелиус» построен по гиперконвергентной архитектуре. В отличие от классического подхода, где вычислительные мощности и системы хранения данных разделены физически, гиперконвергентная архитектура объединяет серверы в кластер, где каждый узел одновременно выполняет функции вычислительного узла и узла хранения данных.</p><figure><img src="https://media.tproger.ru/user-uploads/113485/2026-01-28/3ee96174-9a05-472c-9cf6-5c2a1d6a6922.webp" alt="" /></figure><p><b>Компоненты системы:</b></p><p>→ Серверы линейки «Гравитон» (объединены в кластер)</p><p>→ Среда виртуализации (управление виртуальными машинами и контейнерами)</p><p>→ Программно-определяемая система хранения данных (блочный, файловый, объектный доступ)</p><p>→ Программно-определяемая сеть (сегментирование через VXLAN, виртуальные маршрутизаторы, коммутаторы, межсетевые экраны)</p><p>→ Единая веб-консоль управления с ролевой моделью доступа</p><p>Архитектура предусматривает простое и предсказуемое масштабирование: достаточно добавить унифицированные вычислительные узлы на базе серверов линейки «Гравитон», и система автоматически включит их в кластер, распределив нагрузку.</p><h2>Семь ключевых технических возможностей «Гелиус»</h2><p><b>1. Широкая комплектация под разные задачи</b></p><p>Каждый узел кластера поддерживает процессоры Intel или AMD до 5-го поколения включительно, до 3 терабайт оперативной памяти на один узел, различные варианты накопителей HDD, SSD или NVMe — до 25 штук на один узел. Это позволяет компаниям собирать конфигурации под конкретные сценарии использования: от высокопроизводительных вычислений с большим объёмом оперативной памяти до массивов с приоритетом на объём хранения данных.</p><p><b>2. Высокая отказоустойчивость по схеме N+1</b></p><p>Резервирование аппаратных компонентов обеспечивает работу кластера даже при выходе из строя отдельных узлов. Целостность и доступность данных, хранящихся в кластере, обеспечивается тройной репликацией. Благодаря этому данные остаются доступными в случае выхода из строя до 40% от общего числа накопителей в кластере. Это критично для центров обработки данных, где простой инфраструктуры измеряется в миллионах убытков.</p><p><b>3. Развитая среда управления виртуальными машинами</b></p><p>ПАК «Гелиус» поддерживает живую миграцию виртуальных машин между узлами без остановки работы приложений, создание мгновенных снимков для быстрого отката к предыдущим состояниям, резервное копирование по расписанию, перенос виртуальных машин, созданных в импортных продуктах VMware, Hyper-V, Citrix и KVM. Последнее особенно важно для компаний, которые мигрируют с западных решений — не нужно разворачивать инфраструктуру с нуля, можно перенести существующие виртуальные машины.</p><p><b>4. Программно-определяемая система хранения данных со встроенным ML и поддержкой AI</b></p><p>Встроенная система хранения поддерживает три типа доступа к данным: блочный (для баз данных и виртуальных машин), файловый (для общих ресурсов) и объектный (для неструктурированных данных и резервных копий). Реализованы технологии компрессии и дедупликации для экономии дискового пространства, зеркалирования для повышения надёжности. Возможно построение тиринговых массивов, в которых автоматическая миграция «холодных» и «горячих» данных между медленными и быстрыми накопителями обеспечивается алгоритмами искусственного интеллекта. Система анализирует частоту обращения к данным и переносит редко используемые файлы на медленные, но объёмные HDD-накопители, а часто запрашиваемые — на быстрые NVMe, оптимизируя производительность и стоимость хранения.</p><p><b>5. Программно-определяемая сеть с полной изоляцией</b></p><p>Среда виртуализации работает в окружении программно-определяемой сети с сегментированием трафика виртуальных машин посредством VXLAN. Администраторы могут создавать виртуальные маршрутизаторы, коммутаторы и межсетевые экраны с индивидуальными настройками для каждого проекта или подразделения. Поддерживается технология vNAT и создание изолированных сетей в стиле DMZ для размещения публично доступных сервисов без риска для внутренней инфраструктуры. Реализованы балансировщики нагрузки по протоколам TCP, UDP, HTTP и HTTPS для распределения трафика между несколькими серверами приложений.</p><p><b>6. Встроенный мониторинг инфраструктуры и оборудования</b></p><p>В состав ПАК «Гелиус» входят средства мониторинга как виртуальной инфраструктуры (загрузка процессоров, использование памяти и дисков виртуальных машин, сетевой трафик), так и аппаратных компонентов кластера (температура, состояние накопителей, работа блоков питания, загрузка физических серверов). Единая веб-консоль с ролевой моделью доступа позволяет управлять всеми компонентами программно-аппаратного комплекса с рабочего места администратора без необходимости переключаться между разными интерфейсами.</p><p><b>7. Поддержка геораспределенных кластеров</b></p><p>ПАК «Гелиус» поддерживает возможность создания геораспределенных кластеров, когда узлы находятся в разных физических локациях — разных городах или дата-центрах. Это обеспечивает географическую отказоустойчивость: даже если один из дата-центров станет недоступен из-за аварии или стихийного бедствия, виртуальные машины продолжат работу на узлах в других локациях. Репликация данных между географически распределёнными узлами происходит автоматически.</p><h2>Главная трудность: выбор архитектуры и конфигураций</h2><p>🔴 Проблема: определить оптимальную архитектуру</p><p>Требовалось выбрать архитектуру для программно-аппаратного комплекса виртуализации и создать типовые конфигурации для узлов (серверов) кластера с учётом одновременного выполнения задач высокой отказоустойчивости, производительности и простоты управления. Гиперконвергентный подход требует тщательного баланса между вычислительными ресурсами и ресурсами хранения на каждом узле, а также продуманной схемы репликации данных.</p><p>✅ Решение: анализ реальных задач и опыт команды</p><p>Провели анализ типовых задач информационно-технологических отделов заказчиков, которые хорошо знакомы с серверным оборудованием «Гравитон», для формирования требований к программно-аппаратному комплексу виртуализации. Изучили функционал существующих продуктов в области виртуализации и хранения данных — как западных, так и российских — для дополнения требований к ПАК виртуализации. Использовали многолетний опыт инженеров и разработчиков компании «Гравитон» для выбора конфигураций узлов и создания программного обеспечения. Команда из более чем 100 специалистов объединила экспертизу в аппаратной части (производство серверов) и разработке программного обеспечения, что позволило создать сбалансированное решение.</p><h2>Результаты: экономика и отзывы клиентов</h2><p>Снижение совокупной стоимости владения инфраструктурой до 8 миллионов рублей в год по сравнению с затратами на классическую инфраструктуру. Традиционный подход требует закупки выделенных серверов, отдельных систем хранения данных, лицензий на программное обеспечение от разных вендоров и затрат на интеграцию и обслуживание всех этих компонентов. Гиперконвергентная архитектура ПАК «Гелиус» объединяет всё в одном решении от единого производителя.</p><blockquote>Переход на российское решение виртуализации — это важный шаг в реализации нашей информационно-технологической стратегии. Мы выбрали для модернизации своей инфраструктуры гиперконвергентные технологии. Это даёт существенную экономию по сравнению с классическим, конвергентным подходом, и быстрый результат: уже через два месяца после старта проекта мы использовали новую инфраструктуру и смогли перевести на неё свои информационно-технологические сервисы.</blockquote><p>Быстрое развёртывание и миграция — ключевое преимущество гиперконвергентной архитектуры. Компаниям не нужны месяцы на интеграцию разнородного оборудования и программного обеспечения от разных вендоров, координацию между несколькими службами поддержки. Единый производитель обеспечивает предсказуемость процесса и оперативное решение проблем.</p><h2>Планы развития: расширение платформ и автоматизация</h2><p><a href="https://tprg.ru/yGZ2" rel="nofollow">«Гравитон»</a> продолжает развитие <a href="https://tprg.ru/lZGg" rel="nofollow">ПАК «Гелиус»</a> по трём направлениям.</p><p>Поддержка новых серверных платформ от Intel и AMD. По мере выхода новых поколений процессоров команда будет адаптировать программное обеспечение для использования их возможностей — новых инструкций, улучшенной энергоэффективности, расширенной поддержки виртуализации.</p><p>Дополнение конфигурации программно-аппаратного комплекса тонкими клиентами линейки «Гравитон» для виртуальных рабочих столов. Это позволит компаниям полностью перевести сотрудников на работу с виртуальными десктопами, централизованно управляя всей вычислительной средой из единой консоли.</p><p>Расширение функционала системы управления для автоматизации рутинных операций администраторов. Планируется добавить сценарии автоматического масштабирования ресурсов в зависимости от нагрузки, умные алерты с анализом паттернов потребления ресурсов, шаблоны для быстрого развёртывания типовых конфигураций виртуальных машин.</p><p><i>Реклама. ООО «Ревотех», ИНН 9731071780, erid: 2W5zFHppVN9</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Как бизнесу защитить информацию: главное о бэкапах</title>
      <link>https://tproger.ru/articles/kak-biznesu-zashhitit-informaciyu--glavnoe-o-bekapah</link>
      <comments>https://tproger.ru/articles/kak-biznesu-zashhitit-informaciyu--glavnoe-o-bekapah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Oksana Karelina]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-biznesu-zashhitit-informaciyu--glavnoe-o-bekapah</guid>
      <description><![CDATA[<p>Зачем нужны бэкапы и как их правильно организовать в вашей компании, чтобы защитить данные пользователей. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-biznesu-zashhitit-informaciyu--glavnoe-o-bekapah">Как бизнесу защитить информацию: главное о бэкапах</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Утечка данных]]></category>
      <category><![CDATA[Кибербезопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 21 Oct 2025 16:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Вопрос кибербезопасности с каждым годом становится всё острее. Ущерб от DDoS-атак неуклонно <a href="https://www.vikingcloud.com/blog/cybersecurity-statistics">растёт</a>, а запрашиваемая злоумышленниками сумма выкупа за доступ к украденным данным увеличивается в геометрической прогрессии — с 2023 по 2024 год она выросла на <a href="https://www.sophos.com/en-us/press/press-releases/2024/04/ransomware-payments-increase-500-last-year-finds-sophos-state">500%</a>, достигнув в среднем 2 миллионов долларов.</p><p>При этом потеря информации возможна не только из-за хакерских атак, но и обычных человеческих ошибок. Бывает, что слишком положившись на интеллект и автономию технологий, мы забываем, что устройства тоже могут выходить из строя, в интернете бывают сбои, да и мы сами можем забыть сохранить, сделать копию или перенести данные в архив или облако.</p><p>В этой статье мы расскажем, как защитить важную информацию — вашу или ваших пользователей — с помощью бэкапов. Вы узнаете, как организовать резервное копирование быстро и без лишних усилий.</p><h2>Что такое бэкапы</h2><p>Итак, бэкап сайта (с англ. backup — запасной) — это резервное копирование файлов, папок, данных проекта на отдельный сервер. Таким образом можно избежать потери информации в случае атаки, сбоев в работе сервера или базы данных, плановых работ или даже неудачных изменений на сайте.</p><p>Главная идея резервного копирования — возможность в любой момент откатить версию проекта до более старой.</p><p>Бэкапы делятся на несколько видов. Разберём их в зависимости от механизма копирования:</p><ul><li>Полный</li></ul><p>Такая резервная копия сохраняет все данные. Она требует больше всего памяти и времени для создания.</p><ul><li>Инкрементальный</li></ul><p>Сохраняет только те данные, которые изменились с момента последнего бэкапа.</p><ul><li>Дифференциальный</li></ul><p>Включает только те файлы, которые изменились относительно последнего полного бэкапа.</p><ul><li>Обратное инкрементальное копирование</li></ul><p>Система берёт последний бэкап, сравнивает с последними изменениями и правит с учетом этих изменений. А старые версии данных хранятся в виде отдельных бэкапов, которые в любой момент можно просмотреть и вернуть.</p><ul><li>Синтетическое копирование</li></ul><p>За основу берётся последний полный бэкап, на который «наслаиваются» инкрементные копии — пока система не соберёт актуальную версию. Когда эта версия устаревает, цикл повторяется: создаётся новый синтетический бэкап поверх предыдущего полного.</p><p>Бэкапы также могут храниться на разных носителях, вот основные из них:</p><p><b>Сетевое хранилище (NAS)</b></p><p>Локальный сервер, где можно централизованно хранить бэкапы разных устройств и/или пользователей, объединяя их в одну сеть. Работает через LAN (локальное соединение) или интернет.</p><p><b>Другой компьютер</b></p><p>Если резервных копий немного, их можно хранить на обычном ПК. Но у такого способа есть большой минус — любое пользовательское устройство подвержено сбоям, поломкам, вирусам и т. д.</p><p><b>Внешний (жёсткий) диск</b></p><p>Компактный внешний диск удобно брать с собой, быстро получать доступ к данным, загружать и восстанавливать их. Однако из-за малого объема памяти он не подойдёт для сложных задач.</p><p><b>Облачное хранилище</b></p><p>Облачное хранилище доступно с любого устройства и из любой точки мира, данные здесь хранятся удалённо.</p><p>В последнее время бизнес <a href="https://electroiq.com/stats/backup-statistics">всё чаще</a> выбирает хранить бэкапы именно в облаке, делегируя эту задачу <a href="https://beget.com/ru/cloud">облачному хостинг-провайдеру</a>. Такой способ удобен для распределенных команд, а гибкая тарификация позволяет управлять расходами.</p><p>Так или иначе, у каждого способа хранения есть свои плюсы, позволяющие системе бэкапов работать как единый механизм. При этом многие до сих пор отказываются делать резервное копирование — рассмотрим подробнее, почему так происходит.</p><h2>Почему люди не делают бэкапы</h2><p>В России лишь <a href="https://rg.ru/2025/04/03/issledovanie-tolko-13-rabotaiushchih-rossiian-reguliarno-delaiut-rezervnye-kopii.html">13%</a> работающих россиян выполняют бэкапы регулярно, тогда как, например, в Европе <a href="https://www.expressvpn.com/blog/backup-data/?srsltid=AfmBOopY4TeUEPGqLM_kGexaXM478_xtdScmn8jQ4atIjidpfIDfwDWi">37%</a> пользователей делают резервные копии еженедельно.</p><ul><li>Недооценка рисков — например, из-за чрезмерной веры в надёжность техники или убеждения, что угрозы атак и потери данных преувеличены. Преуменьшение объёма или важности данных, которые нужно сохранить.</li></ul><ul><li>Халатность или недостаток технической грамотности. Многие думают, что резервное копирование не требует особых настроек и работает фоново. <a href="https://expertinsights.com/backup-and-recovery/cloud-backup-stats">43%</a> IT-руководителей и вовсе уверены, что бэкап данных на сервере — полностью ответственность провайдера.</li></ul><p>Теперь рассмотрим, как предупредить ошибки при организации резервного копирования и поставить этот процесс на поток.</p><h2>Ошибки при организации резервного копирования</h2><p>Еще в 2021 году разработчик программного обеспечения Veeam выяснил, что <a href="https://www.securitymagazine.com/articles/94832-of-data-backups-are-failing-creating-data-protection-challenges?utm_source=chatgpt.com">58%</a> бэкапов проваливаются, не выполнив своей основной функции. Разберём несколько возможных причин, почему так происходит.</p><ul><li>Нерегулярность</li></ul><p><a href="https://rg.ru/2025/04/03/issledovanie-tolko-13-rabotaiushchih-rossiian-reguliarno-delaiut-rezervnye-kopii.html">62%</a> пользователей в РФ копируют и сохраняют рабочие данные, но большинство делают это нерегулярно.</p><ul><li>Хранение всех копий в одном месте</li></ul><p>Основная идея создания бэкапов сервера – скопировать данные на другой носитель. Однако многие игнорируют это правило и хранят бэкапы на том же компьютере или внешнем диске, что гипотетически может привести к полной потере данных.</p><ul><li>Хранение только одной копии</li></ul><p>Иметь одну резервную копию рискованно – если она повредится или вы случайно сохраните неверную версию, данные пропадут безвозвратно. Поэтому существует правило «3-2-1»: лучше иметь не менее трех копий данных, хранить их на двух и более физических носителях и не менее одной копии – удалённо.</p><ul><li>Отсутствие тестирования восстановления</li></ul><p>По статистике, лишь <a href="https://www.catalogicsoftware.com/blog/7-backup-mistakes-companies-still-making-in-2025">30%</a> компаний проводят комплексное тестирование резервного копирования.</p><ul><li>Незащищенность бэкапов</li></ul><p>Хотя бэкапы не требуются ежедневно, защищать их очень важно: <a href="https://invenioit.com/continuity/disaster-recovery-statistics/">96%</a> всех атак программ-вымогателей направлены на заражение резервных копий.</p><h2>Когда бэкапы пригодились: кейсы компаний</h2><p>Часто понимание важности бэкапов приходит только после неудач. Рассмотрим, когда бэкапы оказались в центре проблемы безопасности и как компании выходили из этих ситуаций.</p><p><b>Google Cloud</b></p><p>В 2024 году пенсионный фонд UniSuper <a href="https://www.theguardian.com/australia-news/article/2024/may/09/unisuper-google-cloud-issue-account-access">обнаружил</a>, что его учетная запись в Google Cloud удалена. Из-за сбоя пострадали около 620 000 пенсионеров — доступ к их счетам оказался заблокирован на неделю.</p><p>Решить проблему помог другой партнер UniSuper — хостинг-провайдер, которому фонд отдал свои резервные копии на хранение. Они помогли компании восстановить данные и доступ к аккаунтам.</p><p><b>Hycu</b></p><p>Одна медицинская компания и клиент Hycu <a href="https://www.hycu.com/blog/an-anatomy-of-responding-to-and-surviving-a-ransomware-attack">уделяла</a> кибербезопасности огромное внимание, но в её инфраструктуре всё равно нашлось слабое место. Через электронное письмо систему поразила программа-вымогатель, а когда проблему заметили, заражены уже были все файлы.</p><p>В ходе расследования сотрудники обнаружили один незашифрованный файл, созданный, чтобы в случае атаки восстановить сервер из бэкапа. Он стал основой для разблокировки данных и спас компанию от выплаты миллионного выкупа.</p><p><b>Samsung</b></p><p>Когда в 2014 году в дата-центре Samsung <a href="https://uk.pcmag.com/electronics/9618/fire-at-samsung-backup-data-center-takes-services-offline">произошёл</a> крупный пожар, большая часть данных пропала безвозвратно из-за отсутствия удалённых бэкапов.</p><p>Как показывают эти и другие подобные кейсы, создание резервных копий сервера — один из главных инструментов защиты данных.</p><h2>Кто обычно отвечает за бэкапы</h2><p>В теории резервное копирование — это ответственность пользователя. Он принимает решение о создании бэкапов, выбирает поставщика и делегирует ему хранение копий. Однако сегодня интернет — это конкурентная среда, поэтому ответственные провайдеры часто сами заботятся о бэкапах, выстраивая процессы автоматического резервного копирования.</p><p>Мы в Beget тоже придерживаемся такой практики и внедрили для пользователей как автоматическое резервное копирование, так и бэкапы по требованию. Автоматический бэкап сайта на хостинге создается в среднем раз в 3 дня, на VPS – раз в 2–5 дней. Полный бэкап сервера VPS хранится в среднем 10 суток, после чего заменяется более свежей версией. Точного срока хранения бэкапов на виртуальном хостинге нет: на каждом аккаунте может храниться единовременно только 10 бэкапов, а когда место заканчивается, более старые копии удаляются.</p><h2>Заключение</h2><p>Утечка данных — проблема, которая почти всегда приходит без предупреждения. Пожалуй, именно поэтому, несмотря на все затраченные на системы безопасности средства, данные теряются постоянно: например, в 2023 году более <a href="https://bdaily.co.uk/articles/2023/09/05/almost-two-in-three-uk-companies-have-lost-data-due-to-failed-backups">90%</a> компаний оказались в ситуации, когда им пришлось обратиться к бэкапам, и при этом только <a href="https://bdaily.co.uk/articles/2023/09/05/almost-two-in-three-uk-companies-have-lost-data-due-to-failed-backups">27%</a> компаний смогли восстановить все данные, так как резервное копирование было организовано неправильно.</p>]]></content:encoded>
    </item>
    <item>
      <title>Устраиваем свой Data QA с PyTest и фикстурами</title>
      <link>https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli</link>
      <comments>https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Елизавета Якушева]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli</guid>
      <description><![CDATA[<p>Рабочий подход к тестированию трансформации данных в ETL-процессах. На примере Python-проекта с pytest, allure и psycopg2 демонстрируется, как автоматизировать создание и наполнение таблиц, хранить схемы и данные, а затем сравнивать результат. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-testirovat-perenos-i-transformaciyu-dannyh-bez-boli">Устраиваем свой Data QA с PyTest и фикстурами</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 01 Sep 2025 12:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Как тестировать перенос и трансформацию данных без боли</h2><p>Я всё думаю над тем, о чём говорить на своём канале. Казалось бы, инфы в интернете — вагон и маленькая тележка: бери, читай, вдохновляйся. Но вот что удивительно — про то, как тестировать данные, как они перетекают из одной таблицы в другую и не превращаются в тыкву, пишут мало.</p><p>А зря.</p><p>За свою практику я встречала разные подходы к организации Data QA. В этой статье я расскажу про самый простой и быстрый вариант, который можно «собрать на коленке», а потом уже развивать. С примерами кода и тем, зачем SQL нам нужен в этой жизни.</p><p>И небольшой дисклеймер. Если вы знаете, как сделать это на Python стильно модно молодежно, обязательно напишите мне об этом в комментариях, я с удовольствием почитаю про ваш подход.</p><p>Также подписывайтесь на мой ТГ, который я почти не веду. <br /><br /></p><h2>Базовый сценарий</h2><ol><li>Есть таблица-источник source_table.</li><li>Разработчик запускает свой код (Spark, Airflow или что у него там), и данные магическим образом перекладываются + преобразуются.</li><li>На выходе получаем result_table.</li></ol><p>Вопрос: как это тестировать?</p><h3>Самый быстрый и простой путь</h3><p>Подготовка:</p><ol><li>Создаём таблицу-источник.</li><li>Наполняем её данными (синтетика или реальные примеры с прода).</li></ol><p>Действие:</p><ol><li>Запускаем ETL код.</li><li>Сравниваем данные «как было» и «как стало».</li></ol><p>После теста:</p><ol><li>Удаляем таблицу-источник.</li><li>Удаляем таблицу-приёмник.</li></ol><p>На коленке это можно собрать так:</p><ol><li>CREATE TABLE …</li><li>INSERT INTO …</li><li>Ручной запуск пайплайна (Spark/Airflow).</li><li>Какой-нибудь скрипт для сравнения результатов.</li></ol><p>Рабочая схема? Да.</p><p>Удобная? Нет.</p><h2>Где хранить эти скрипты?</h2><p>Можно, конечно, прилепить их к задаче в Jira в виде файликов. Но выглядеть это будет как «фигня на палке». Через месяц никто не вспомнит, что это было и зачем.</p><p>Поэтому я решила собрать свой Python-проект для автоматизации. А вы можете склепать себе такой же, и жизнь сразу станет легче.</p><h3>Архитектура проекта</h3><h3>Минимальный стек</h3><h3>1. Utils — мелкие, но полезные</h3><p>Здесь мы храним всякую мелочёвку. Например, функцию для открытия JSON:</p><p>Важно отметить, что данные я всегда стараюсь хранить в виде массива с json. Так удобнее использовать.</p><h3>2. APIClient — для триггеров</h3><p>Здесь всё максимально тривиально: клиент для вызова API и запуска ETL джоб.</p><h3>3. PostgreSQLClient — основной игрок</h3><p>Класс для подключения, запросов, создания таблиц, вставки данных и удаления.</p><h2>Фикстуры (conftest.py)</h2><h3>API фикстуры</h3><p>Я показываю пример, как поднимаю один API клиент. Но у вас их может быть много: например, разные сервисы или разные перекладчики.</p><h3>DB фикстура</h3><p>Пример для дефолтной PostgreSQL, но вы можете добавить фикстуры для поднятия GreenPlum или ClickHouse.</p><h2>Как хранить данные?</h2><p>А теперь самый сок, которым я обмазываюсь сейчас.</p><p>Конечно, можно создать отдельный скрипт на чистом sql для создания и редактирования своих табличек: больших и маленьких. Но, если честно, это так *цензура* неудобно.</p><p>Поэтому я придумала хранить схему и данные в отдельных json файлах и налету генерить скрипты. Да, Америку я вновь не открываю, и очень жаль.</p><p>В директории тестов я создала папку resources, где храню эти файлы.</p><p>Конечно, в таком виде вы не передадите ничего в Postgres и ничего не слепите. Так что я услужливо предоставляю вам код, чтобы вы его копировали и вдохновлялись.</p><p>Вы можете взять и пропихнуть эти куски кода прямо в тело теста, но я предпочитаю оборачивать это дело в фикстуры-управленцы, которые будут делать это за меня и записывать отдельными шагами в Алюр:</p><p>Отдельное удовольствие мне даёт вот эта строчка кода db_client:PostgreSQLClient.Она значит, что если так вышло, что у меня есть куча разных PostgesSql, я могу в эту фикстуру прокинуть нужный мне клиент без дополнительных приседаний. И это, конечно, прекрасно.</p><h3>Пример: подготовка данных</h3><p>Самые внимательные уже заметили, что в примере выше я поднимала postgres-клиента.</p><p>Так что разницы почти никакой (ну, кроме тех случаев, когда внезапно очень даже есть 🙃).</p><h3>И сам тест</h3><p>Конечно, можно сравнивать всё это дело через всякие прослойки типа Pandas.</p><p>Но, камон, у меня что, куча времени сидеть, читать доки и писать суперсложные датафреймы ради пары простых проверок? Нет.</p><p>Позвольте мне радостно строчить свой первозданный код с дефолтными проверками и быть довольной этим минимализмом.</p><p>Это я отвлеклась. Вот такой код у меня получается. Я не очень люблю сверять даты и названия таблиц, у меня генерит тест на лету:</p><h2>Итог</h2><ul><li>Ручные скрипты → боль и страдания.</li><li>Автоматизация через Python+pytest → быстро, удобно, воспроизводимо.</li><li>JSON-файлы позволяют хранить схемы и данные в читаемом виде.</li><li>Allure даёт красивые отчёты.</li></ul><p>В итоге у вас появляется настоящий фреймворк для Data QA, который легко расширять и масштабировать.</p>]]></content:encoded>
    </item>
    <item>
      <title>W3C впервые за 20 лет обновила формат PNG. Вот что изменилось</title>
      <link>https://tproger.ru/news/--w3c-vpervye-za-20-let-obnovila-format-png--vot-chto-izmenilos</link>
      <comments>https://tproger.ru/news/--w3c-vpervye-za-20-let-obnovila-format-png--vot-chto-izmenilos?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--w3c-vpervye-za-20-let-obnovila-format-png--vot-chto-izmenilos</guid>
      <description><![CDATA[<p>W3C впервые с 2004 года обновила PNG: теперь формат поддерживает HDR, анимации (APNG) и EXIF-метаданные — это крупнейший апдейт за 20 лет</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--w3c-vpervye-za-20-let-obnovila-format-png--vot-chto-izmenilos">W3C впервые за 20 лет обновила формат PNG. Вот что изменилось</a>»</p>]]></description>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Adobe]]></category>
      <category><![CDATA[RPA]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Jun 2025 13:17:54 GMT</pubDate>
      <content:encoded><![CDATA[<p>W3C впервые с 2004 года выпустил обновлённую спецификацию формата PNG. В третьем издании стандарта появилось сразу три важных нововведения: поддержка HDR, анимации и сохранения метаданных EXIF.</p><p>Это крупнейшее обновление формата за всю его историю.</p><h2>Что нового в PNG</h2><h2>1. Поддержка HDR</h2><p>Новая версия формата теперь умеет хранить изображения с расширенным динамическим диапазоном — это важно для современных дисплеев и устройств, способных отображать больше оттенков и деталей в тенях и светах.</p><h2>2. Анимация (APNG)</h2><p>В формате официально закреплена поддержка анимаций. Ранее Animated PNG использовался неофициально и поддерживался не всеми браузерами. Теперь это часть спецификации.</p><h2>3. Метаданные EXIF</h2><p>В PNG теперь можно сохранять стандартные метаданные камеры и устройства съёмки: дата, настройки экспозиции, модель устройства и другие параметры — как это давно работает в JPEG и других форматах.</p><h2>Почему обновление важно</h2><p>PNG остаётся одним из самых популярных форматов сжатия без потерь. Его используют для хранения графики, интерфейсов, скриншотов и архивных изображений. В США, Канаде и Австралии PNG официально рекомендован для цифровой архивации.</p><p>До сих пор формат уступал более современным аналогам вроде WebP и AVIF в функциональности — особенно из-за отсутствия поддержки анимаций и HDR. Теперь этот разрыв сокращается.</p><h2>Кто участвовал</h2><p>Обновление спецификации инициировала рабочая группа W3C, занимающаяся текстами с таймкодами — вроде субтитров и аудиоописаний. Им понадобилась поддержка HDR, и с этой задачей они обратились к формату PNG.</p><p>В проекте приняли участие крупные игроки индустрии: Adobe, Apple, Google, BBC, Comcast, NBCUniversal и MovieLabs.</p><h2>Что дальше</h2><p>W3C уже планирует следующее обновление. В нём хотят улучшить совместимость между SDR и HDR-изображениями, а также поработать над эффективностью сжатия.</p><p>Теперь, когда PNG официально поддерживает HDR, анимации и EXIF, формат получает второй шанс в эпоху WebP, AVIF и HEIC.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ваше новое хранилище данных: на что обратить внимание при миграции?</title>
      <link>https://tproger.ru/articles/vawe-novoe-hranilishhe-dannyh--na-chto-obratit-vnimanie-pri-migracii-</link>
      <comments>https://tproger.ru/articles/vawe-novoe-hranilishhe-dannyh--na-chto-obratit-vnimanie-pri-migracii-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгения Р]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vawe-novoe-hranilishhe-dannyh--na-chto-obratit-vnimanie-pri-migracii-</guid>
      <description><![CDATA[<p>Планируете миграцию хранилища данных? Разбираем 5 ключевых шагов: от определения целей до выбора платформы. Узнайте, как избежать типичных ошибок и мигрировать без потерь.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vawe-novoe-hranilishhe-dannyh--na-chto-obratit-vnimanie-pri-migracii-">Ваше новое хранилище данных: на что обратить внимание при миграции?</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 06 Dec 2024 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В последние два года многие российские компании сталкиваются с необходимостью миграции своих хранилищ данных (ХД) с международных платформ на отечественные или open source решения.</p><p>Параллельно меняется сам подход к построению ХД. Раньше компании сначала загружали данные в единое хранилище и только потом думали, какие аналитические отчеты на его базе строить. Теперь же большинство организаций сразу решает бизнес-задачу – создает отчетность по определенному блоку, и для этого строит ХД. Получается, что у них уже есть отчетность и ХД и им не нужно собирать потребности пользователей. Этот подход облегчает миграцию данных: компании видят, какие отчеты нужны, и мигрируют ХД соответственно.</p><figure><img src="https://media.tproger.ru/user-uploads/109714/2024-12-05/563ae3bc-6e3d-455b-8f37-e661de9d379d.png" alt="" /><figcaption>Как вместить в новое хранилище все, что нажито непосильным трудом?</figcaption></figure><p>Тем не менее, есть несколько важных шагов, которые придется учитывать при переносе вашего ХД, чтобы ваш заказчик был доволен.</p><h3>Шаг 1: Определить цели миграции</h3><p>Первоочередная задача, которую вы должны решить — определить цели миграции. Это нужно сделать, опираясь на проблемы, с которыми компания столкнулась. Это может быть, например, нехватка места для новых данных в ХД или необходимость ухода от западных технологий.</p><p>Необходимо проанализировать, какие основные задачи закрывало старое ХД. Новое хранилище должно не только выполнять те же функции, но и обладать актуальной документацией и оптимизированной структурой без излишних данных. Если не решить эти задачи заранее, то вместо миграции вы будете заниматься рефакторингом: то есть поменяете код, но оставите старые ошибки.</p><h3>Шаг 2: Проверить качество данных</h3><p>Качество данных в ХД является одним из критических аспектов для получения консистентной информации, которой можно доверять. Несмотря на то, что существуют специализированные инструменты Data Quality, которые обеспечивают качество данных, необходимо помнить, что со 100% вероятностью какая-то информация в старое ХД заливалась из Excel, что-то подправлялось вручную, а что-то корректировалось прямо в интерфейсе. Это приводит к тому, что данные в старом и новом хранилищах не «сойдутся».</p><p>Как этого избежать? Надо понять причины, почему появились внесистемные данные, а дальше внедрить комплексный подход к ведению информации. Внесистемные данные — это риски, которые могут и в дальнейшем приводить к ошибкам и вынуждать заниматься корректировкой данных.</p><p>Если внесистемные данные были временным явлением, можно перенести их из старого ХД за прошлые периоды, то есть рассматривать старое ХД просто как источник исторических данных.</p><h3>Шаг 3: Провести предпроектное обследование</h3><p>До начала миграции стоит провести аудит старого ХД и четко задокументировать, какая функциональность у него останется. Возможно, имеет смысл оставить в нем исторические данные для того, чтобы при необходимости восстановить систему отчетности прошлых лет, при этом не перегружая новое ХД.</p><h3>Шаг 4: Выбрать модель данных</h3><p>Во многих проектах по миграции ХД стало «модно» использовать модель данных datavault. Однако надо помнить, что, помимо плюсов, у этой модели есть особенности, которые могут повлиять на скорость расчета витрин — большое количество таблиц, дополнительные джойны, которые раньше были не нужны.</p><p>Поэтому при выборе модели для будущего ХД надо вспомнить о цели, ради которой оно строится. Если это просто хранение с возможным последующим масштабированием данных, то data vault подойдет. Однако если это подготовка агрегатов, витрин данных и аналитической отчетности, лучше делать комбинацию data vault с третьей нормальной формой.</p><h3>Шаг 5: Обучить команду</h3><p>От того, насколько команда разработки и поддержки мотивирована и готова заняться работой с новым ХД, зависит успех проекта миграции.</p><p>Если в организации есть собственная сильная ИТ-команда, то можно строить ХД самостоятельно. Однако многие компании решают эту задачу приглашением консультантов-интеграторов или вендоров, которые уже реализовывали миграцию и проводят полноценное обучение.</p><h2>Куда мигрировать хранилища данных сегодня</h2><p>Сегодня выбор технологий для ХД в России не так велик — это может быть Greenplum, Hadoop или Spark, то есть решения на базе open source.</p><p>Вне зависимости от того, что вы выберете, помните, что главное, что надо учитывать — это масштабируемость, скорость обработки и легкость интеграции с существующими системами при выборе платформы.</p><p>К сожалению, нет «супертаблетки», которая поможет сделать отличное ХД: в каждом конкретном случае надо смотреть на цели и задачи. В любом случае важно помнить, что успех миграции определяется не только техническими решениями, но и четким пониманием бизнес-потребностей и организационной подготовленностью компании. Тщательное планирование и внимание к деталям могут обеспечить плавный переход к современным решениям для работы с данными.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как строить Data Office: опыт «Ростелекома»</title>
      <link>https://tproger.ru/articles/kak-stroit-data-office-opyt-rostelekoma</link>
      <comments>https://tproger.ru/articles/kak-stroit-data-office-opyt-rostelekoma?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вика Овсянникова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-stroit-data-office-opyt-rostelekoma</guid>
      <description><![CDATA[<p>Рассказываем, какие этапы прошли, создавая дата-офис в «Ростелекоме»: от инвентаризации проектов до формирования data-driven культуры.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-stroit-data-office-opyt-rostelekoma">Как строить Data Office: опыт «Ростелекома»</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 04 Mar 2024 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Продолжим тему Data Office в новой статье. Многие компании сейчас выстраивают собственные подразделения, работающие с данными. Централизация дата-процессов экономит время и силы, избавляет от рассинхрона по данным, а со временем повышает рентабельность всего бизнеса. Но это только в том случае, если все процессы построены правильно. С чего начать и к чему идти в создании дата-офиса? О чём важно помнить специалистам, которые этим займутся? Расскажем на собственном опыте.</p><p>Data Office в «Ростелекоме» стал зарождаться в 2017-2018 годах после появления единого технологического хранилища. Получив первые успешные проекты на централизованной платформе, мы задумались о такой же централизации работы с данными. До этого данными в разных подразделениях занимались обособленно.</p><p>Когда у тебя одно хранилище данных, ты тратишь N денег, когда два — затраты возрастают уже десятикратно, потому что кроме софта появляется обслуживающий персонал, дорожают внутренние процессы. А потом люди перестают понимать, куда идти за данными. У всех получаются разные результаты, и начинаются конфликты.</p><h2>Как мы выстраивали Data Office</h2><h3>Шаг № 1. Провели инвентаризацию всех проектов и создали единый контур</h3><p>В любой современной компании обязательно есть процессы управления данными даже при отсутствии единой политики. Поэтому первый шаг к созданию дата-офиса — проанализировать все проекты, где есть работа с данными, информацией, аналитикой. Понять, какие из них целевые, что объединить и так далее, а затем создать архитектуру всех этих взаимосвязанных решений.</p><p>У каждого отдельного бизнеса уже было собственное хранилище данных, и нам потребовалось разобраться во всех внутренних процессах, завязанных на эти хранилища (продажи, техподдержка, обслуживание клиентов) прежде, чем переключать всё на единую систему.</p><p>Важно подумать над технической архитектурой централизованного контура, на котором будет развиваться отчётность. Продумывать его нужно не только под сиюминутные задачи, но и на перспективу: заложить возможности для масштабирования, понять, какие аналитические кейсы на нём можно будет разворачивать. Даже если сейчас у вас есть живая потребность только в аналитическо-регулярной отчётности, пакетной доставке и обработке, завтра на этих же данных нужно будет подключать команды для подготовки данных для ML-моделей, для realtime отчётности и так далее.</p><h3>Шаг № 2. Объяснили подразделениям и командам плюсы перехода</h3><p>Замена привычных рабочих процессов на что-то новое естественным образом вызывает дискомфорт и недовольство. Тем более что преимущества централизации видны не сразу: сначала нужно пройти сложные процессы создания и отладки единой модели, и только спустя время мы наблюдаем и качественный, и количественный эффект.</p><p>К тому же на сотрудников накладывалась дополнительная нагрузка. В сегменте B2C при переходе на централизованное хранилище коллегам приходилось не только отвечать за аналитику движения клиентской базы, но и настраивать все потоки данных и выверять методику расчёта показателей.</p><p>Мы находили наиболее лояльных партнёров из бизнеса и реализовывали с ними проекты в новом подходе, тем самым укрепляя его авторитет благодаря более эффективному результату. Мы отказались от ручных операций: сейчас в бизнес-сегментах данные, сформированные по единой методологии, загружаются напрямую в управленческую отчётность. Бизнес начал углублять аналитику, ставить адресные задачи и в целом качественнее контролировать процесс. Уменьшились и совокупные затраты во всей компании, в том числе за счёт отказа от вендорских лицензий и перехода на нашу платформу управления данными.</p><h3>Шаг № 3. Определились с технологическим стеком и подготовили специалистов</h3><p>Мы понимали, что количество систем в ландшафте компании со временем будет только увеличиваться, и у нас должна быть возможность быстро забирать данные через любые способы интеграции. Поэтому при выборе архитектуры важными факторами были универсальность и быстрая масштабируемость.</p><p>Решить задачу построения платформы, опираясь на классическую модель построения DWH с участием крупных вендорных appliance, не получилось бы. Мы стали смотреть в сторону software-based и open-source based решений. В качестве ядра системы выбрали Hadoop и Greenplum — гибкие и хорошо масштабируемые инструменты, со взаимной совместимостью и большой экосистемой сопутствующих технологий.</p><p>Не забыли и про TCO таких продуктов: часто за низкой стоимостью лицензий скрывается высокая стоимость сопровождения. Чтобы эффективно использовать такие решения, мы привлекли опытную экспертную команду.</p><h3>Шаг № 4. Предусмотрели решение текущих задач по данным</h3><p>Главная проблема — заказчики не будут ждать, пока мы сделаем красивый ландшафт, построим хранилища и разберёмся, как работать с новыми технологиями. Данные им нужны здесь и сейчас. Поэтому важно отстроить процессы так, чтобы давать бизнесу готовые аналитические решения и параллельно внутри развивать идеальный дата-офис.</p><p>Так, у нас появились два направления: фабрика аналитической отчётности, где за каждый сегмент бизнеса отвечал отдельный фронт-менеджер, и проектное направление, которое закрывало технический долг и развивало техническую составляющую. В нём строили централизованное хранилище, потоки, справочники, работали над <a href="https://habr.com/ru/companies/rostelecom/articles/675554/">качеством и защитой данных</a>: с одной стороны, помогали «фронтам», чтобы они делали отчётность здесь и сейчас, а с другой — продумывали правила, которые из состояния стартапа помогут перейти на промышленные рельсы.</p><p>Слаженный Data Office должен быть универсальным и легко масштабируемым, требования к оборудованию должны быть простыми, преимущественно с базой из известных решений с открытым исходным кодом. Такой подход даёт гибкость и стабильность поддержки при сравнительно низкой ТСО.</p><h3>Шаг № 5. Формирование data-driven культуры в компании</h3><p>Мы уделяем много времени и сил обучению сотрудников работе с данными и формированию data-driven мышления. Проводим «мягкие» программы, где разбираем, как Amazon и Google поднимают рентабельность своего бизнеса с помощью анализа данных. Запускаем «хардовые» программы, где учим работать с BI-дашбордами, базами данных, Hadoop и другими техническими инструментами. Так, после программы по работе с нейросетями у нас на портале зарегистрировалось 600 новых пользователей.</p><p>Есть и внешняя история: в 2019 году мы создали бесплатный общедоступный проект <a href="https://datatalks.rt.ru/">DataTalks</a>. Изначально мы планировали обучать работе с данными студентов, но в итоге на программу пришли и действующие дата-специалисты, и даже CDO нескольких компаний.</p><p>При становлении дата-офиса важно разработать и установить правила игры: определить, что такое работа с данными, из каких ролей и процессов она состоит, каковы обязанности всех участников процесса сбора, анализа и интерпретации данных предусмотрены в общей стратегии. По сути, это законодательный орган, который регламентирует работу с данными для всех многочисленных подразделений и проектов, нынешних и будущих, и минимизирует риск «рассинхрона». В Ростелекоме мы назвали его политикой по управлению данными.</p><h2>Как определить, что всё получилось</h2><p>По этим метрикам мы определяем, что подразделение устоялось и Data Office стал эффективной функцией бизнеса.</p><p><b>Количество обращений растёт.</b> С нашим внутренним порталом данных работает в среднем шесть тысяч пользователей ежемесячно.</p><figure><img src="https://media.tproger.ru/user-uploads/75379/2023-09-13/b0ae0d75-ad39-4f48-8ab7-4206e0c1b53a.png" alt="дата офис" /></figure><p><b>Бизнес не пытается создавать централизованные решения у себя «под столом».</b> Даже если бизнес не может найти готовые шаблоны по отчётам и аналитике, он приходит и решает свои задачи с помощью нашей централизованной инфраструктуры.</p><p><b>Отсутствует текучка кадров.</b> Если люди не понимают целей и задач, не понимают, какую пользу приносят бизнесу, они быстро увольняются. В нашем случае основная команда не менялась с 2019 года: то есть люди, которые начинали Data Office, остались и продолжают расти внутри подразделения.</p><p><b>Продукт обновляется.</b> Мы совершенствуем доступность системы, скорость подготовки регулярных данных и ряд других технических характеристик: мы начинали с ежемесячных отчётов, но сейчас практически все дата-продукты переведены на ежедневное обновление.</p><p><b>Пайплайн управления загрузками стал стабильнее.</b> Мы руководствовались такими принципами, чтобы ускорить работу с продуктами:</p><ul><li>автоматизировали процессы, создав шаблоны загрузки данных и прописав логику выбора шаблона на основе метаданных;</li><li>разбили процессы на атомарные этапы, описав в репозитории шаги по загрузке, проверке, синхронизации, сбору статистики и так далее;</li><li>определили порядок выполнения задач по принципу FIFO, чтобы они регистрировались, а не выполнялись немедленно;</li><li>настроили дискретно-непрерывные загрузки.</li></ul><p>Мы наладили системную работу с источниками: обучили для этого команду поддержки, увеличили мощности инфраструктуры, выровняли расписания регламентных процессов.</p><p>Также для хранилища выстроили чёткое расписание и управление ресурсами: для наполнения данных мы максимально используем ночные часы, а дневные — для их потребления. Мы учитываем блокировки и руководствуемся выстроенной логикой зависимостей таблиц.</p><p>Сейчас за месяц мы обрабатываем 300 тыс. процессов и 1,5 млн операций. Около 85% загрузок из источников в ODS реализуются на готовых процессах. На разработку новых процессов загрузок в DDS и витрин разработчики тратят считаные минуты, уделяя основное время реализации и отладке бизнес-логики.</p><p><b>Есть финансовый эффект.</b> Каждый дата-продукт и сервис мы измеряем с точки зрения отдачи инвестиций. Самый простой пример с Data Science: DS-модели позволяют нам продавать больше услуг клиентам или улучшать сервис.</p><h2>О чём важно помнить, создавая Data Office?</h2><ul><li>При формировании новых правил не стоит резко ломать существующие: только помогать и дополнять.</li><li>Фокусироваться не только на техническом решении задач, но и на бизнес-смыслах. Создавая решение просто по ТЗ, мы получим то, что будет работать, но не даст того бизнес-эффекта, который мог бы быть, или вообще окажется бесполезным. Нужно больше сотрудничать с бизнесом, чтобы понимать сценарий дальнейшего клиентского использования.</li><li>Осмысленная работа с задачами поможет не перегореть сотрудникам нового подразделения: так они будут понимать, что «не просто кирпичи складывают, а строят храм».</li><li>Важно объяснять всем участникам процесса, что работа с данными — это не только обязанность одного маленького подразделения, но и работа всей компании. Заказчики должны понимать, для чего нужны данные, какие инсайды из них можно получить — и работать над тем, чтобы эти качественные данные у компании были.</li></ul><blockquote>Мне кажется, идеальный дата-офис с точки зрения бизнеса — это подразделение, о существовании которого ты можешь даже не знать, но при этом ты можешь решить любую свою аналитическую задачу и получить ответ на любой запрос.</blockquote><blockquote>Хороший Data Office — место, где работают профессионалы, которые понимают, что они делают, и делают это с прицелом на бизнес-результат. В том числе и проактивно предлагают бизнесу решения: не только отвечают на запросы по выручке и так далее, а сами подсказывают, какие данные нужны и как их использовать наилучшим образом.</blockquote><p>Остались ли у вас вопросы по выстраиванию Data Office в компании? С радостью ответим на них в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Таблицы в SQL: типы и операции</title>
      <link>https://tproger.ru/articles/tablicy-v-sql</link>
      <comments>https://tproger.ru/articles/tablicy-v-sql?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tablicy-v-sql</guid>
      <description><![CDATA[<p>Рассказали, что такое таблицы в SQL, какие существуют типы таблиц и какие основные операции над ними можно совершать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tablicy-v-sql">Таблицы в SQL: типы и операции</a>»</p>]]></description>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Nov 2023 12:00:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказали, что такое таблицы в SQL, какие существуют типы таблиц и какие основные операции над ними можно совершать.</p><ol><li><a href="https://tproger.ru/#one">Что такое таблицы в SQL</a></li><li><a href="https://tproger.ru/#two">Обычные таблицы</a></li><li><a href="https://tproger.ru/#three">Секционированные таблицы</a></li><li><a href="https://tproger.ru/#four">Временные таблицы SQL</a><a href="https://tproger.ru/#three"></a></li><li><a href="https://tproger.ru/#five">Системные таблицы</a><a href="https://tproger.ru/#four"></a></li><li><a href="https://tproger.ru/#six">Широкие таблицы</a><a href="https://tproger.ru/#five"></a></li><li><a href="https://tproger.ru/#seven">Основные операции над таблицами в SQL</a></li></ol><h2>Что такое таблицы в SQL</h2><p>В SQL (Structured Query Language) таблица представляет собой структурированную коллекцию данных, представленную в виде строк и столбцов. Она используется для хранения и организации данных в реляционных базах данных.</p><p>Таблица состоит из столбцов (также известных как поля или атрибуты) и строк (также известных как записи или кортежи). Каждый столбец определяет тип данных, который может быть хранен в этом столбце, и имеет уникальное имя, которое идентифицирует его внутри таблицы. Каждая строка представляет отдельную запись данных и содержит значения для каждого столбца.</p><p>Пример создания таблицы в SQL:</p><p>В этом примере мы создаем таблицу “employees” с четырьмя столбцами: “id”, “name”, “age” и “email”. Тип данных каждого столбца указан после его имени. Первый столбец “id” устанавливается в качестве первичного ключа с помощью ключевого слова “PRIMARY KEY”, что означает, что значения в этом столбце должны быть уникальными и не могут быть пустыми.</p><p>Когда таблица создана, мы можем выполнять различные операции над ней, такие как вставка новых записей, обновление существующих записей, выборка данных с использованием SQL-запросов и многое другое. Таблицы могут быть связаны друг с другом с помощью внешних ключей, что позволяет строить сложные связи между данными.</p><h2>Типы таблиц в SQL</h2><p>В SQL существует несколько типов таблиц, которые могут быть использованы в зависимости от потребностей и требований базы данных.</p><h3>Обычные таблицы SQL</h3><p>Обычная таблица в SQL – это структурированная коллекция данных, представленных в виде строк и столбцов. Она используется для хранения и организации данных в реляционных базах данных.</p><p>Таблица состоит из столбцов (также известных как поля или атрибуты) и строк (также известных как записи или кортежи). Каждый столбец определяет тип данных, которые могут быть хранены в нем, и имеет уникальное имя, идентифицирующее его в рамках таблицы. Каждая строка представляет отдельную запись данных и содержит значения для каждого столбца.</p><p>Пример создания таблицы в SQL:</p><p>В приведенном выше примере создается таблица “employees” с пятью столбцами: “id” (целочисленный тип данных), “firstname” и “lastname” (строковые типы данных с максимальной длиной 50 символов), “age” (целочисленный тип данных) и “salary” (число с фиксированной точностью и масштабом). Каждая новая запись, добавленная в эту таблицу, будет содержать значения для каждого из этих столбцов.</p><p>Обычные таблицы в SQL являются основой для хранения и организации данных в реляционных базах данных. К ним можно выполнять различные операции, такие как вставка, обновление, удаление и выборка данных, а также создание индексов и ограничений для обеспечения целостности данных.</p><h3>Секционированные таблицы SQL</h3><p>Секционированные таблицы в SQL позволяют разделить данные таблицы на разделы или разделы, каждый из которых может храниться в отдельной физической секции. Каждый раздел имеет одинаковые столбцы, но разные наборы строк. Это особенно полезно для работы с большими таблицами, такими как таблицы с миллионами записей.</p><p>Основная идея секционированных таблиц заключается в том, что данные физически разделены и хранятся в разных секциях (частях) базы данных или файловых групп. При этом одна таблица может быть разделена на несколько секций, которые могут располагаться в разных файловых группах или даже в разных файлах внутри одной файловой группы.</p><p>Пример создания секционированной таблицы в SQL Server:</p><p>В этом примере создается секционированная таблица с именем MyPartitionedTable. Есть три столбца: Column1 (целочисленный тип), Column2 (строковый тип с максимальной длиной 50 символов) и Column3 (тип даты и времени).</p><p>Сначала мы создаем функцию разбиения с именем MyPartitionFunction, которая разбивает данные по левому способу значениями 100, 200 и 300.</p><p>Затем мы создаем схему разбиения с именем MyPartitionScheme, которая использует функцию разбиения MyPartitionFunction и указывает, что все данные будут храниться в основной файловой группе ([PRIMARY]).</p><p>Затем мы создаем таблицу MyPartitionedTable и указываем, что она будет использовать схему разбиения MyPartitionScheme и разбиваться по столбцу Column1. Это означает, что данные будут автоматически разделены на разделы в соответствии с функцией разбиения и схемой разбиения.</p><p>После создания секционированной таблицы вы можете вставлять, обновлять и выбирать данные, как обычно. Система автоматически распределит данные между разделами в соответствии с определенными параметрами разбиения.</p><h2>Временные таблицы SQL</h2><p>Временные таблицы в SQL предназначены для временного хранения данных и доступны только в течение сеанса сеанса подключения к серверу баз данных. Они могут быть полезны для временного хранения промежуточных результатов, работы с крупными объемами данных или выполнения сложных запросов. Временные таблицы автоматически удаляются по завершении сеанса или при явном удалении пользователем.</p><p>Пример создания временной таблицы в SQL:</p><p>В приведенном выше примере создается временная таблица с именем #TempTable. Она содержит столбцы ID типа INT и Name типа VARCHAR(50). Затем мы вставляем несколько строк в таблицу с помощью оператора INSERT INTO. В конце мы выбираем все строки из временной таблицы с помощью оператора SELECT.</p><p>После завершения работы с временной таблицей, мы можем удалить ее с помощью оператора DROP TABLE.</p><p>Временные таблицы можно разделить на два типа: локальные временные таблицы и глобальные временные таблицы.</p><ol><li>Локальные временные таблицы привязаны к текущему сеансу пользователя и доступны только для этого сеанса. Их имена начинаются с одной решетки (#). Локальные временные таблицы видны только в пределах текущего сеанса подключения.</li><li>Глобальные временные таблицы видны для всех сеансов на сервере баз данных. Их имена начинаются с двух решеток (##). Глобальные временные таблицы полезны в ситуациях, когда необходимо обмениваться данными между разными сеансами пользователей или хранить данные на время, пока выполняется долгая операция.</li></ol><p>Обратите внимание Временные таблицы в каждом сеансе соединения уникальны и недоступны для других сеансов пользователей. Если требуется обмен данными между сеансами, вам может потребоваться использовать глобальные временные таблицы, предварительно проверив документацию своей СУБД для более подробной информации и синтаксиса создания.</p><h3>Системные таблицы в SQL</h3><p>Системные таблицы в SQL представляют собой специальные таблицы, которые содержат метаданные и информацию о самой базе данных, ее объектах и других системных аспектах. Они являются базовыми таблицами, которые фактически хранят метаданные для конкретной базы данных.</p><p>Существуют некоторые системные таблицы, которые уникальны для базы данных master и содержат всеобъемлющую информацию о самом сервере SQL. Некоторые из этих таблиц включают:</p><ol><li>sys.objects: Эта таблица содержит информацию о каждом объекте базы данных, включая таблицы, представления, процедуры и триггеры.</li><li>sys.columns: В этой таблице содержится информация о каждом столбце в базе данных, включая имя столбца, тип данных, ограничения и другие свойства.</li><li>sys.tables: Эта таблица содержит информацию о каждой пользовательской таблице в базе данных, включая имя таблицы, схему, тип индексов и другие детали.</li></ol><p>Пример создания системной таблицы в SQL:</p><h2>Широкие таблицы SQL</h2><p>Широкие таблицы в SQL – это таблицы, которые имеют очень большое количество столбцов или содержат столбцы с большим объемом данных. Широкие таблицы могут быть полезными в ситуациях, когда требуется хранить большое количество данных для каждой записи или когда требуется поддерживать гибкую схему данных с переменным количеством столбцов.</p><p>Создание широкой таблицы в SQL может быть выполнено путем определения большого числа столбцов или столбца с большим объемом данных.</p><p>Пример создания широкой таблицы:</p><h2>Основные операции над таблицами в SQL</h2><p>Основные операции над таблицами в SQL включают создание таблиц, вставку данных, выборку данных, обновление данных и удаление данных.</p><h3>Создание таблицы</h3><p>Операция создания таблицы позволяет определить структуру и схему таблицы, включая названия столбцов и их типы данных. Пример создания таблицы в SQL:</p><h3>Вставка данных</h3><p>Операция вставки данных позволяет добавить новые строки в таблицу. Пример вставки данных в SQL:</p><h3>Выборка данных</h3><p>Операция выборки данных позволяет извлечь определенные строки и столбцы из таблицы с помощью оператора SELECT. Пример выборки данных из таблицы в SQL:</p><h3>Обновление данных</h3><p>Операция обновления данных позволяет изменить значения определенных столбцов в таблице. Пример обновления данных в SQL:</p><h3>Удаление данных</h3><p>Операция удаления данных позволяет удалить определенные строки из таблицы. Пример удаления данных в SQL:</p><h2>Заключение</h2><p>Таблицы являются важной составляющей SQL и предоставляют надежный и эффективный способ организации данных.</p><p>Различные типы таблиц в SQL обеспечивают гибкость и функциональность при выполнении операций с данными.</p><p>Операции над таблицами, такие как выборка, добавление, изменение и удаление данных, позволяют эффективно управлять информацией и взаимодействовать с ней в базе данных.</p>]]></content:encoded>
    </item>
    <item>
      <title>Многоступенчатый фильтр: как очистить огромный массив данных от дубликатов</title>
      <link>https://tproger.ru/articles/mnogostupenchatyj-filtr-kak-ochistit-ogromnyj-massiv-dannyh-ot-dublikatov</link>
      <comments>https://tproger.ru/articles/mnogostupenchatyj-filtr-kak-ochistit-ogromnyj-massiv-dannyh-ot-dublikatov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Anna Zve]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/mnogostupenchatyj-filtr-kak-ochistit-ogromnyj-massiv-dannyh-ot-dublikatov</guid>
      <description><![CDATA[<p>Рассказали, как удалить дубликаты в огромной базе данных, и о том, как обработать большой объем данных невысокого качества.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/mnogostupenchatyj-filtr-kak-ochistit-ogromnyj-massiv-dannyh-ot-dublikatov">Многоступенчатый фильтр: как очистить огромный массив данных от дубликатов</a>»</p>]]></description>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Анализ данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Aug 2023 11:39:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Дедупликация необходима для повышения комфорта и эффективности при использовании данных потребителями, а также при решении задач, связанных с хранением данных, аналитикой. В крупных проектах наиболее эффективен комплексный подход к дедупликации, включающий в себя несколько этапов очистки и сочетающий разные методы.</p><p>Разработчик компании IT_One Анна Зверькова рассказывает о нюансах этой процедуры и способах обработки большого объема данных невысокого уровня качества на примере из финансовой отрасли.</p><h2>Общие сведения</h2><p>Дедупликация – это процесс поиска и удаления дублирующихся записей в наборе данных. При этом дубликаты записей могут как быть абсолютными, то есть полностью идентичными по всем полям, так и неполными, когда несколько различающиеся записи  тем не менее, относятся к одной сущности и должны быть интерпретированы как одна запись.</p><p>Пример абсолютных дубликатов:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/3dc45265-538c-4d4c-834d-9cdac12b7a61.png" alt="" /></figure><p>Пример дубликатов с неидентичными полями:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/ff08444f-94a9-48a3-b7b7-937d9686edb4.png" alt="" /></figure><p>Возникновение дубликатов в базе данных может быть вызвано внешними и внутренними причинами. К внешним относятся, например, загрузка сходных данных из разных источников или регулярное получение новых порций информации из одного и того же источника. К внутренним – повторное добавление в хранилище уже имеющихся в нем данных, обработанных несколько другим способом, а также другие артефакты.</p><p>Обозначим три причины, которые делают дедупликацию насущной необходимостью:</p><ol><li>упрощение использования данных, чтобы конечные потребители при виде трех похожих записей не ломали голову, имеют ли они дело с одной и той же сущностью, или с тремя разными;</li><li>упрощение анализа данных, в том числе при использовании ML, когда большое количество дубликатов может привести к некорректной работе модели, ее «переобучению»;</li><li>повышение эффективности хранения данных, сокращение объема хранимых данных.</li></ol><p>Простейшие случаи для осуществления дедупликации – когда записи попадают в хранилище данных из одного источника, есть уникальные идентификаторы записей и качество внесения данных в базу поддерживается на высоком уровне. В этом случае, для получения дедуплицированных данных можно ограничиться применением простого DISTINCT и дедупликации по уникальным ключам.</p><p>Однако чаще всего вмешивается ряд факторов, осложняющих дедупликацию. Приведем примеры таких ситуаций на данных из сферы кредитования. Записи о кредитах физических и юридических лиц хранятся как в базах данных кредитных организаций (банков, микрофинансовых организаций и др.), так и в базах данных бюро кредитных историй и регуляторов, контролирующих их деятельность.</p><p>Факторы, осложняющие дедупликацию:</p><ol><li>Отсутствие уникальных идентификаторов, ошибки в заполнении уникальных идентификаторов. Например, ИНН человека, который должен быть уникален, на самом деле для регулирующего органа не всегда может быть таким уникальным идентификатором: известны случаи, когда по ошибке одному человеку присвоили несколько ИНН. Ошибки при наборе ИНН оператором, вносящим данные, также зачастую делают это поле непригодным для того, чтобы быть уникальным идентификатором, которого достаточно для того, чтобы отделить одного заемщика от другого.</li><li>Изменение параметров сущности при сохранении ее тождественности. Например, меняя номер паспорт или фамилию при замужестве, заемщик по факту остается тем же самым человеком.</li><li>«Мусорное» заполнение некоторых полей операторами. Например, номер телефона вместо номера паспорта, “test test test” вместо ФИО, “1111111111” вместо номера телефона.</li><li>Незаполненные поля.</li><li>Опечатки, в том числе одни из самых распространенных, когда соседние символы меняются местами.</li><li>Записи в полях перепутаны местами. Например, фамилия в поле «Имя», имя в поле «Фамилия».</li><li>Системы-источники предоставляют данные в разных форматах. Например, номера телефонов с +7 или без префикса.</li><li>Неверно используются регистры в строчных данных – «пЕтров» и «иванов», не тождественны «Петрову» и «Иванову».</li><li>Замена символов – ‘ч’ и ‘4’, ‘е’ и ‘ё’, английское и русское ‘с’.</li><li>Лишние пробелы и спецсимволы.</li></ol><p>Работая с дубликатами данных в кредитной информации, можно использовать от одного до трех шагов, описанных ниже, в зависимости от качества, полноты и объема имеющихся данных. Приведем пример на СУБД Apache Hive, однако описанные методы применимы также для других технологий хранения и типов данных.</p><h2>Первый этап: предочистка, нормализация</h2><p>Этап предочистки позволяет провести первичную оценку записей и отработать наиболее типичные сценарии дедупликации. Так, полностью идентичные строки мы сводим в одну запись с помощью DISTINCT.</p><p>Так же простыми командами мы можем избавиться от разногласий, связанных с различными регистрами написания строковых данных (Иванов и иванов – команда UPPER или LOWER), лишними пробелами в начале или конце строки (TRIM), лишними спецсимволами, по ошибке добавленными операторами в строковые данные.</p><p>На этом же этапе происходит унификация форматов (даты, номера телефонов).</p><p>Для того, чтобы «Аксёнов» и «Аксенов» не воспринимались как два разных человека, зачастую все «Ё» полезно привести к «Е». Вопрос английского и русского «С» менее очевиден: если операторы вводят всю информацию на русском, никогда не переключаясь на английский, приведение английского «с» к русскому может только избыточно занять мощности, не дав никакого результата.</p><h2>Второй этап: работа с ошибками в данных</h2><p>После первичной дедупликации полезно «посмотреть глазами» на переобъединенные группы – такие группы, куда при первичной группировке попало максимальное количество записей. Необходимо определить, корректно ли такое объединение. Зачастую оно оказывается неверным из-за «мусорного» заполнения – объединения данных по значениям, которые операторы вносят, когда у них нет реальных значений.</p><p>Например, в отсутствие паспорта у заемщика оператор вводит «1111 111111» или номер телефона вместо номера паспорта. Пустые или «мусорно» заполненные поля не должны быть использованы для дедупликации, это приведет к переобъединению – то есть отнесению разных записей к одной сущности, тогда как в реальности они являются разными сущностями. Такие записи необходимо будет дедуплицировать по сочетанию других полей.</p><p>Второй необходимый шаг этого этапа – проверка на допустимость значений в тех полях, которые мы собираемся дедуплицировать. Для ряда данных есть способы проверки их корректности, полезно обратиться к бизнес-пользователям для выяснения таких принципов для их последующей формализации в алгоритмах.</p><p>Например, контрольное число можно использовать для проверки корректности, в том числе, банковских счетов, штрих-кодов, банковских карт, СНЛС, ОКПО, ОКАТО, ISBN, ОГРН, VIN. Контрольное число – разновидность контрольной суммы, добавляется обычно в конец длинных номеров с целью первичной проверки их правильности. Это чаще всего либо последняя цифра суммы всех чисел номера, либо результат другой математической операции над цифрами.</p><p>На этом же этапе полезно использовать метрику редакционного расстояния (расстояния Левенштайна) в сочетании с оконными функциями, чтобы избавиться от опечаток в строковых данных. Например, при дедупликации кредитной информации, таким образом можно нивелировать влияние ошибок в ФИО людей.</p><p>Расстояние Левенштайна – это минимальное количество односимвольных операций (вставка, удаление, замена), которые нужно произвести для того, чтобы одну последовательность символов превратить в другую. Формула Левенштайна встроена в ряд диалектов SQL и в зависимости от характера строк может быть заменена на Jaro-Winkler.</p><p>Правда, использование обоих этих приемов сильно ограничивается тем фактом, что они значительно повышают сложность вычислений и, соответственно, снижают их скорость, в особенности на больших объемах данных.</p><h2>Третий этап: таблицы дедупликации и поиск вершин в графах</h2><p>Большое количество дублирующихся записей невозможно отработать только с помощью предочистки и работы с опечатками. В ситуациях, когда невозможно однозначно дедуплицировать строки по одному полю и даже по сочетанию полей, необходимо использовать таблицы дедупликации с последующим поиском вершин в графах.</p><p>Идея таблиц дедупликации состоит в том, чтобы определить дубликаты не один раз по всем имеющимся полям, а несколько раз, каждый раз по разному набору полей во разных сочетаниях, а затем объединить получившиеся данные о дубликатах.</p><p>Например, у нас есть  7 значимых полей, в части из которых допущены ошибки, часть пусты:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/9c503961-7924-4646-9b9e-1b4fa197a5e5.png" alt="" /></figure><p>Очевидно, что запись №3 нельзя пускать в дедупликацию по полям «Отчество» и «ИНН», запись №5 – по полю «СНИЛС».</p><p>Соответственно в приведенном случае дедупликацию можно было бы провести каждому из сочетаний 4-5 полей из имеющихся 7 полей – 35 в разных сочетаниях. Однако имеет смысл с учетом бизнес-логики и опытным путем определить имеющие смысл сочетания и проводить дедупликацию только по ним. Например, в приведенном случае нет смысла дедуплицировать по сочетанию полей: «фамилия», «имя», «отчество», так как высока вероятность наличия полных тезок. В приведенном примере будет достаточно примерно 16 таблиц дедупликации.</p><p>Пример скрипта – таблица дедупликации:</p><p>Основная цель составления таблиц дедупликации – присвоить каждому «сырому id», то есть тому, с которым к нам попала запись, с неким «групповым id». Общий «групповой id» присваивается всем тем записям, которые мы определяем как дубликаты. Причем «групповым id» будет минимальный сырой по группе – то есть такой, с которым данная сущность попала к нам в первый раз.</p><p>Например:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/ed18b8ce-0dd4-426f-a578-02d1db60b721.png" alt="" /></figure><p>При составлении таблиц дедупликации важно проверять «глазами» пере-объединенные и недо-объединенные группы для поиска аномалий. Переобъединенные группы – такие, в которых было объединено больше всего записей. Зачастую именно в них оказываются записи с мусорным заполнением, вроде “test test test” вместо ФИО, “1111111111” вместо номера телефона, которые надо будет исключить из дедупликации по данным полям в дальнейшем.</p><p>Пример использования формулы Левенштайна для нивелирования ошибок в таблицах дедупликации:</p><p>Получившиеся таблицы дедупликации объединяем простым UNION. Мы получили одну большую таблицу, в которой каждому изначальному («сырому») ID в записи соответствует вновь присвоенный некий групповой ID. Фактически таким образом мы получили много ребер графа, которые нужно связать между собой, чтобы отнести комплект дублирующихся записей к одной сущности (в нашем примере – субъекту персональных данных).</p><figure><img src="https://media.tproger.ru/uploads/2023/08/a010801e-a3e5-494f-ba75-84b97baffc44-scaled.jpg" alt="" /></figure><p>Чтобы объединить имеющиеся ребра графа в группы, мы используем инструмент Apache Spark GraphX – Connected Components. GraphX – компонент Apache Spark для манипулирования и анализа структурированных данных в виде графов.</p><p>GraphX предоставляет API для вычисления графов, которое включает в себя традиционные графовые операции и операции над RDD. ConnectedComponents – это алгоритм, используемый для определения связанных компонентов в графе.</p><p>Связная компонента графа – это подмножество графа, в котором каждая пара вершин соединена путем, и которое не связано с остальной частью графа. Загрузив в систему таблицу с ребрами, на выходе мы получаем связанные графы, в которых каждому сырому ID присваивается  минимальный ID, с которым субъект появлялся в системе.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/5d2cf9ac-43dc-47d1-8299-94700ef0948a-scaled.jpg" alt="" /></figure><p>Пример: определение вершин в графах.</p><h2>Заключение</h2><p>Процесс дедупликации следует проводить комплексно, учитывая бизнес-логику и консультируясь с конечными потребителями. При этом недодедупликация всегда лучше, чем передедупликация, даже если при дедупликации записи не удаляются. Всегда проще додедуплицировать записи, чем «откатить» проведенную передедупликацию.</p><p>Важна итеративная очистка, визуальная проверка данных, встраивание метрик и сравнение текущих результатов дедупликации с предыдущими. Например, если раньше мы ежемесячно обрабатывали в среднем полмиллиона записей, а сейчас их количество другое, – вероятно, произошли изменения в источниках данных, в механизме их предоставления или в наших алгоритмах дедупликации.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как читать перфокарты в 2023 году: собираем DIY-привод</title>
      <link>https://tproger.ru/articles/kak-chitat-perfokarty</link>
      <comments>https://tproger.ru/articles/kak-chitat-perfokarty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-chitat-perfokarty</guid>
      <description><![CDATA[<p>Рассказали, что такое перфокарты и как читать их в XXI веке при помощи самодельного привода на фототранзисторах и светодиодах.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-chitat-perfokarty">Как читать перфокарты в 2023 году: собираем DIY-привод</a>»</p>]]></description>
      <category><![CDATA[История IT]]></category>
      <category><![CDATA[DIY]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 09 Aug 2023 13:00:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>За последние 30 лет хранение информации сильно изменилось: все пользуются флешками, многие из нас наверняка застали DVD и CD-диски, а те, кто постарше — ещё и дискеты. Но начиналось всё с перфокарт.</p><p>Впервые перфокарты начали использовать ещё в начале XIX века. В 1804 году в Жаккардовых ткацких станках перфокарты использовали, чтобы управлять составлением узоров на тканях.</p><p>Для ЭВМ перфокарты ввели в 1928 году, и с тех пор они почти не менялись, и использовали их вплоть до 1980-х годов, пока не заменили магнитными лентами.</p><p>Несмотря на то, что перфокарты были доступны в течение 50 лет, сегодня их уже не прочитать, потому что для современных ПК нет подходящих приводов, хотя столь же устаревший Floppy-привод для дискет всё ещё можно найти в интернет-магазинах.</p><p>В этой статье мы расскажем, как собрать собственный ридер для перфокарт. Это — адаптированный перевод оригинального гайда <a href="https://www.instructables.com/DIY-Paper-TapePunch-Card-Maker-and-Reader/">DIY Paper Tape/Punch Card Maker and Reader</a> с сайта Instructables.</p><h2>Что понадобится для сборки привода</h2><ol><li>Плоский кабель.</li><li>Провода.</li><li>Два 1х10 соединителя с пинами, male-разъём.</li><li>Пара деревяшек.</li><li>10 фоторезисторов.</li><li>10 LED-светодиода диаметров по 3 мм.</li><li>Одна большая перфоплата или две платы 4х20.</li><li>Паяльник и припой.</li><li>Стриппер для снятия изоляции с проводов.</li><li>Резистор на 10 Ом.</li><li>Плата Parallax Propeller Activity Board.</li><li>Плоттер или принтер.</li></ol><h2>Начинаем паять ридер для перфокарт</h2><p>Припаяйте фоторезисторы к перфоплате в один ряд. С другой стороны соедините выводы фоторезисторов между собой.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/3b5c2f27-2a58-4e57-afc9-64e3b69229e3-autoconverted.jpeg" alt="" /></figure><figure><img src="https://media.tproger.ru/uploads/2023/08/06e7453f-6f86-4901-96d3-624eefa7bc2e-autoconverted.jpeg" alt="" /></figure><p>Возьмите плоский кабель с 10 линиями, зачистите провода с обоих концов на 3 мм и залудите их. Припаяйте их к 1х10-коннектору.</p><p>Первые 9 проводов должны быть припаяны к перфоплате, а не к фоторезисторам. Выводы не должны касаться их.</p><p>Последний десятый вывод будет питать фоторезисторы. Припаяйте его к другой стороне перфокарты от первых девяти выводов.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/20cbfef2-1573-4d4b-a0cd-e8a4de5fac4d-autoconverted.jpeg" alt="" /></figure><p>Возьмите другой кусок перфокарты и припяйте к ней светодиоды так же, как вы припаяли фоторезисторы. Обратите внимание: полярность каждого светодиода должна совпадать с полярностью следующего.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/30723c0c-af2c-436b-b39c-c3331f9885ad-autoconverted.jpeg" alt="" /></figure><p>Возьмите ленточный кабель и припаяйте один провод к стороне платы с LED, а другой провод — к другой стороне. К концу кабеля прикрепите male-коннектор на 2 пина.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/a672ca80-fd21-48e2-b226-875f682248b7-autoconverted.jpeg" alt="" /></figure><p>Возьмите 1х10-коннектор и припаяйте 9 резисторов сопротивлением 10 кОм по одному к каждому выводу. Другой вывод каждого резистора должен быть соединён к следующему резистору. Последний резистор припаивается к 10 выводу.</p><p>Для светодиодов понадобится резистор не менее 100 Ом, который будет ограничивать ток, чтобы не перегрузить LED.</p><p>Собираем наше устройство воедино:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/e4f81e49-fa42-4456-8e47-f5b3c364997f-autoconverted.jpeg" alt="" /></figure><h2>Готовим деревянный корпус для ридера</h2><p>Подготовьте деревянный корпус для считывателя перфокарт: наметьте отверстия для фоторезисторов и LED. Между двумя половинами устройства должен быть паз высотой в 1.5 миллиметра: он понадобится для того, чтобы вставлять в него будущую перфокарту.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/6b000520-371e-4e3e-b00b-319bd12688d8-autoconverted.jpeg" alt="" /></figure><p>Подсоедините платы с фоторезисторами и LED к корпусу и приклейте их.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/fc2950cf-6543-4af1-a7b2-eab4532cd0d2-autoconverted.jpeg" alt="" /></figure><h2>Программируем чтение перфокарт в Propeller</h2><p>Propeller Tool — это инструмент, который позволяет программировать микроконтроллеры Propeller 1 и 2. В нём мы напишем код, который поможет нашему устройству читать перфокарты.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/c8428603-ed51-49ae-b605-b7b0aaa61327.png" alt="" /></figure><h2>Создаём свою перфокарту</h2><p>В качестве основы для перфокарты нужно взять плотный картон. Отлично подойдёт обложка старой картонной папки.</p><p>Для того, чтобы нанести перфорацию на картон, используйте программу Silhouette Studio. В ней можно либо запрограммировать резку по картону, если у вас есть плоттер. Если у вас простой принтер, то можно разметить перфорацию, а затем вырезать её самому.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/82ed8112-c23a-4186-a7c7-268b67d90e90.png" alt="" /></figure><p>Придётся попотеть с тем, чтобы подобрать размеры перфокарты. Он зависит от того, какие у вас получились габариты паза в ридере перфокарт и как расположены LED и фоторезисторы. Приблизительная ширина перфокарты из гайда — 5 сантиметров.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/3699221e-dde8-491d-a399-96345aec8cfe-autoconverted.jpeg" alt="" /></figure><h2>Читаем перфокарту</h2><p>Подключите плату Parallax Propeller к компьютеру и запустите её. Все светодиоды должны загореться. Если Propeller показывает странные сообщения, убедитесь, что выводы фоторезисторов подключены в правильном направлении.</p><figure><img src="https://media.tproger.ru/uploads/2023/08/296a2aea-9985-44c9-80b1-136e169b5b16-autoconverted.jpeg" alt="" /></figure><p>Проведите первокарту через паз ридера. Наше сообщение гласит:</p><figure><img src="https://media.tproger.ru/uploads/2023/08/565fd0bd-323e-4f44-98c9-ad84584bcecb.png" alt="" /></figure><h2>Заключение</h2><p>Если вам понравился этот гайд, посмотрите другие статьи <a href="https://www.instructables.com/member/Tymkrs/">этого автора</a> — у него много крутых проектов. ? Или прочтите другие материалы по <a href="https://tproger.ru/tag/diy/">DIY</a> на Tproger:</p><ol><li><a href="https://tproger.ru/articles/kak-svarit-svoyo-kraftovoe-pivo-s-arduino/">Как сварить своё крафтовое пиво с Arduino</a></li><li><a href="https://tproger.ru/articles/noutbuk-na-raspberry-pi-v-myshke/">Проект на Raspberry Pi — полноценный ноутбук в компьютерной мышке</a></li><li><a href="https://tproger.ru/articles/smart-home-on-arduino-and-alisa/">Как сделать умный дом своими руками на Arduino и Яндекс.Алиса — пошаговая инструкция</a></li></ol>]]></content:encoded>
    </item>
    <item>
      <title>JavaScript localStorage: Полное руководство</title>
      <link>https://tproger.ru/articles/javascript-localstorage-polnoe-rukovodstvo</link>
      <comments>https://tproger.ru/articles/javascript-localstorage-polnoe-rukovodstvo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/javascript-localstorage-polnoe-rukovodstvo</guid>
      <description><![CDATA[<p>Объяснили localStorage и его методы. Рассказали, как использовать localStorage для сохранения, доступа, удаления и изменения данных.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/javascript-localstorage-polnoe-rukovodstvo">JavaScript localStorage: Полное руководство</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 20 Jun 2023 09:13:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>JavaScript localStorage – это основное хранилище данных, которое находится в объекте Window браузера. Вы можете сохранять любую информацию в localStorage, и она будет сохраняться даже при перезагрузке страницы или закрытии и повторном открытии браузера.</p><p>localStorage и связанное с ним sessionStorage являются частью API веб-хранилища. Мы узнаем о них подробнее ниже.</p><p>API веб-хранилища предоставляет методы, с помощью которых браузеры могут сохранять пары ключ/значение данных (например, объекты).</p><p>Пары ключ/значение, сохраняемые в API веб-хранилища, всегда представлены в виде строк (целочисленные ключи автоматически преобразуются в строки).</p><p>Существует набор методов, предоставляемых API веб-хранилища, которые вы можете использовать для доступа, удаления и изменения пар ключ/значение.</p><p>В API веб-хранилища доступны два типа хранилища:</p><ol><li>sessionStorage,</li><li>localStorage.</li></ol><h2>Что такое LocalStorage</h2><p>LocalStorage – это часть API веб-хранилища. Он позволяет сохранять постоянные данные (данные сохраняются при перезагрузке браузера и даже при закрытии и повторном открытии браузера) в объекте Window браузера в виде пар ключ/значение строк.</p><p>Существует пять методов для работы с LocalStorage:</p><ol><li>setItem – устанавливает значение для указанного ключа,</li><li>getItem – возвращает значение, связанное с указанным ключом,</li><li>removeItem – удаляет пару ключ/значение по указанному ключу,</li><li>clear – удаляет все пары ключ/значение из LocalStorage,</li><li>key – возвращает имя ключа по указанному индексу.</li></ol><h2>Разница между sessionStorage и localStorage</h2><p>И sessionStorage, и localStorage являются частью API веб-хранилища.</p><p>sessionStorage доступно только до закрытия браузера, после чего данные удаляются. sessionStorage доступно при перезагрузке, но данные удаляются при закрытии браузера.</p><p>localStorage сохраняет данные даже после закрытия браузера, они остаются в нем.</p><p>Пользователь может удалить localStorage вручную, а также оно автоматически удаляется, когда пользователь находится в режиме инкогнито или приватном окне и закрывает браузер.</p><p>И sessionStorage, и localStorage предоставляют схожие методы для доступа и сохранения данных в браузере.</p><p>Мы узнаем подробнее о методах LocalStorage ниже.</p><h2>Методы LocalStorage</h2><p>В LocalStorage доступно пять методов. С помощью этих методов вы можете сохранять, получать, удалять и очищать данные.</p><h3>1. setItem(): Сохранение данных в LocalStorage</h3><p>С помощью метода localStorage.setItem() вы можете сохранять пары ключ/значение в локальном хранилище. Вот пример, как можно сохранить данные.</p><p>В данном примере candy name является ключом, а Mars Bar – значением. Обратите внимание, что LocalStorage сохраняет только строки.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/7c2a6226-9b02-45c6-aa6e-58fd39de852e.png" alt="" /></figure><p>Существует несколько способов сохранения данных в LocalStorage с использованием метода setItem. Вы можете осуществлять доступ к данным в виде объекта:</p><p>Это разрешено, но не рекомендуется, так как пользовательский ключ может быть чем угодно, например, toString или length, или любым другим встроенным методом имени в LocalStorage.</p><p>В этом случае методы getItem и setItem будут работать нормально, но метод в виде объекта будет работать некорректно.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/5e0b9e1d-5167-45d4-a20e-4ae23615d44e.png" alt="" /></figure><h3>2. getItem(): Получение данных из LocalStorage</h3><p>С помощью метода getItem() мы можем получить значения ключ/значение, сохраненные в LocalStorage.</p><p>Метод getItem() принимает ключ и возвращает значение в виде строки.</p><p>Этот пример вернет значение “Mars Bar”.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/2d04024e-ef71-420e-ba9f-bea00d8701af.png" alt="" /></figure><p>С помощью нотации в виде объекта также можно получить данные, хотя это не рекомендуется.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/77314515-03a5-4cb9-a5d8-f36b6b6ea7dc.png" alt="" /></figure><h3>3. removeItem(): Удаление элемента из LocalStorage</h3><p>С помощью метода removeItem() вы можете удалить любой элемент из LocalStorage.</p><p>Передайте ключ элемента, который необходимо удалить, в метод removeItem(), и он будет удален из LocalStorage.</p><p>Давайте воспользуемся консолью, чтобы увидеть, как работает метод removeItem. Сначала мы воспользуемся свойством length, чтобы узнать, сколько элементов содержится в локальном хранилище.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/f191e1fa-42bb-485f-815a-4668dc1007b6.png" alt="" /></figure><p>Как видите, при использовании свойства length показывается, что в LocalStorage есть 2 элемента. После удаления одного элемента остается только один элемент в локальном хранилище.</p><h3>4. clear(): Очищает LocalStorage</h3><p>Метод clear() API LocalStorage позволяет очистить всё хранилище и удалить все данные из LocalStorage.</p><p>Давайте воспользуемся консолью, чтобы увидеть, как работает метод clear в LocalStorage.</p><p>Мы будем использовать свойство length, чтобы проверить количество элементов в LocalStorage.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/84d612f2-279e-4627-9a92-2202ce5aaa35.png" alt="" /></figure><h3>5. key(): Возвращает ключ n-го элемента хранилища</h3><p>Метод key() может принимать любое целое число и возвращает ключ, сохраненный в n-м элементе объекта хранилища.</p><p>Давайте воспользуемся консолью, чтобы увидеть, как работает метод key.</p><p>Мы добавили пары ключ/значение в LocalStorage:</p><p>Давайте воспользуемся свойством length для проверки содержимого localStorage.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/9cff398f-ece1-48cb-8ea6-4dd1a96dbe7f.png" alt="" /></figure><p>Как вы знаете, индексация начинается с 0. Посмотрим, что находится по индексу 0.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/1c52cf69-7156-4000-aee8-e8d43dd49d24.png" alt="" /></figure><p>И давайте посмотрим, что находится по индексу 1.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/da277eec-b6d8-4ff0-b6b3-b3a8dc31c5f4.png" alt="" /></figure><h2>Свойство хранилище</h2><h3>length : количество пар ключ/значение, сохраненных в локальном хранилище</h3><p>Свойство length доступно только для чтения и только через интерфейс localStorage. Оно возвращает количество пар ключ/значение, сохраненных в локальном хранилище.</p><p>Мы можем использовать свойство length для проверки, заполнено ли локальное хранилище.</p><p>Давайте использовать свойство length в разных сценариях, чтобы дальше исследовать его возможности. Давайте откроем консоль и посмотрим, как мы можем использовать свойство length.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/4788ff0d-160d-4a16-a0fa-276e1f97b8b1.png" alt="" /></figure><p>Теперь свойство length также можно использовать для проверки, пусто ли локальное хранилище. Давайте очистим локальное хранилище и посмотрим, что произойдет, если мы используем свойство length.</p><figure><img src="https://media.tproger.ru/uploads/2023/06/4cfd7b36-9784-44e7-8bec-3c776d569f6f.png" alt="" /></figure><p>Оно вернет 0. Таким образом, если свойство length возвращает 0, это означает, что локальное хранилище пустое.</p><h2>Событие хранилища</h2><p>Событие хранилища срабатывает каждый раз, когда происходит изменение в объекте хранилища.</p><p>Событие хранилища отправляется в окно, когда область хранения, к которой есть доступ у окна, изменяется в контексте другого документа.</p><p>События хранилища запускаются каждый раз, когда происходит изменение. Вы можете прослушивать событие хранилища и принимать соответствующие решения на вашем веб-сайте или в приложении.</p><h3>Конструктор</h3><p>StorageEvent() возвращает новый объект StorageEvent.</p><p>Давайте воспользуемся консолью, чтобы создать новый экземпляр события хранилища.</p><p>Создание нового экземпляра StorageEvent:</p><p>Он возвращает:</p><figure><img src="https://media.tproger.ru/uploads/2023/06/8e0fa707-12ee-4f50-9aed-eefd79312126.png" alt="" /></figure><h2>Свойства экземпляра</h2><h3>Keys (только для чтения)</h3><p>Возвращает строку, представляющую ключ, который был изменен. Атрибут ключа равен null, когда изменение вызвано методом clear().</p><h3>newValue (только для чтения)</h3><p>Возвращает строку с новым значением измененного ключа. Оно равно null, когда был использован метод clear() или ключ был удален.</p><h3>oldValue (только для чтения)</h3><p>Возвращает строку с исходным значением ключа. Оно равно null, когда новый ключ был добавлен там, где раньше его не было.</p><h3>storageArea (только для чтения)</h3><p>Возвращает объект хранилища, представляющий затронутую область хранилища.</p><h3>url (только для чтения)</h3><p>Возвращает строку с URL-адресом документа, ключ которого был изменен.</p><h2>LocalStorage: Интересные факты</h2><p>localStorage всегда хранится в формате строки UTF-16. Целочисленные ключи преобразуются в строки и сохраняются в localStorage.</p><p>Данные localStorage определены для протокола браузера и веб-сайта. Например, данные будут разными для протоколов HTTP и HTTPS.</p><p>Для документов, загруженных из файла, требования к localstorage не определены и будут разными для разных браузеров.</p><p>Данные localStorage для инкогнито-режима или приватных браузеров будут удалены при закрытии браузера.</p><h2>Ограничения localStorage</h2><p>Вот некоторые ограничения для использования localStorage:</p><ol><li>Ограничение до 5 МБ данных.</li><li>Не храните чувствительные данные в localStorage, так как они могут быть легко получены через использование cross site scripting (межсайтового сценария).</li><li>localStorage работает синхронно, значит, к нему обращаются последовательно.</li></ol><h2>Совместимость localStorage с браузерами</h2><p>LocalStorage совместим с последними версиями браузеров. Только очень старые браузеры, такие как Internet Explorer 6 или 7, не поддерживают localStorage.</p><p>В некоторых ситуациях, например, когда пользователь находится в приватном окне или режиме инкогнито, данные будут немедленно удалены при закрытии окна.</p><p>Пользователь также может отключить localStorage.</p><h2>Исключения</h2><p>securityError — это ошибка безопасности, которая возникает в следующих случаях:</p><ol><li>Ошибка недопустимой схемы/хоста/порта происхождения. Это происходит, когда происхождение использует схемы file: или data:. Многие современные браузеры считают происхождение file: непрозрачным происхождением. Это означает, что файлы, находящиеся в одной папке, считаются разными источниками и могут вызывать ошибку CORS.</li><li>Запрос нарушает решение политики. Например, пользователь отключил использование localStorage в браузере.</li></ol><h2>Заключение</h2><p>В этой статье мы объяснили localStorage и его методы, а также рассказали, как можно использовать localStorage для сохранения, доступа, удаления и изменения данных.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как мы в «Кнопке» подходим к резервированию данных</title>
      <link>https://tproger.ru/articles/kak-my-v-knopke-podhodim-k-rezervirovaniju-dannyh</link>
      <comments>https://tproger.ru/articles/kak-my-v-knopke-podhodim-k-rezervirovaniju-dannyh?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Сергей Стариков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-my-v-knopke-podhodim-k-rezervirovaniju-dannyh</guid>
      <description><![CDATA[<p>Компания ведёт бухгалтерию более 1500 предпринимателей и не может потерять их данные: устройство файлового хранилища, риски и подход к бэкапам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-my-v-knopke-podhodim-k-rezervirovaniju-dannyh">Как мы в «Кнопке» подходим к резервированию данных</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 06 Jun 2021 07:24:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>Привет. Наверное, каждый может рассказать кучу историй про неудачи и катастрофы админов, потерявших данные из-за отсутствующего или неконсистентного бэкапа. «Кнопка» ведёт бухгалтерию больше 1500 предпринимателей, и мы не можем позволить себе потерять их данные. Рассказываем, как мы подходим к резервированию данных.</p><h2>Файловая хранилка</h2><p>Как правило, файловое хранилище — это сетевые папки на сервере с доступом по SMB, в лучшем случае располагающееся на RAID-массиве. Какие основные опасности подстерегают:</p><ul><li>пользователь с правом записи случайно удалил/фатально изменил файл;</li><li>атака робота-шифровальщика;</li><li>сбой или выход из строя железа.</li></ul><p>Это самый простой случай и вариантов резервирования данных здесь масса. Например, скрипты, утилиты (в том числе и бесплатные) бэкапирования папок на другой носитель, снапшоты и так далее. Когда количество таких папок измеряется сотнями, а объём данных — терабайтами, остро встаёт вопрос, как этим управлять, узнавать о неудачных бэкапах и быстро их восстанавливать. Мы в «Кнопке» уже много лет пользуемся Open Source решением Bareos. Это решение для централизованных бэкапов корпоративного класса. Система работает с файлами, хотя есть возможность научить её работать, например, с базами данных.</p><p>Система состоит из:</p><ol><li>Директора — управляющий демон, который запускает задания и следит за их выполнением.</li><li>Демонов хранения (Storage Daemon) — служба, предоставляющая устройства хранения (это может быть лента, папка на диске).</li><li>Файловых демонов — служб на бэкапируемых машинах, которые выполняют команды директора. Они существуют для различных ОС, поэтому решение годится не только для инфраструктуры *nix.</li></ol><p>Хранение и управление развёрнуто на специально выделенном сервере с большим количеством дисков, объединённых в RAID-массив. Наличия инструмента для резервирования недостаточно, не менее важен план резервного копирования. Мы очень дорожим своими данными, поэтому поступаем так:</p><ul><li>первого числа каждого месяца создаём полную копию — её храним 3 месяца;</li><li>еженедельно создаём дифференциальные копии — их храним месяц;</li><li>ежедневно создаём инкрементальные копии — их храним неделю.</li></ul><p>Так мы обеспечиваем набор состояний, позволяющий вернуть утерянные или испорченные файлы в течение любого отрезка времени.</p><h2>Файловые базы 1С</h2><p>Для файловых баз подходит Bareos — он отлично работает с теневыми копиями, поэтому может копировать и заблокированные файлы. Если баз не так уж много, подойдёт инструмент «Обновлятор 1С». Мы резервируем файловые базы 1С так же, как и файловые ресурсы.</p><h2>Базы данных</h2><p>В «Кнопке» мы используем PostgreSQL, поэтому примеры будут для неё, хотя в общем смысле они подходят и для других СУБД.</p><p>В самом начале мы использовали Bareos, но в настройках клиента указывали плагин, который запускал pg_dump для базы. Полученный файл забирался на сервер архивации, ротация обеспечивалась настройкой архива, схожей с настройками для файловых ресурсов. Но базы росли, pg_dump был всё медленнее, а однажды тестовое восстановление показало неконсистентность архива: некоторые таблицы в базе стали слишком большого размера для pg_dump. К этому времени размер баз 1С у нас перевалил за 500 Гб и намекал, что будет расти и дальше.</p><p>А ещё жизнь нам подсказывала, что «помнить» только одно состояние в день недостаточно.</p><p>Мы стали использовать pg_basebackup и архивацию wal. Логи хранили неделю. Этот подход позволял нам восстанавливать состояние на любой момент времени. Однако были и минусы. За возможность восстанавливаться на произвольный момент времени потребовалось огромное количество места на сервере с бэкапами.</p><p>Нашу проблему решила утилита pg_probackup. Она даёт возможность делать дифференциальные и инкрементальные бэкапы, гибко управлять планом бэкапа, проверять консистентности бэкапа без его восстановления.</p><p>Какие копии баз 1С у нас имеются на текущий момент:</p><ul><li>копия на начало года;</li><li>копия на первое число каждого квартала (последние четыре квартала);</li><li>копия на начало каждого месяца;</li><li>полная копия на каждый день за последнюю неделю;</li><li>архив WAL за последнюю неделю.</li></ul><h2>Настройки сетевых устройств</h2><p>Даже в небольшой сети, где есть хотя бы три управляемых коммутатора и маршрутизатор, вопрос внезапного восстановления настроек может оказаться очень болезненным. А если этих устройств десятки или больше? Некоторые вендоры делают функционал архивирования конфигов, но единой системы управления всё равно нет.</p><p>В «Кнопке» мы используем RANCID. Эта утилита работает с различными сетевыми устройствами, собирает с них конфиги по расписанию, её можно подружить с SVN и видеть историю изменений в конфигах.</p><h2>Бэкап судного дня</h2><p>Всё вышеперечисленные меры в большой степени защищают нас от потери данных, однако они бессильны, например, перед полным выходом из строя сервера бэкапов, пожара в ЦОД, блэкаута и атаки внеземной цивилизации.</p><p>Большинство из этих рисков можно решить бэкапом, размещённым в совершенно другой локации и по своим правилам. Для этого подходят хранилища S3. К такому бэкапу странно предъявлять повышенные требования по глубине хранения, он используется для других целей.</p><p>По каждому серверу мы определили критичные данные и критичный период резервирования данных, выбрали место, где будем хранить бэкапы, и написали набор скриптов, которые периодически скидывают архивы в это хранилище.</p><h2>Проверка бэкапов</h2><p>Даже настроив крутые системы резервного копирования, можно столкнуться с невозможностью восстановить данные. По закону подлости это случится в самый неподходящий момент. Чтобы избежать этого, мы проводим различные упражнения и сделали несложных роботов. Бэкапы PostgreSQL проверяем через pg_probackup, регулярно упражняемся в восстановлении критичной инфраструктуры из бэкапа судного дня. Роботы ежедневно разворачивают полную вчерашнюю копию продуктивной среды 1С со всеми базами, апачами в изолированной тестовой среде.</p><h2>О чём важно не забыть при резервировании данных</h2><ul><li>организуйте мониторинг успешности бэкапов;</li><li>периодически проверяйте развёртывание критичных данных;</li><li>следите за схематичной документацией о резервном копировании.</li></ul><p>Такие подходы к резервному копированию мы используем у себя. Безусловно, существуют более функциональные системы, которые дают ещё больше возможностей. Для нас такой баланс сложности и надёжности систем резервного копирования кажется наиболее оптимальным.</p><p>Будет здорово, если эта статья поможет улучшить работу с резервными копиями. А если вы не согласны с нашим выбором, то пишите в комментариях о наших ошибках 🙂</p>]]></content:encoded>
    </item>
    <item>
      <title>Система заметок с нуля. Часть 5: знакомство с объектным хранилищем MinIO и разработка микросервиса на Golang</title>
      <link>https://tproger.ru/video/sistema-zametok-s-nulja-chast-5-znakomstvo-s-obektnym-hranilishhem-minio-i-razrabotka-mikroservisa-na-golang</link>
      <comments>https://tproger.ru/video/sistema-zametok-s-nulja-chast-5-znakomstvo-s-obektnym-hranilishhem-minio-i-razrabotka-mikroservisa-na-golang?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[theartofdevel]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/video/sistema-zametok-s-nulja-chast-5-znakomstvo-s-obektnym-hranilishhem-minio-i-razrabotka-mikroservisa-na-golang</guid>
      <description><![CDATA[<p>Знакомство с объектным хранилищем MinIO, его первый запуск и настройка через docker-compose, а также разработка File Service на Golang.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/video/sistema-zametok-s-nulja-chast-5-znakomstvo-s-obektnym-hranilishhem-minio-i-razrabotka-mikroservisa-na-golang">Система заметок с нуля. Часть 5: знакомство с объектным хранилищем MinIO и разработка микросервиса на Golang</a>»</p>]]></description>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Пост пользователя]]></category>
      <category><![CDATA[Видео]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 30 Apr 2021 11:36:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы продолжаем создание системы заметок. На этот раз посмотрим на разработанный File Service, который работает с хранилищем MinIO. Но сначала разберёмся с самим хранилищем и его настройкой.</p><p>Содержание:</p><p>0:17  Знакомство с MinIO</p><p>3:54  MinIO docker-compose.yml</p><p>5:43 Разработка микросервиса на Golang</p><p>28:08  Текущее состояние системы заметок</p><h2>Знакомство с хранилищем MinIO</h2><p>MinIO создано для размещения неструктурированных данных, таких как фотографии, видеозаписи, файлы журналов, резервные копии, а также образы виртуальных машин и контейнеров. Небольшой размер позволяет включать его в состав стека приложений. В MinIO также поддерживается распределённый режим (Distributed mode), который предоставляет возможность подключения к одному серверу хранения объектов множества дисков, в том числе расположенных на разных машинах.</p><p>MinIO крайне минималистичо, у него нет красивого и функционального UI. Но по части использования ресурсов оно крайне жадное — оперативную память и процессор кушает достаточно много. Также хочу отметить, что такие известные решения, как FreeNAS и TrueNAS под капотом используют именно MinIO.</p><p>В MinIO используется внутренний механизм избыточного кодирования (Erasure coding), обеспечивающий системе достаточную устойчивость, чтобы она оставалась работоспособной даже при отказе половины дисков. Также хранилище управляет целостностью и безопасностью данных, используя собственное хеширование и шифрование на стороне сервера.</p><p>Производительность MinIO сильно зависит от конфигурации операционной системы и файловой системы, на которой будут храниться файлы. По сути, этот инструмент даёт лишь метод хранения объектов поверх файловой системы и никак не влияет на саму файловую систему. Если у вас есть задача хранить и оперировать миллиардами объектов, необходимо подумать в первую очередь о файловой системе, которая будет использоваться под MinIO.</p><h2>Использование MinIO Erasure Coding</h2><p>Erasure Coding — это программная защита данных от повреждения и потери. Как рейд, только намного надёжней. Если классический RAID 6 может позволить себе потерять 2 диска, то MinIO спокойно переживает потерю половины.</p><p>Вся информация хранится в виде блоков данных, к которым есть блоки чётности. И вроде это всё уже было сделано много раз, только есть важное «но»: мы можем явно указывать соотношение блоков чётности к блокам данных для хранимых объектов.</p><p>Хотите 1:1? Пожалуйста! Хотите 5:2? Без проблем! Очень важная функция, если вы используете сразу несколько нод и хотите найти свой собственный баланс между максимальной безопасностью данных и количеством затраченных ресурсов.</p><p>Из коробки MinIO использует формулу N/2 (где N — общее количество дисков), т.е. делит ваши данные между N/2 дисками данных и N/2 дисками чётности. Перевожу на человеческий: можно потерять половину дисков и восстановить данные. Это соотношение задаётся через Storage Class, позволяя вам самостоятельно выбрать, что важнее — надёжность или ёмкость.</p><p>Предположим, что у вас инсталляция на 16 дисков и вам надо сохранить файл размером 100 Мб. Если используются настройки по умолчанию (8 дисков под данные, 8 под блоки чётности), то файл в итоге займёт практически двойной объём т.е. 200 Мб. Если отношение дисков будет 10/6, то понадобится 160 Мб. 14/2 — 114 Мб.</p><h2>Настройка и запуск MinIO</h2><p>Cкачиваем файлы docker-compose.yml и nginx.conf, после чего можно запускать.</p><p>Давайте поближе посмотрим docker-compose файл.</p><p>По дефолту здесь 4 сервиса MinIO. Их количество можно увеличить до 16, но мы уменьшим до 2, чтобы сохранить кластер. Большее количество узлов для нас сейчас избыточно. Также здесь описан сервис NGINX, для которого мы скачивали конфигурацию. Он нужен для балансировки запросов между узлами кластера.</p><p>Описание сервисов MinIO по сути одинаковое. Давайте посмотрим на minio1:</p><ul><li>image с тегом релиза от определенной даты;</li><li>два volume, их можно распределить по разным физическим дискам, чтобы обеспечить отказоустойчивость;</li><li>наружу выставляется 9000 порт для обращения к API;</li><li>указываются переменные среды с логином и паролем доступа к MinIO;</li><li>команда для запуска сервера MinIO в URL  которой используется синтаксис указания множества серверов: [http://minio{1…2}](http://minio{1…2})/data{1…2} раскрывается как массив http://minio1/data1 и http://minio2/data2;</li></ul><p>Далее описан healthcheck, который позволяет мониторить здоровье сервиса. У него есть параметр test. Это Shell-команда, которая вызывает Curl и передает ему URL для проверки того, живёт ли сервис. Делать такую проверку мы будем каждые 30 секунд. Если за 20 секунд сервис не ответит, он будет помечен как нездоровый.</p><p>Запустив compose-файл, открываем интерфейс в браузере. Слева в сайдбаре отображены бакеты — корзины, в которых хранятся файлы, справа — список файлов в бакете. Функционал здесь минимален: можно загрузить, расшарить или удалить файл и создать или удалить бакет.</p><p>На этом знакомство с MinIO завершено, далее — продолжение разработки системы заметок с нуля. В предыдущих частях мы:</p><ul><li><a href="https://tproger.ru/articles/razrabotka-sistemy-zametok-s-nulja-chast-1-proektirovanie-mikroservisnoj-arhitektury/">спроектировали микросервисную архитектуру</a>;</li><li><a href="https://tproger.ru/articles/razrabotka-sistemy-zametok-s-nulja-chast-2-rest-api-dlja-restful-api-service-jwt-swagger/">разработали RESTful API Service на Golang cо Swagger и авторизацией</a>;</li><li><a href="https://tproger.ru/articles/razrabotka-sistemy-zametok-s-nulja-chast-3-znakomstvo-s-neo4j-rabota-nad-mikroservisami-categoryservice-i-apiservice/">познакомились с графовой БД Neo4j и работали над микросервисами CategoryService и APIService</a>;</li><li><a href="https://tproger.ru/articles/sistema-zametok-s-nulja-chast-4-razrabotka-mikroservisov-noteservice-tagservice-i-userservice/">разработали микросервисы NoteService, TagService и UserService</a>.</li></ul><p><a href="https://github.com/theartofdevel/notes_system">Исходный код проекта на GitHub</a></p><p>Какая текущая ситуация? Мы разработали все сервисы. Осталось реализовать веб-клиент в виде приложения на Vue.js, а также заняться инфраструктурой системы, такой как Service Discovering и OpenTracing, упаковать все сервисы в docker-контейнеры и настроить CI/CD.</p>]]></content:encoded>
    </item>
    <item>
      <title>Facebook рассказала о службе распределения данных Akkio</title>
      <link>https://tproger.ru/news/facebook-akkio</link>
      <comments>https://tproger.ru/news/facebook-akkio?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артем Гаврилов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/facebook-akkio</guid>
      <description><![CDATA[<p>Akkio разбивает данные на логические единицы с привязкой к местности и снизила объём трафика между дата-центрами и задержку передачи на 50%.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/facebook-akkio">Facebook рассказала о службе распределения данных Akkio</a>»</p>]]></description>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 09 Oct 2018 14:30:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Facebook рассказала в своём блоге о службе <a href="https://www.usenix.org/system/files/osdi18-annamalai.pdf">Akkio</a>, которая распределяет данные с малым количеством копий. Она необходима чтобы оптимизировать скорость интернет-соединения. Использование Akkio привело к снижению объёмов передаваемого между дата-центрами трафика на 50% и настолько же — задержки при передаче данных.</p><h3>Хранение информации</h3><p>Служба уменьшает дублирование данных, разбивая на логические единицы с привязкой к местности. Затем единицы хранятся на ближайшем сервере и двух соседних от точки их расположения. По словам представителей компании, это позволяет снизить задержку для конечного пользователя. В то же время чем меньше нагрузки на сеть в регионе, тем выше её пропускная способность.</p><p>Однако любое изменение в трафике вызывает осложнения. В случае перегрузки запросами одного дата-центра, трафик перенаправляется в соседний. В то же время представители компании сообщают, что пользователи преимущественно заходят в соцсеть из двух-трёх регионов. Необходимость хранения трафика в 2−3 дата-центрах обусловлена выполнением требований устойчивости к ошибкам. При этом, данные занимают меньше места и требуется меньше соглашений о качестве предоставляемых услуг. Несмотря на некоторые минусы, для Facebook плюсов оказалось гораздо больше.</p><h3>Кэширование</h3><p>По словам специалистов Facebook, распределённое кэширование неэффективно для компании, поскольку:</p><ul><li>низкие показатели считывания-записи ведут к избыточному обмену данными между центрами, поскольку из-за частых записей данные денонсируются;</li><li>данные требуют согласования, что в свою очередь повлечёт увеличение объёма передаваемых данных и рост времени обмена;</li><li>несмотря на высокий показатель степени совпадения кэша, задержка в передаче данных вырастет, если часть находится в другом дата-центре.</li></ul><h3>Архитектура Akkio</h3><figure><img src="https://media.tproger.ru/uploads/2018/10/Akkioarch1.png" alt="" /></figure><p>Метаданные Akkio. Единица данных в Akkio называется микросегмент. Каждый микросегмент — это, к примеру, данные пользователя. При запросе данных служба сопоставляет их физическое расположение с находящимися в микросегменте. Бэкенд-клиент запрашивает у Akkio-клиента расположение данных, а после получения ответа сообщает службе варианты размещения данных в зависимости от региона.</p><p>Хранение расположения данных. Решение о хранении или перемещении данных в один из дата-центров принимается на основе трёх последних запросов. Возникает вопрос о перегруженности сети для каждого из таких запросов. Однако данные для одного пользователя объединены в группы с другими. Поэтому микросегмент с новостной лентой пользователя окажется проводником для определения будущего расположения остальных данных.</p><p>Время хранения данных. Записи о перемещении данных хранятся в течение 10 дней. Akkio работает с полностью согласованными данными и данными, согласованными через некоторое время. Для каждого типа Akkio использует разное программное обеспечение, чтобы избежать считывания устаревшей информации.</p><p>Служба размещения данных (DPS). Служба принимает решение об оптимизации размещения данных после получения информации от Akkio-клиента. В случае необходимости перемещения информации DPS определяет набор политик, после чего проверяет число запросов из дата-центров. По завершении операций необходимо проверить вместительность.</p><p>Учёт вместительности. Происходит расчёт факторов (наличие свободного места, загруженность сети и т.д.), после чего DPS генерирует значение для каждого доступного дата-центра. Если расположение микросегмента неоптимально, служба перемещает его в соответствии с полученным значением.</p><p>Умное мапирование. Размещение в ZippyDB происходит при помощи определённой хэш-функции. Во избежание одновременного перемещения одинаковой информации, она упорядочена и блокируется на уровне метаданных. Служба DPS обращается к данным и в случае их недоступности отменяет любые действия до следующего обращения к микросегменту.</p><p>Помимо вопросов о распределении данных, Facebook продолжает развивать направление виртуальной реальности. В конце сентября 2018 года на пятой ежегодной конференции Oculus Connect по виртуальной реальности в Сан-Хосе компания <a href="https://tproger.ru/news/facebook-vr-oculus-quest/">представила</a> свою новую автономную VR-систему Oculus Quest. Новинка обеспечивает шесть степеней свободы и не нуждается в компьютере или смартфоне.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ученые из Австралии предложили новый способ хранения данных</title>
      <link>https://tproger.ru/news/new-way-storage</link>
      <comments>https://tproger.ru/news/new-way-storage?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Пастухов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/new-way-storage</guid>
      <description><![CDATA[<p>Энергоэффективный оптический метод исследователей из университетов Южной Австралии и Аделаиды использует облучение нанокристаллов маломощным лазером.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/new-way-storage">Ученые из Австралии предложили новый способ хранения данных</a>»</p>]]></description>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 12 Jul 2018 18:28:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>Исследователи из Университета Южной Австралии и Университета Аделаиды в сотрудничестве с Университетом Нового Южного Уэльса продемонстрировали новый, энергоэффективный подход к хранению данных с использованием света.</p><p>Как сообщается в исследовании, суть предложенного метода заключается в облучении маломощным лазером нанокристаллов соли, которые обладают светоизлучающими свойствами. При помощи определенных шаблонов, разработанных на основе флуоресцентных свойств, исследователи получили способность представлять цифровую информацию.</p><h3>Особенности нового способа хранения данных</h3><p>По утверждению доктора Ника Рисена (Nick Riesen) из Университета Южной Австралии, флуоресценция нанокристаллов соли может представлять собой перспективную альтернативу традиционному магнитному жесткому диску, твердотельным носителям информации или Blu-Ray дискам. В частности, в процессе экспериментов была продемонстрирована возможность перезаписываемого оптического хранения данных в нанокристаллах, которые в 100 раз меньше, чем может различить человеческий глаз.<a href="https://media.tproger.ru/uploads/2018/07/180711093109_1_540x360.jpg"></a></p><p>Оригинальность метода состоит также в том, что он является «многоуровневым», то есть позволяет хранить в одном кристалле несколько бит одновременно, в зависимости от способа облучения. Кроме того, в отличие от большинства других методов хранения, данные можно перезаписывать. Технология также позволяет использовать маломощные лазеры, повышая ее энергоэффективность и решая задачу практичности для потребительского применения.</p><p>Низкое энергопотребление делает эту систему идеальной для хранения оптических данных на интегрированных электронных схемах. Она имеет потенциал для продвижения в разработке 3D-хранилищ, когда нанокристаллы могут быть встроены в стекло или полимер.</p><p>Ведущими IT-компаниями проводятся активные изыскания в области увеличения способов хранения больших объемов данных. Так, компания Microsoft <a href="https://tproger.ru/news/microsoft-will-launch-dna-data-storage-by-2020/">разрабатывает</a> систему хранения, которая будет работать на основе ДНК. Ее запуск запланирован на 2020 год.</p>]]></content:encoded>
    </item>
    <item>
      <title>Истёк срок действия всех патентов на MPEG-2</title>
      <link>https://tproger.ru/news/mpeg-2-patents-expired</link>
      <comments>https://tproger.ru/news/mpeg-2-patents-expired?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Светлана Хачатурян]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/mpeg-2-patents-expired</guid>
      <description><![CDATA[<p>Все патенты на стандарт MPEG-2 истекли. Теперь можно свободно использовать технологию в своих изобретениях без дополнительных денежных отчислений владельцам патентного пула.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/mpeg-2-patents-expired">Истёк срок действия всех патентов на MPEG-2</a>»</p>]]></description>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Feb 2018 20:51:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>13 февраля <a href="http://www.mpegla.com/main/programs/M2/Pages/PatentList.aspx">истёк</a> срок действия <a href="https://patents.google.com/patent/US7334248">последнего патента</a>, относящегося к технологии кодирования видео- и аудиосигналов MPEG-2. Это означает, что все желающие теперь могут использовать её в своих разработках, не отчисляя при этом никаких процентов владельцам патентного пула MPEG LA.</p><h3>Популярный инструмент</h3><p>MPEG-2 применяется в эфирном вещании по стандартам ATSC и DVB-T, охватывающим практически весь земной шар. Несмотря на активное развитие и распространение цифрового вещания, за которое отвечает уже стандарт MPEG-4 AVC, его предшественник до сих пор массово применяется в оборудовании для ведения прямых трансляций. Это связано с низкой задержкой кодирования по сравнению с более современными технологиями.</p><p>Напомним, что в мае 2017 года истёк патент на MP3 — один из самых популярных форматов хранения аудиофайлов. Тогда же его создатели <a href="https://tproger.ru/news/mp3-officially-dead/">заявили</a> о прекращении поддержки этого кодека.</p>]]></content:encoded>
    </item>
    <item>
      <title>Отправленная в космос Tesla доставит «послание в будущее» на кварцевом диске</title>
      <link>https://tproger.ru/news/spacex-quartz-discs</link>
      <comments>https://tproger.ru/news/spacex-quartz-discs?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ирина Трофимова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/spacex-quartz-discs</guid>
      <description><![CDATA[<p>SpaceX запустила в космос кварцевый диск, который несет в себе роман, описывающий хронологию мира. Носитель не имеет аналогов по сроку службы в связке с объемом памяти.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/spacex-quartz-discs">Отправленная в космос Tesla доставит «послание в будущее» на кварцевом диске</a>»</p>]]></description>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Космос]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 09 Feb 2018 19:47:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Во вторник, 6 февраля 2018 года, SpaceX отправила в космос не только автомобиль Tesla Roadster. Меньшую огласку получило нахождение на борту Falcon Heavy секретного груза — небольшого оптического диска, названного Arch («Арк»). В теории, такой тип носителя может хранить 360 терабайт информации. Запущенный на орбиту диск содержит трилогию <a href="https://en.wikipedia.org/wiki/Encyclopedia_Galactica">Encyclopedia Galactica</a>, которую написал Айзек Азимов. Носитель не похож на другие оптические диски — информация на него записывалась <a href="https://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B7%D0%B5%D1%80%D1%8B_%D1%81%D0%B2%D0%B5%D1%80%D1%85%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D1%85_%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BE%D0%B2">фемтосекундным лазером</a> по кварцевому стеклу. Данные кодируются в цифровом виде путем получения решеток размером 20 нанометров. Они образуются при прерывании потока плазмы от лазерных импульсов.</p><p>Представители организации утверждают:</p><p>Каждая точка кодирует 8 бит информации в пяти плоскостях. Объем одного диска — примерно 360 терабайт, а срок службы — более 14 миллиардов лет. Ни одно другое устройство не может обеспечить такие показатели.</p><p>Однако вопрос о считывании информации обычными людьми, которые не специализируются на аппаратном обеспечении, поставил создателей в тупик. Как будет распознаваться информация пользователями, не говоря уже и о других цивилизациях?</p><h3>Послание в будущее</h3><p>На <a href="https://medium.com/arch-mission-foundation">сайте</a> Фонда Миссии Arch представлены ожидания от этого проекта. Среди них есть возможность расшифровки дисков и создание считывающего устройства (компьютера). Помимо визуального уровня, происходит кодирование с более высоким разрешением для того, чтобы можно было использовать лазеры и цифровые технологии. Чтобы облегчить процесс доступа к таким данным, создатели прикрепили необходимые инструкции и даже схемы сборки лазеров и компьютеров на верхнем уровне.</p><p>Создание и запуск дисков отдаленно напоминает <a href="https://en.wikipedia.org/wiki/Voyager_1">миссию</a> корабля Voyager в 1977 году, когда в космос были отправлены аудио- и видео-фрагменты жизни людей.</p><p>Нова Спивак, соучредитель Миссии Arch, утверждает, что компания планирует отправлять кварцевые диски и другие виды носителей информации при каждом запуске космических кораблей.</p><p>Мы предпринимаем попытки отправить послания будущим людям. Мы не хотим учить их физике или математике. Наша задача — проектировать объекты специально для добытчиков информации. В развитии такого сценария важно объяснить им, что такое машинное обучение и как с его помощью можно выявить, что находится в данных. Вопрос состоит не в том, смогут ли они получить эти данные. Смогут ли будущие люди понять, что все это значит?</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft создает систему хранения данных на базе нитей ДНК</title>
      <link>https://tproger.ru/news/microsoft-will-launch-dna-data-storage-by-2020</link>
      <comments>https://tproger.ru/news/microsoft-will-launch-dna-data-storage-by-2020?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дарья Вандакурова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-will-launch-dna-data-storage-by-2020</guid>
      <description><![CDATA[<p>Microsoft разрабатывает хранилище на синтетической ДНК; после успешного эксперимента компания закупила ещё 10 миллионов нитей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-will-launch-dna-data-storage-by-2020">Microsoft создает систему хранения данных на базе нитей ДНК</a>»</p>]]></description>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Биотехнологии]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 26 May 2017 17:54:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>Компания Microsoft разрабатывает систему хранения данных, которая будет работать на основе ДНК. Запуск такой системы запланирован на 2020 год.</p><p>Первые серьёзные исследования о применении ДНК в системах хранения данных компания начала прошлой весной. Тогда учёные из Вашингтонского университета совместно с сотрудниками Microsoft опубликовали научную работу, содержащую детали эксперимента, в ходе которого данные, помещённые в структуру ДНК, были восстановлены абсолютно без потери информации.</p><p>После успешного эксперимента было выкуплено 10 миллионов нитей синтетической ДНК, полученной в биотехнологической компании Twist Bioscience. Microsoft хотела использовать полупроводниковый синтетический генетический материал для шифрования цифровой информации, а также для усовершенствования систем хранения и поиска данных. В прошлом месяце представители Microsoft <a href="https://mspoweruser.com/microsoft-to-buy-another-ten-million-strands-of-dna-for-digital-data-storage-research/">заявили</a> о закупке второй партии из 10 миллионов нитей синтетической ДНК.</p><h3>Зачем ДНК, если есть облака?</h3><p>Согласно результатам недавнего исследования, спрос на хранилища информации вырастет на 40% за год. А через 10 лет потребуется в 50 раз больше места для хранения данных. Всё это подразумевает постоянное обновление, исправление и замену устаревающего программного аппарата, необходимого для сохранения данных.</p><p>По словам Карина Стросса, доктора наук и старшего исследователя в компании Microsoft:</p><blockquote>Спрос на усовершенствованные системы хранения данных растёт огромными темпами. Новое решение хранения данных в долгосрочной перспективе станет большим преимуществом для организаций и частных лиц, желающих хранить большие объёмы информации, например, медицинские данные или видеофайлы. Мы думаем, что это решение и будет получено с помощью технологии ДНК.</blockquote><p>Стросс утверждает, что полученные результаты радуют уже сейчас, учитывая, что такая технология пока не особо распространена в технической сфере.</p><h3>В чем преимущества ДНК-хранилищ?</h3><p>Растущая потребность в системах хранения данных является одним из движущих факторов распространения облачных технологий. Но у метода хранения на ДНК есть сразу несколько преимуществ. Во-первых, если код написан правильно, ДНК может хранить информацию в миллионы раз компактнее, чем используемые сейчас технологии. Во-вторых, в дегидрированном состоянии ДНК сможет сохранять информацию на протяжении целых столетий без риска устаревания оборудования, как это происходит с флэш-накопителями и жёсткими дисками.</p><p>Устройство хранения информации на ДНК, которое планирует представить Microsoft в ближайшие годы, будет размером примерно с ксерокс 70-х годов.</p><figure><img src="https://media.tproger.ru/uploads/2017/05/xerox-1970.jpg" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Новый формат изображений HVIF позволяет создавать красивые иконки весом в 500 байт</title>
      <link>https://tproger.ru/news/haiku-but-not-the-ip-encoder</link>
      <comments>https://tproger.ru/news/haiku-but-not-the-ip-encoder?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Пётр Соковых]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/haiku-but-not-the-ip-encoder</guid>
      <description><![CDATA[<p>Haiku Vector Icon Format создан разработчиками открытой HaikuOS как основной формат системных иконок с небольшим размером файлов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/haiku-but-not-the-ip-encoder">Новый формат изображений HVIF позволяет создавать красивые иконки весом в 500 байт</a>»</p>]]></description>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 05 Sep 2016 15:39:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Haiku Vector Icon Format — новый векторный формат изображения для хранения иконок. Это должно удивлять по двум причинам: во-первых, большинство операционных систем полагаются на <a href="https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5">bitmap</a>-изображения и считают это вполне достаточным; во-вторых, существует множество векторных графических форматов, взять хотя бы SVG. Разбираемся, зачем же был создан HVIF, и как вообще обстоят дела с хранением изображений сейчас.</p><p>HVIF был создан разработчиками <a href="https://www.haiku-os.org/">HaikuOS</a>, открытой операционной системы, вдохновлённой <a href="https://ru.wikipedia.org/wiki/BeOS">BeOS</a>. Этот формат используется в качестве основного для системных иконок. Основной целью, которая была поставлена при разработке формата, было сделать файлы иконок как можно меньшими по весу. Векторный формат позволяет отображать иконки в хорошем качетсве,в отличии от bitmap форматов, сохраняя малый вес. Настолько малый, что иконку можно включить в метаданные файла, и таким образом ограничить количество обращений к диску.</p><p>В отличии от других операционных систем, HaikuOS не показывает миниатюры pdf файлов или изображений, вместо этого используются абстрактные иконки. Обычно иконки представляют из себя bitmap, и BeOS перенял этот стандарт не глядя. В нём были иконки двух размеров — 16×16 и 32×32. Посколько bitmap-изображения содержат лишь информацию о том какой пиксель в какой цвет должен быть окрашен, изменение их размера приводит либо к размытостям, либо к сильной шакалпикселизации. Изображения каждого разрешения представляет из себя отдельный файл, и хранится так же отдельно. Вместе они занимают 1280 байтов (1024 — для 32×32 и 256 — для 16×16). С тех пор (с 1990-х) иконки стали больше, в современных операционных системах используются изоображения 64×64 и даже 128х128. Даже если забыть про 128×128, то 64×64 это уже больше 5 килобайт веса. Каждый такой шажок по удвоению размеров иконки увеличивает количество байт для bitmap-изображения в четыре раза, и это ужасно.</p><figure><img src="https://media.tproger.ru/uploads/2016/09/FileSizes.png" alt="" /></figure><p>В отличии от bitmap, векторные форматы хранят не данные о конкретных пикселях, а данные о линиях и градиентах. Очевидным минусом такого подхода становится то, что при увеличении сложности изображения (количества деталей в нём) вес файла возрастает многократно. К счастью, для иконок используются в основном абстрактные изображения. Сильным плюсом же являются почти безграничные возможности для масштабирования изображения — не имеет никакого значения в скольких размерах вы собираетесь отображать иконку — круг всегда останется кругом, а градиент — градиентом.</p><figure><img src="https://media.tproger.ru/uploads/2016/09/BitmapVsVector.png" alt="" /></figure><p>Таким образом, HVIF примерно в десять раз (файлы HVIF имеют средний рамер от 500 до 700 байт, а при желании можно уместиться и в 256) выигрывает по размерам как у bitmap изображения 64×64 (которое, к тому же, не может красиво масштабироваться), так и у самого популярного векторного формата SVG, который проигрывает HVIF из-за использования обычного текста в XML формате, а не бинарных файлов. Обратная сторона медали заключается в том, что структура бинарного файла HVIF накладывает определённые ограничения (256 элементов) на сложность изображения. Предполагается, что для иконок этого более чем достаточно.</p><p>К слову, идея использовать для отображения иконок векторный формат сама по себе не нова — такой подход был осуществлён в <a href="https://ru.wikipedia.org/wiki/IRIX">IRIX</a>, а так же поддерживается в популярных оболчках для Linux — Gnome и KDE.</p><p>Вы можете сказать, что несколько килобайт для современных дисков (или даже для RAM) это очень и очень мало. Это так. Почему же тогда разработчики HVIF так заботятся о размере? Ведь иконок в системе не миллионы (даже не сотни или не десятки тысяч), чтобы несколько килобайтов как-то могли повлять на загруженность диска. Оказывается, дело в скорости. Один цикл ЦП составляет около четверти наносекунды; чтение из оперативной памяти — 60 наносекунд; чтение из относительно быстрого современного SSD — 20 микросекунд (т.е. 20 000 наносекунд); чтение с медленного диска — 10 миллисекунд (10 000 000 наносекунд). Обращения к диску — самые затратные по времени операции для операционной системы. Создатели HaikuOS вместо двух вызовов к диску (к метаданным и к файлу иконки) хотят оставить один — к метаданным, в которых сможет поместиться иконка. Это должно давать ощутимый прирост к скорости отображения, даже при условии того, что векторные форматы отображаются дольше (ведь перед отображениям они, фактически, должны быть конвертированы в bitmap-изображения, подогнанные под конкретный размер).</p><p>Похожую работу <a href="https://code.facebook.com/posts/991252547593574/the-technology-behind-preview-photos/">проводили</a> в Facebook для быстрого отображения миниатюр изображений. Правда, тогда дело свелось не к полноценному новому формату, а к подредактированному размытому JPEG.</p><p>Больше технических подробностей про формат можно узнать в <a href="http://blog.leahhanson.us/post/recursecenter2016/haiku_icons.html">обзорной статье</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Facebook выложил в открытый доступ новый алгоритм сжатия, который производительнее Zlib</title>
      <link>https://tproger.ru/news/facebook-opensources-zstd</link>
      <comments>https://tproger.ru/news/facebook-opensources-zstd?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Пётр Соковых]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/facebook-opensources-zstd</guid>
      <description><![CDATA[<p>Разработчики Ян Коллет и Чип Тёрнер называют Zstd быстрее и продуктивнее zlib; конкурировать ему предстоит с LZFSE от Apple и Brotli от Google.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/facebook-opensources-zstd">Facebook выложил в открытый доступ новый алгоритм сжатия, который производительнее Zlib</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Форматы хранения данных]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 03 Sep 2016 21:09:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Новый алгоритм сжатия Zstandart 1.0 недавно был выложен <a href="https://github.com/facebook/zstd">в открытый доступ</a>. “Это один из немногих алгоритмов, которые одновременно быстрее и продуктивнее, чем zlib, текущий стандарт де-факто,” — <a href="https://code.facebook.com/posts/1658392934479273/smaller-and-faster-data-compression-with-zstandard/">пишут</a> разработчики из Facebook Ян Коллет и Чип Тёрнер.</p><p>При этом Facebook приводит убедительные графики тестов, которые подтверждают эффективность стандарта:</p><figure><img src="https://media.tproger.ru/uploads/2016/09/tests.jpg" alt="" /></figure><p>Zstd придётся бороться с двумя другими открытыми стандартами сжатия — <a href="https://www.infoq.com/news/2016/07/apple-lzfse-lossless-opensource">LZFSE</a> от Apple и <a href="http://google-opensource.blogspot.com/2015/09/introducing-brotli-new-compression.html">Brotli</a> от Google. В LZFSE создатели постарались оптимизировать скорость сжатия и энергопотребления, оставив степень сжатия без изменения, в то время как Brotli борется за повышение эффективности сжатия, чтобы его можно было использовать для веба и APK-файлов для Android.</p><p>Технические подробности можно узнать на <a href="https://github.com/facebook/zstd">странице проекта</a> на GitHub.</p>]]></content:encoded>
    </item>
  </channel>
</rss>