• Какие БД используют крупнейшие торговые сети для хранения заказов?

    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 комментариев
  • Какой компьютер подойдет для домашнего сервера и практики?

    @Drno
    Без понимания бюджета тут сложно помочь. Самый простой вариант - арендовать 2шт VPS по 150-200р...

    А чем не устраивает VirtualBox на домашнем ПК ?
    Ответ написан
    4 комментария
  • Кроссплатформу или натив? Какую кроссплатформу?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Берешь Delphi и создаёшь одно приложение, которое потом и под Винду и под Андроид соберёшь. Пример
    https://github.com/HemulGM/ChatGPT

    вот оно же под Андроид

    64b777bd787e2992400188.jpeg
    64b777ea64796083897920.jpeg
    Ответ написан
    Комментировать
  • Возможно подключить SAS HDD к SATA?

    mistako
    @mistako
    Могу ли я доработать напильником обычные кабели SATA до SAS или все таки здесь нужен контроллер или что то типа того?


    Сам, буквально вчера, кусачками допиливал кабель sas с питанием для подключения к контроллеру. Из позитивного только опыт и мудрость.
    Так что заказывайте и контроллер и подходящий(!) под него кабель.

    P.S. Если все это будет пастись в фирмовом сервере(Dell, IBM, Hp...) обязательно воспользуйтесь подсказкой «звонок дистрибьютору».
    Ответ написан
    1 комментарий
  • Возможно подключить SAS HDD к SATA?

    @AquiHostStrider
    Подключить физически можно, на рынке есть полно разъёмов и переходников «в обе стороны». Но работать оно не будет. Такие переходники предназначены для редких игровых материнок с SAS-контроллером на борту, у которых интерфейс разведён на SATA-разъёмы (что нарушает стандарт).

    Обратный вариант работать 99% будет, SAS-контроллеры поддерживают и SATA-логику, и у SATA-устройств механически совместимый разъём, можно и мешать SAS и SATA в почти любых вариациях. Странные глюки появляются в исключительных вариантах, например при подключении 8 одинаковых приводов BD-RE к Adaptec 3805 он определяет не все устройства.

    На вторичном рынке полно устаревших подержаных SAS-контроллеров с ценой 50$-100$, Slando/Aukro вам в помощь, драйвера для них обычно есть под все актуальные ОС.
    Ответ написан
    Комментировать
  • Как переубедить mc не менять command prompt?

    CityCat4
    @CityCat4 Автор вопроса
    //COPY01 EXEC PGM=IEBGENER
    Судя по тому, что никто не ответил, всем либо как обычно, либо всех устраивает такое поведение. В общем провел я небольшой анализ. Начиная с версии 4.8.16 в mc сильно здорово переделали работу с subshell. А вот починили только для bash - то есть настройки переменной PS1 из .bashrc читаются и prompt ставится, как должен. А вот для tcsh не нашли ничего лучше, как вписать тупую замену prompt на то, что придумали сами и для того, чтобы он не менялся, пока что приходится патчить исходник:
    --- src/subshell/common.c    2017-03-05 00:51:38.000000000 +0700
    +++ src/subshell/common-new.c        2017-03-10 18:57:21.592259025 +0700
    @@ -864,7 +864,6 @@
         case SHELL_TCSH:
             g_snprintf (precmd, buff_size,
                         "set echo_style=both; "
    -                    "set prompt='%%n@%%m:%%~%%# '; "
                         "alias precmd 'echo $cwd:q >>%s; kill -STOP $$'\n", tcsh_fifo);
             break;

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

    ExiveR
    @ExiveR
    Разработчик
    Хотите нормально - тогда роутер типа Mikrotik 951, в котором надо будет настроить резервирование. Роутер будет жонглировать подключениями, а ваш комп всегда подключен к одной точке
    Ответ написан
    1 комментарий
  • Как сделать быстрое переключение между двумя wifi при отвале одного из них?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    То, что вы хотите - сделать нельзя.
    Точнее можно прикрутить какой-то скрипт, который например будет пинговать постоянно что-то и при пропадании пинга переключаться на другой WIFI.
    Но правильное решение - поставить нормальный маршрутизатор с одним WIFI, который будет иметь выход через 2 канала и он будет переключаться между ними в зависимости от условий.
    Ответ написан
    Комментировать
  • Кто отвечает за пересылку IP пакета через TUN адаптер в туннеле точка-точка? (ядро или программист/код)?

    ValdikSS
    @ValdikSS
    TUN предоставляет возможность получения и отправки сетевых пакетов программой через созданный виртуальный интерфейс.
    Всё остальное необходимо делать самостоятельно.
    Ответ написан
    2 комментария
  • Почему регулярка не захватывает строку?

    Alexandroppolus
    @Alexandroppolus
    кодир
    ^(([a-z0-9_-]+\.)*(?!(play|gemini)\.)[a-z0-9_-]+\.)?google\.com$
    Ответ написан
    9 комментариев
  • Как изменить атрибут html элемента через css селектор?

    miraage
    @miraage
    Старый прогер
    HTML аттрибуты нельзя менять через CSS. Только через JS.
    Ответ написан
    Комментировать
  • Поможет ли замена SSD на NVME ускорить работу с браузером Firefox?

    @asmelnik
    1) Читали?
    https://support.mozilla.org/ru/kb/firefox-ispolzue...
    2) разницу между SATA и NVME представляете или нет?
    Если на пальцах, то ключевой момент в NVME не столько скорость, сколько количество одновременных потоков данных.
    SATA разрабатывался в первую очередь для HDD, т.е. механических дисков, и имеет ряд ограничений в связи с этим.
    Например интенсивный обмен мелкими объемами данных от большого количества приложений "убивает" производительность sata довольно быстро, а nvme переваривает в разы, если не на порядки, больше.
    Вот только на обычном пользовательском ПК редко возникают такие нагрузки.

    htop iotop iostat вам в помощь.
    Открываете консоль, общая нагрузка на систему
    htop (CPU, RAM, swap и т.д.)
    iotop и iostat требуют root и покажут вам кем и насколько интенсивно используется ваши жесткие диски.
    Ответ написан
    2 комментария
  • Поможет ли замена SSD на NVME ускорить работу с браузером Firefox?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    да, по идее должно немного ускориться если вы разместите ваш хомяк($HOME) на NVME так как профиль и кэш от firefox хранятся там. (это при стандартном размещении, а насчет всяких флатпаков и им подобных невкурсе). Но если нужно выжать максимум то лучше переместить кэш и профиль в ОЗМ(RAM) где доступ будет самым быстрым.
    По теме можно глянуть статью на archwiki - Firefox/Profile on RAM

    п.с.
    тут вспомнилось что при долгом использовании sqlite баз в firefox они могут малость засираться, по этому поводу есть даже древняя но всё еще актуальная статья на хабре - Ускоряем запуск браузера FireFox
    Ответ написан
    Комментировать
  • Какие существуют платформы купли-продажи рекламных интеграций в youtube?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    https://yoola.com/
    https://mediacube.io/ru-RU/payments

    вообще, по поему, их время прошло, только директ

    были попытки "для инфлюенсеров", но инфлюенсер которого не смотрят - так себе инфлюенсер,а которого смотрят - к нему нянька чтобы без отсебятины, партнерка тут лишняя
    Ответ написан
    Комментировать
  • Обнаружил подозрительный JS код в header.php, в bitrix cms, на что похоже? Анимация?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Судите сами:

    function resize() {
        const el = document.getElementsByClassName('preloader-wrap')[0];
        let scale = 0 < window.innerWidth - window.innerHeight
                    ? window.innerWidth / 2200
                    : window.innerWidth / 800;
        el.style.transform = 'translate(-50%, -50%) scale(' + scale + ')';
    }
    
    function animAdd(selector, className, timeout) {
        const el = document.getElementsByClassName(selector)[0];
        setTimeout(function () {
            el.classList.add(className);
        }, timeout);
    }
    
    function animRem(selector, className, timeout) {
        const el = document.getElementsByClassName(selector)[0];
        setTimeout(function () {
            el.classList.remove(className);
        }, timeout);
    }
    
    function getRandom() {
        return 10 * Math.round((1500 * Math.random() + 500) / 10);
    }
    
    function animBannerAdd() {
        animAdd('preloader-item1', 'active', getRandom());
        animAdd('preloader-item2', 'active', getRandom());
        animAdd('preloader-item3', 'active', getRandom());
        animAdd('preloader-item4', 'active', getRandom());
        animAdd('preloader-item5', 'active', getRandom());
        animAdd('preloader-item6', 'active', getRandom());
        animAdd('preloader-item7', 'active', getRandom());
        animAdd('preloader-item8', 'active', getRandom());
        animAdd('preloader-item9', 'active', getRandom());
        animAdd('preloader-item10', 'active', getRandom());
        animAdd('preloader-item11', 'active', getRandom());
        animAdd('preloader-item12', 'active', getRandom());
        animAdd('preloader-item13', 'active', getRandom());
        animAdd('preloader-item14', 'active', getRandom());
        animAdd('preloader-item15', 'active', getRandom());
        animAdd('preloader-item16', 'active', getRandom());
        animAdd('preloader-item17', 'active', getRandom());
        animAdd('preloader-item18', 'active', getRandom());
        animAdd('preloader-item19', 'active', getRandom());
        animAdd('preloader-item20', 'active', getRandom());
        animAdd('preloader-item21', 'active', getRandom());
        animAdd('preloader-item22', 'active', getRandom());
        animAdd('preloader-item23', 'active', getRandom());
        animAdd('preloader-item24', 'active', getRandom());
        animAdd('preloader-item25', 'active', getRandom());
        animAdd('preloader-item26', 'active', getRandom());
        animAdd('preloader-item27', 'active', getRandom());
        animAdd('preloader-item28', 'active', getRandom());
        animAdd('preloader-item29', 'active', getRandom());
        animAdd('preloader-item30', 'active', getRandom());
        animAdd('preloader-item31', 'active', getRandom());
        animAdd('preloader-item32', 'active', getRandom());
    }
    
    function animBannerRem() {
        animRem('preloader-item1', 'active', 0);
        animRem('preloader-item2', 'active', 0);
        animRem('preloader-item3', 'active', 0);
        animRem('preloader-item4', 'active', 0);
        animRem('preloader-item5', 'active', 0);
        animRem('preloader-item6', 'active', 0);
        animRem('preloader-item7', 'active', 0);
        animRem('preloader-item8', 'active', 0);
        animRem('preloader-item9', 'active', 0);
        animRem('preloader-item10', 'active', 0);
        animRem('preloader-item11', 'active', 0);
        animRem('preloader-item12', 'active', 0);
        animRem('preloader-item13', 'active', 0);
        animRem('preloader-item14', 'active', 0);
        animRem('preloader-item15', 'active', 0);
        animRem('preloader-item16', 'active', 0);
        animRem('preloader-item17', 'active', 0);
        animRem('preloader-item18', 'active', 0);
        animRem('preloader-item19', 'active', 0);
        animRem('preloader-item20', 'active', 0);
        animRem('preloader-item21', 'active', 0);
        animRem('preloader-item22', 'active', 0);
        animRem('preloader-item23', 'active', 0);
        animRem('preloader-item24', 'active', 0);
        animRem('preloader-item25', 'active', 0);
        animRem('preloader-item26', 'active', 0);
        animRem('preloader-item27', 'active', 0);
        animRem('preloader-item28', 'active', 0);
        animRem('preloader-item29', 'active', 0);
        animRem('preloader-item30', 'active', 0);
        animRem('preloader-item31', 'active', 0);
        animRem('preloader-item32', 'active', 0);
    }
    
    document.addEventListener('DOMContentLoaded', function () {
        resize();
    });
    
    window.onresize = function () {
        resize();
    };
    
    console.log(getRandom());
    
    animBannerAdd();
    
    setInterval(function () {
        animBannerRem();
    }, 3000);
    
    setInterval(function () {
        animBannerAdd();
    }, 3000);
    Ответ написан
    2 комментария
  • Меняется ли качество GNSS приёмника в линейках MediaTek Helio A/P/X/G/Dimensity?

    stakhanov_k
    @stakhanov_k
    Теоретический экспериментатор
    В густом лесу мне кажется лучше подойдёт внешний gnss приемник. Если смартфон или планшет может в OTG ... особенно если там , в лесу нету инета
    И да, более новое устройство работает со всеми спутникамт
    Ответ написан
    1 комментарий
  • Как дать перманентный бан за мультиак на сайте?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Мне понравилась следующая система:

    При регистрации пользователь заполняет телефон и его просят позвонить по номеру сервера
    он звонит серверное по определяет номер, если номера совпадают до аккаунт регистрируется.

    Вся прелесть в том что с виртуального номера звонок не сделаешь, а покупать 10 симок такое себе.
    Ответ написан
  • В чем отличие ngnix от golang?

    @deliro
    nginx — это реверс-прокси
    go — это яп.

    в чём вопрос-то?

    то как go может работать на ngnix?

    nginx проксирует запрос в сервер на го, который пишет программист. Цепочка проксей может быть сколько угодно большой. Ты можешь поставить nginx -> nginx -> caddy -> nginx -> gin, никто не запрещает.
    Ответ написан
    3 комментария
  • Одноплатник работает в режиме 24/7. Почему спешат/отстают часы?

    Kyodza
    @Kyodza
    Инженер по лётным испытаниям лёгких самолетов
    Мы сделали бортовой регистратор данных для движущегося объекта. Оказалось, что за минуту набегает ошибка до 0.8 сек. Для анализа динамики движения это очень много, если даже простейшие GPS уже умеют выдавать данные через 0.1 сек.

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

    Решили проблему коррекцией времени через сигнал PPS от приемника GPS. Но тоже не здорово - еще отбираем мощность у процессора на обработку прерываний.

    Сейчас заказал Arduino Uno R4 прямо с сайта Arduino.cc (у меня есть возможность). 25 евро, не дорого. У нее встроенные часы, хороший кварц и частота процессора уже 48 МГц.
    Ответ написан
    8 комментариев
  • Одноплатник работает в режиме 24/7. Почему спешат/отстают часы?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Кварцы не совершенны.
    Рубидиевые часы стоят как маленький самолет.
    Так что используйте NTP
    Другой вариант измерьте суточное отставание и корректируйте скриптом
    Ответ написан
    7 комментариев