• Как ослуществляется выборка данный в модульной или микросервисной архитектуре?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Т.к. мы не можем сделать выборку всех заказов в статусе X, т.к. их очень много, но мы и не можем сделать выборку с лимитом т.к. не знаем точно, что данные заказы будут оплачены платёжной системой Y и наоборот, если будем строить выборку от оплат. В общем получается, что мы решаем вопросы, которые легко решены в БД, но мы их пытаемся решить в коде. Как поступать то?

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

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

    Вот и есть правильная микросвервисная архитектура.
    Ответ написан
    Комментировать
  • Как избавляться от ненужных записей в бд?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если использовать такие БД как DymanoDb, CosmosDb, Cassandra или кеш Redis, то там сразу
    можно создавать записть с отметкой TTL и указывать сколько времени запись будет актуальна.
    Впоследствии эту отметку можно продлить или сделать живщуей вечно.

    По поводу реляционок типа Postgres.

    В хранении ненужных записей я не вижу проблемы до тех пор пока вы в состоянии такие
    токены идентифицировать и почистить отдельно с помощью джоба который запускается
    раз в сутки например и просто удяляет их по признаку например "состояние ожидания
    ввода числа из СМС". Трекайте это состояние и все будет ОК.
    Ответ написан
    Комментировать
  • Как избавляться от ненужных записей в бд?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    У записи в БД есть отметка времени создания. В кроне/планировщике создается задача на запуск скрипта раз в сутки для очистки устаревших записей.
    Ответ написан
    5 комментариев
  • Как избавляться от ненужных записей в бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    В дальнейшем это повысит нагрузку на бд при поиске записей.
    Когда записей будет под миллион, запустите 1 раз удаление старых неактивированных аккаунтов и выиграете еще аж 500 (а может даже 5тыщь!) записей, это сильно поможет...
    Ответ написан
    Комментировать
  • Как можно запаковать bash скрипт в rpm пакет?

    #!/bin/bash
    [ -x /usr/bin/rpmbuild ] || { echo 'rpmbuild not found'; exit 1; }
    
    mkdir -p /tmp/rb
    cd /tmp/rb
    
    echo 'Name: testpackage
    Version: 999
    Release: 111
    Summary: test summary
    License: qwe
    %description
    test package
    %install
    cp $HOME/your_file %buildroot
    %files
    /your_file' > temp.spec
    
    rpmbuild -v --target noarch --define "_topdir $PWD" -ba temp.spec


    после этого в /tmp/rb/RPMS будет собранный rpm
    Ответ написан
    Комментировать
  • Сайт не доступен с территории РФ. Как найти где блокировка?

    @pfg21
    ex-турист
    если отвечает по адресу, но не отвечает по имени, значит косяки в связке имя-адрес.

    добавить
    188.138.x.x site-name.com
    в C:\Windows\System32\drivers\etc\hosts и перезагрузить службу dns,
    добиться правильного ответа для команды
    >nslookup site-name.com
    на клиентской машине.
    Ответ написан
    5 комментариев
  • Можно ли настроить NAT в пределах одной сети?

    @dronmaxman
    VoIP Administrator
    /ip firewall mangle
    add chain=prerouting comment="NAT Loopback detect" dst-address=192.168.0.1 dst-port=3389 protocol=tcp in-interface-list=LAN connection-state=new action=mark-packet new-packet-mark=nat-loopback passthrough=yes
    
    /ip firewall nat
    add chain=srcnat packet-mark=nat-loopback action=masquerade comment="NAT Loopback replace address" 
    
    /ip firewall nat
    add chain=dstnat dst-address=192.168.0.1 protocol=tcp dst-port=3389 action=dst-nat to-addresses=192.168.0.10 to-port=3389
    Ответ написан
    1 комментарий
  • Как поделить api на части с различным функционалом?

    vabka
    @vabka Куратор тега Rust
    Лучше это не через поля, а через методы реализовывать - тогда будет более дёшево, да и женерик лишний можно будет убрать.

    Что-то типа
    struct Api {
      key: String
    }
    struct ApiPart<'a>{
      api: &'a Api
    }
    
    impl Api {
      pub fn part<'a>(&'a self) -> ApiPart<'a> {
        ApiPart {api: self}
      }
    }


    PS:
    Вот так делать точно не нужно:
    Не надо на ровном месте городить указатели и unsafe.
    У тебя из-за unsafe получился dangling pointer.
    fn new(api_key: *const String) -> Self {
            let api_key = unsafe { &*api_key };
            return Self {
                api_key,
            };
        }


    Норм практика делать вот так, в случае строк:
    fn new(api_key: impl Into<String>) -> Self {
            let api_key = api_key.into();
            return Self {
                api_key,
            };
        }


    Боксить строки также не нужно - они и так в куче лежат.
    Ответ написан
    6 комментариев
  • Какая файловая система наиболее устойчива к сбоям?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Современное ПО очень сложное в части гарантий сохранения транзакций например. В БД для того чтобы
    сохранился commit, мы должны гарантировать что за секунду до аварии мы успели сделать FSYNC
    для всех буферных операци I/O.

    И эта проблема никак не решается заменой одной ФС на другую. Вы пишите хоть в ZFS, хоть в RAW,
    но здесь эта гарантия дает сбой. База не смогла сохранить последний коммит. И при recovery будет
    откат транзакций назад. И дальше надо на уровне приложений разбираться где какие платежи не прошли
    и кому вернуть деньги.

    Поэтому сервак БД должен быть хотя-бы застабилизирован на 5-10 минут чтобы успеть корректно сделать
    shutdown. Либо дежурный админ это сделает либо ваш софт - неважно. Тоесть отключение энергии должно
    быть плановым и контролируемым.

    По поводу cannot read superblock - не знаю. Я такого в своей практике никогда не встречал. Надо поисследовать
    вопрос глубже. Предполагаю что это не сама причина а следствие чего-то другого. Например виртуальные машины не нашли свою файловую систему.
    Ответ написан
    2 комментария
  • Не пойму как работает true false в данном куске кода?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Надо добавить скобочек - сразу станет понятно.
    if (b) {
    System.out.println("Данная строка кода выполняется");
    }
    
    b = false;
    if (b) {
    System.out.println("Данная строка кода не выполняется");
    }
    Ответ написан
    1 комментарий
  • Почему производители не указывают тесты RFC2544?

    @mordo445
    Вот первый попавшийся SMB коммутатор Zyxel, в спецификации приведены результаты тестов.
    Вот дешманский SMB от Allied Telesis и в спецификации результаты тестов.
    И даже D-link дает результаты тестов в таблице с характеристиками.
    А вот на домашние роутеры не дают, потому как стыдно такое показывать. Ищите чипсет, на котором собран роутер и читайте на него даташит производителя, так можно получить ориентировочные характеристики при хорошем охлаждении
    Ответ написан
    1 комментарий
  • Почему потоки накапливаются и не уничтожаются?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Смотреть в сторону разницы: Process.GetCurrentProcess().Threads.Count и ThreadPool.ThreadCount
    Скорее всего какой-то сервис создает множество потоков (ручных) и держит ссылки на них, т.к. поток это объект ядра и он должен быть уничтожен когда на него перестают ссылаться, либо это просто поток, который не завершатся (while (true) какой-нибудь)
    Ответ написан
    2 комментария
  • Как реализовать побитовый сдвиг чисел, которые записаны как строки ( длинные числа хранятся в строках)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Сдвиг на 2^64 это я так понимаю что сдвиг влево на 64 бита. Иначе смысла бы не было. Получили бы ноль.

    Сдвиг влево - это умножение на 2 в степени числа сдвигов. Тоесть

    2^32 * 2^64 = 2^96

    (при умножении степеней показатели складываются)
    Ответ написан
    5 комментариев
  • Как осуществить поиск по файлу CSV?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Ты действительно из JavaScript собираешся работать с CSV файлом? Просто обычно js работает с небольшими
    json документами которые прилетает от back-end и не требуют тяжелых поисковых операций.

    Я вижу лишь одно удачное коробочное решение - разбить твой документ на key / value и (ключевая часть
    и все остальное) и загрузить это в localstorage как тут пишут https://developer.mozilla.org/en-US/docs/Web/API/W...
    Ответ написан
  • На каком движке делались ролики к играм PS1?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Большинство игр 90-2000х использовали rendered графику в заставках. И графика эта могла делаться
    на 3DStudio Max, Blender, Maya или на любом пакете который тогда существовал. Движок самой игры обычно
    для какой-то детальной анимации не годился. Посмотрите на заставку к Quake3, StarCraft там от самой игры
    даже моделей нет.
    Ответ написан
    Комментировать
  • Как POJO влияет на производительность приложения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сделай listDataRu, listDataEng синглтоном и ничего не будет нагружать.
    Ответ написан
    3 комментария
  • Какой сайт с задачами rust?

    mayton2019
    @mayton2019
    Bigdata Engineer
    На codewars есть опция выбора языка. Можно взять Rust. И там можно решать задачи разной сложности. И после решения сравнить свой исходник с другими (более успешными обычно).
    Ответ написан
    Комментировать
  • Я написал свой сканер портов на языке Rust при помощи библиотеки std::net. Почему у меня зависает программа если ввести другое значение?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Несколько мыслей. Первое. Скорее всего утилита зависает здесь
    TcpStream::connect(&ip)
    но ты должен это сам проверить и доказать во время подачи вопроса в хабр. Логгированием или профилированием неважно. Короче приходи - чуть более подготовленным чем просто с зависающей программой.

    Второе. Сам по себе TCP протокол не бесплатный. Каждый новый сокет аллоцирует память в виде буфера
    для отработки опций протокола (восстановление стрима с учетом потерянных пакетов) и этот буфер
    где-то регулируется. Поищи. Проверь также скорость работы твоего приложения. Как быстро он отрабатывает
    ответ от молчаливых портов которые ничего не отвечают. Это - тоже протокольная ситуация и ее надо как-то
    обработать. Грубо говоря не доверять дефолтным таймингам.

    Третье. Возможно некоторые промышленные утилиты-сканеры такие как nmap не используют создание
    сокетов
    . Они могут работать на уровне IP протокола просто посылая SYN-пакеты и обрабатывая ответы
    асинхронно. Это такая хитрость которая позволяет создать сокет без буфера. Это не честно с точки
    зрения полноценного протокола но достаточно чтобы проверить что ACK пришел. Вот почитай какие
    возможности у RUST есть в части IP-программирования.
    Ответ написан
    8 комментариев
  • Стоит ли хранить HTML документ в базе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Когда говорят о базе данных, то 99% имеется в виду классическая реляционная БД типа Postgres/MySQL e.t.c.
    Такие базы данных создавались для эффективного соединения кортежей и сортировок. Длина DataRow
    при этом обычно не больашя (до 8К целый блок таких строк). Эта цифра имеет корни еще в 20м веке.
    И если заставить их хранить html (обычно 5-100К) то такая деятельность может быть не очень
    удобная для БД. Это как микроскопом гвозди забивать. Очень умная система будет использоваться как
    файловое хранилище. Возникает идея - просто взять что-то ориентированное на файлы. Например S3,
    BlobStorage, GoogleDrive.
    Это было-бы дешевле с точки зрения стоимости владения и бэкап делать
    проще.

    Я понимаю что мы живем в странное время, когда вместо расчета в калькуляторе - запускают гугл или вместо
    расчета в MathCad спрашивают ChatGpt, но все-таки программист должен быть немного хозяйственник
    и должен брать простые и дешевые решения там где они достаточны.
    Ответ написан
    6 комментариев