• Postgres минимальная установка где взять?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Но установка Postgres очень большая...

    PostgreSQL занимает около 185 Mb на диске, не требует установки и в стандартной конфигурации ему требуется для работы всего 128 Mb оперативной памяти, а в минимальной вовсе 8 Mb. Это одна из самых малотребовательных к ресурсам СУБД. Если надо ещё меньше и ваш скрипт будет работать в единственном экземпляре, можно посмотреть в сторону файловых СУБД, например SQLite.
    Ответ написан
    4 комментария
  • Когда каскадное обновление это плохо?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Когда каскадное обновление это плохо?

    Каскадное обновление - в большинстве случаев это... глупо.

    Вспомним, что это вообще такое.

    Имеется связь, реализованная внешним ключом. Некое поле (в общем случае - выражение) основной таблицы, уникально индексированное, является значением, на которое ссылается некое поле (или выражение) подчинённой таблицы (возможно, и той же самой).

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

    Что же есть каскадное обновление? Это изменение связанного значения в подчинённой таблице, если изменяется значение основной таблицы. Ну то есть если изменяется (вспоминаем сказанное выше) значение первичного ключа или поля, объявленного уникальным. В основной таблице. Ага...

    Ну то, что изменение/корректировка значения поля первичного ключа есть bad practice (читай - дурь голимая), хорошо известно, обосновано и весьма логично. Нет, реально возможны ситуации, когда такая операция оправдана и имеет смысл - но такая ситуация абсолютно всегда одноразовая, и есть составная часть административного обслуживания. А если подобная надобность возникла на уровне пользователя, в рабочем процессе - то это гарантия наличия серьёзной ошибки в проектировании БД.

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

    Резюмирую. Если каскадное обновление необходимо, оно скорее всего маскирует недостатки и ошибки проектирования. А плохо это или хорошо - прикрывать дырку костылём,- решайте сами.
    Ответ написан
    Комментировать
  • Как соединить 3 роутера в одну локальную сеть?

    @Drno
    РОутеры перевести в режим свитча, отключить на них NAT и DHCP
    Задать роутерам IP из локальной подсети 1го роутера
    приходящий кабель вместо WAN воткнуть в LAN порт (2го и3го ) роутеров
    всё, будет 1 общая сеть
    Ответ написан
    4 комментария
  • Инструмент для создания любого типа файла?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Теми инструментами, которые и предназначены для создания файла необходимого формата.
    Ответ написан
    Комментировать
  • Лучшие практики для русскоязычных аббревиатур в API?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Если предполагается в перспективе использование вне РФ - то лучше использование tin вместо inn, и прочие по возможности таким образом заменять.
    Ну а если сугубо для внутреннего пользователя - то можно использовать русские транслитерированные аббревиатуры.
    Ответ написан
    Комментировать
  • Undefined behavior в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Скомпилирует любой компилятор с++. Может выдать ворнинги, если включена опция реагировать на предупреждения, как на ошибки, то тогда не скомпилирует, но только потому что его конкретно об этом попросили. Это не ошибка компиляции.

    В этом главная проблема Undefined Behavior: компилятор его почти всегда не видит, и программа с ним может даже работать в каких-то случаях так, как программист задумывал. А в других совершенно необъяснимо падает или выдает бред.

    У ОС защита от такой наглости с памятью, конечно, есть. Такая программа рано или поздно упадет с access violation, segmentation fault или еще чем-то подобным, когда цикл дойдет до не вашей памяти.
    Ответ написан
    Комментировать
  • Остаток от деления в Python -1%5?

    По определению деления. Школа 3 класс.
    Когда мы делим - мы отвечаем на вопрос "сколько раз от делимого нужно отнять делитель, чтобы получился 0". Остаток - это то что лишнее остаётся, что уже отнять мы не можем, не уйдя в минус.
    Остаток всегда больше нуля.
    При делении отрицательного числа на целое - мы наоборот прибавляем делитель к делимому, пока мы не получим 0 или положительное число.

    Более формально это выглядит так:

    Для любых целых чисел a и b, причём b != 0, найдётся единственная пара целых чисел q и r, таких что a = q * b + r, где 0 <= r < |b|.

    a - делимое
    b - делитель
    q - частное (целое)
    r - остаток

    Вот и получается
    1 = 0 * 5 + 1
    -1 = -1 * 5 + 4

    UPD: в python это не совсем так. На самом деле в Python действительно релизован mod, как говорит Rsa97, но у этой операции нет чёткого определения, по тому в разных языках оно реализовано по разному:
    https://en.wikipedia.org/wiki/Modulo
    q = floor(a/b)
    r = a - b*q

    В первом случае: q=0, r=1
    Во втором: q=-1,r=4
    (в принципе то же самое)
    Интересное начинается, если делитель отрицательный:
    Если взять a=1, b=-5, то тогда r=-1, q=-4
    А вот при обычном делении с остатком: r=0, q=1
    Ответ написан
    Комментировать
  • Как устроиться в начинающую компанию?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Никак. В таких компаниях нет необходимости в сотрудниках или в MVP.
    Таким компаниям нафиг не нужен сайт (может быть пригодится группа в ФБ/телеграме).
    В таких компаниях нет денег на третьего сотрудника и вообще не выделен и не создан бюджет на айти.
    Зачем туда устраиваться?

    Вдобавок, не путайте начинающую ИТ компанию и стартап - разные вещи.

    В такую компанию нужен не сотрудник, а инвестор.
    Ответ написан
    3 комментария
  • Как получить имя метода из примененного к нему атрибута?

    petermzg
    @petermzg
    Самый лучший программист
    Никак. Атрибуты это мета информация и отдается она только по запросу
    Ответ написан
    Комментировать
  • Как выбрать записи из таблицы с макимальным значением за каждый день в PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    select distinct on (created_at::date) created_at, value from tablename order by created_at::date, value desc;
    Ответ написан
    Комментировать
  • Как массово переименовать файлы в папке с кастомной нумерацией?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В линуксе:
    rename 's/(\d+)(\..*)$/sprintf("%d-%d%s", ($1+1)>>1, ($1-1)%2+1, $2)/e' *

    В виндовсе bat-файлом:
    @echo off
    setlocal enabledelayedexpansion
    for %%f in (*.jpg) do (
      set name=%%~nf
      set ext=%%~xf
      set /a n1="(%name+1)/2"
      set /a n2="((%name-1)&1)+1"
      rename %%f !n1!-!n2!!ext!
    )
    endlocal
    Ответ написан
    1 комментарий
  • 10к строк по базе размером 500кк?

    @galaxy
    SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    проще всего так, наверно:

    CREATE EXTENSION pg_trgm;
    
    CREATE INDEX trgm_domain_base_idx ON base USING GIST (domain gist_trgm_ops);
    
    EXPLAIN ANALYZE SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    https://www.postgresql.org/docs/current/pgtrgm.html
    Ответ написан
    Комментировать
  • Что лучше, множество запросов на вставку в одной транзакции или один запрос на вставку всех значений?

    @rPman
    Эти два метода вставки не идентичны, в ситуациях с ошибками вставки данных (например ошибка уникальности индекса или любой другой constrainit) до окончания транзакции, в первом случае никакие данные не будут записаны, а во втором, будут записаны данные до возникновения ошибки. Понятно что если все завернуть в единую транзакцию и при возникновении ошибки эту транзакцию отменять, то тогда содержимое базы будет идентично. Но когда речь идет об нестандартных способах обработки ошибок, второй вариант может оказаться удобнее, ведь можно пожелать продолжить вставку данных, с пропуском ошибочных... когда как первый вариант такого не позволит (сообщение об ошибке может даже не сообщить идентификатор, с которым произошла проблема, а если и будет такая информация, то только по одной записи)

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

    Иначе, лучше второй вариант.
    Ответ написан
    Комментировать
  • Кто-нибудь знает что за неизвестная железка подключена посторонними к роутеру?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    https://www.raspberrypi.com/products/raspberry-pi-5/
    Стявят VPN прокси сервер (выходную TOR-ноду)
    Чтобы потом "товарищи" приходили к Вам, а не к ним или их клиентам
    Ответ написан
    1 комментарий
  • Стоит ли делать отдельный микросервис для Баз данных?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Кто то счетает это хорошей идеей, как возможность связать все сервисы

    Тем временем центральная идея микросервисов в том, чтобы связанность максимально снизить.
    Ответ написан
    Комментировать
  • Какие книги прочитать чтобы написать свою операционную систему?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что это блажь. Операционные системы в наше время люди не пишут.
    Ее написать невозможно по причине бесконечных технических требований которые
    мы (читатели хабра) применяем к этому термину. И если вы по каким-то причинам
    будете сокращать или вычеркивать эти требования - то на выходе будет не ОС
    а некий программный продукт который содержит подмножество функций ОС.

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

    Написание своей уникальной ОС - это дорога длиной в жизнь.

    Если писать не свою ОС а клонировать имеющиеся проекты то надо тоже на этом акцентировать
    внимание.
    Ответ написан
    7 комментариев
  • Как правильно реализовать большое приложение на c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Организовать большую команду, состоящую из множества более маленьких команд, которые специализируются на своей части. Сам проект разбивается на множество более мелких проектов, а эти проекты на еще более мелкие модули. Для каждой задачи или группы проектов - своя команда. Разработка приложений такого объема занимают сотни тысяч и миллионы человеко-часов. Примерно так:
    1. Составляется краткое ТЗ
    2. Максимально подробно описывается проект в виде более детального ТЗ
    3. Нанимаете опытного IT менеджера
    4. Менеджер собирает команду для разработки частного ТЗ полностью со всеми деталями проекта
    5. На основе ЧТЗ формируются требования к командам для реализации проекта
    6. Подготавливается план разработки проекта
    7. Нанимается команда или команды сопровождения и поддержки - системные администраторы, менеджеры, аналитики, консультанты, бухгалтеры, юристы и прочие
    8. Организовывается рабочее пространство для команд разработки
    9. Нанимаются и организовываются команды разработки в соответствии с планом
    10. Ну и далее начинается основная работа - поэтапная реализация проекта
    Ответ написан
    Комментировать
  • Какие БД используют крупнейшие торговые сети для хранения заказов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я полагаю, что такие магазины сохраняют всё, например в postgres или greenplum, а затем передают в аналитические базы (или пишут параллельно), типа в кликхаус или oracle?


    XX век прошел под флагом реляционных СУБД. Вокруг них строились все системы.
    Для любой банковской системы БД - абсолютная царица дизайна. Именно от нее шло
    техническое задание. От базы а не от Хибернейта и синтетических таблиц как щас.
    Таблицы любили. Вокруг них строили красивые теории. Модели. EAV. Подгоняли
    аппарат алгебры (Эдгар Кодд со своими формочками).

    В появлением NoSQL и стриминговых систем - пришлось всем признать что реляционка
    исчерпала возможность линейного роста. У Майкла Стоунбрейкера есть статья где
    он меряет БД под нагрузкой и доказывает что треть ресурсов CPU просто сгорает
    в блокировках и защелках и прочих механизмах синхронизации.

    Какой софт использует розничная торговля - сложно сказать. Там будет десяток систем которые
    работают просто всместе как Grid. Например сообщения от кассовых аппаратов и платежных
    систем могут в первую очередь падать в JMS/MQ систему. А уже потом процесситься и ложиться в
    БД операционного дня. И по проишествии периода - сливаться Warehouse и в BigData
    Есть еще вариант что в аналитику сразу попадают данные со стриминга. Я такое видел.
    И это не последняя часть стека. Аналитика в свою очередь является источником для всяких
    BI, витрин данных. ОЛАП-кубиков и прочее что любят смотреть и показывать на презентациях.
    С красивой инфографикой.

    Что использует Магнит - чорт его знает. Это можно поискать по всяким конференциям. Но само
    знание или название продуктов вам ни о чем не скажет. Если они используют допустим
    Kafka+Clickhouse - из этого не следует что вам это пригодится.

    Были странные архитектурные решения. Uber например пытался выжать максимальные мощности
    из Postgres и не смог. Перешел на MySQL. Видимо им было достаточно MyISAM и брали лишь
    только те фичи что надо.

    Facebook строил Rocksdb (Key-Value) с очень сильной оптимизацией по диску. Там уже было
    не R+Tree а другой тип дерева. Тоже видимо у конторы так "пригорело" что им надо было
    штучную NoSQL делать.

    СБЕР по слухам строил на Apache Ignite прослойку между Ораклом и клиентами потому что Оракл
    не справлялся с нагрузками. Впрочем я не могу это нигде доказать. Просто слышал в разговорах
    архитекторов. И это очень штучное и очень деликатоное решение. Другим оно может вообще не подойдет.
    Нужно много думать о механике инвалидации кешей.

    Хедж фонд BridgeWater строит свои хранилища ассетов на базе Amazon S3. Реально эти ребята пихают
    в С3 все что можно. И в этом есть своя стратегия. S3 стоит дешево. И масштабируется. Дешевле чем DBMS.

    Также, я думаю, что множество магазинов могут быть обслуживаться отдельными кластерами, чтобы работа всей сети не остановилась, если какая та БД выйдет из строя?

    Эту задачу тоже можно решать на разных уровнях. Мне нравится решение от Cassandra. Там все
    таблицы имеют 1-2 реплики. И убить всю систему в целом в принципе невозможно пока последний
    датацентр стоит. Но Кассандра платит за это отказом от consistency и вообще она считается не-реляционкой.
    Хотя базовый диалект SQL поддерживает. Фактически она - умный NoSQL c хорошим сетевым протоколом
    обхода сбоев и конфликтов. Кажется Netflix ее активно использует.

    Вобщем можно дизайнить системы по разному усиливая одни части и ослабляя другие.
    Это как тот треугольник дешево-медленно-дорого но в углах стоят разные качества. Например
    CAP-свойства систем. Или приоритеты. Тебе что важно. Быстро записать в БД платеж? Но при этом
    чтение оперативных данных потребует лагов. Или наоборот писать медленно зато чтоб все по ящичкам
    и по коробочкам лежало да и еще в разных копиях и вариациях.
    Ответ написан
    10 комментариев
  • Что такое сборка?

    Ну сборка - это то что в dll-файле, да.

    Где ты прочитал о статических и динамических я не знаю, по тому загуглил сам.

    Статическая сборка - это такая, сборка, которая сохранена как dll-файл.
    Динамическая - которая создана при помощи System.Reflection.Emit и существует только в рантайме.
    Ответ написан
    Комментировать
  • Что такое сборка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Чтоб не было путаницы и тавтологий. Сборкой также можно называть процесс билда (build).
    Но скорее всего автор спрашивает что такое ассебли (assembly).

    Очень подробное описание с примерами уже есть на сайте learn.microsoft и нам имеет смысл
    просто прочитать и перевести.

    https://learn.microsoft.com/en-us/dotnet/standard/...
    Ответ написан
    1 комментарий