• Где лучше хранить файлы?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    при хранении в файловой системе, у вас будет запрос к данным и еще один запрос к файловой системе (в зависимости от характеристик диска, это добавляет к запросу до 8 миллисекунд в случае с жесткими дисками)
    в случае хранения фотографии вместе с запрашиваемыми данными, в самой БД у вас не будет этого лишнего запроса, а данные все равно читаются пакетно большим объемом, так что это только плюс к скорости.
    Ответ написан
    1 комментарий
  • Как поделить базу между микросервисами?

    @SirotaKazansky
    System Analyst
    Не очень понимаю зачем нужно столько сетевых транзакций (записали в одну БД, записали во вторую БД, обменялись данными и записали в свои БД), и зачем слой доступа к данным делать отдельным сервисом, как здесь предлагали - чем это поможет?

    Я думаю стоит руководствоваться бизнесовой логикой при разделении на сервисы. И стоит поразмыслить какую проблему мы устраняем и какую создаём, когда выделяем сервис в отдельный, опять исходя из бизнеса - могут ли эти сервисы жить друг без друга, может у вас одна транзакция проходит через 2 и 3 программы последовательно, и не имеет смысла, если что-то упало - нужно откатывать назад тогда состояния. Подумать что будет если данные между БД рассинхронизируются, важно ли им быть синхронными. Какие объемы данных, какие требования по скорости и т.д. и т.п.

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Итак, учим матчасть:


    Вам не нужно иметь миллион разных доменов и десяток сертфикатов.
    Решение - нормальный балансировщик.

    А в остальном, лучше всего сделать что-то в стиле:

    GET https://f.s.com/path/to/file.ext скачать
    POST  https://f.s.com/path/to/file.ext закачать
    PUT  https://f.s.com/path/to/file.ext заменить
    DELETE  https://f.s.com/path/to/file.ext удалить


    На s.com можно лендинг/приложеньку повесить.

    А в целом, прочитайте про NIH и начните использовать Ceph.
    Ответ написан
    1 комментарий
  • Как правильнее избежать race condition в методах структуры в Go? Есть какие-то практики?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    type GuardedScanner struct{
        s *Scanner
        *sync.Mutex //Поскольку метод всегда пишет заморачиваться с RWMutex смысла не вижу
    }
    func (gs *GuardedScanner) addPath(path string) {
        gs.Lock()
        gs.s.addPath(path)
        gs.Unlock()
    }
    //В первом методе можно обойтись sync/atomic
    ...
    type stats struct{
    ...
        extFreq map[string]*uint64
    ...
    }
    func (gs *GuardedScanner) incrExtCount(ext string) {
      _, found := s.stats.extFreq[ext]
      if found {
        atomic.AddUint64(gs.stats.extFreq[ext], 1)
      } else {
        atomic.StoreUint64(gs.stats.extFreq[ext], 1)
      }
    }
    Ответ написан
    Комментировать
  • Как передать 5 ТБ данных на сервер?

    Aetae
    @Aetae
    Тлен
    1Гбит - это 128Мбайт.
    Скорость записи среднего современного HDD 90 - 150Мбайт.
    Так что даже если у клиента хороший HDD, провайдер вам честно даст весь Гбит(что совсем не факт) и на всём протяжении до клиента этот Гбит сохранится(что тоже требует проверки), а также не будет просадок за время загрузки, то вы получаете ~11 часов 30 минут.
    Что уже сильно чревато, в случае любых непредвиденных обстоятельств.

    Первым делом вам надо увлеличить канал, после - проверить, что он реально выдаёт заявленную скорость и не проседает со временем.
    После этого уже поставить либо RAID(0 или более хитрые варианты) из HDD, либо, если деньги не вопрос - SSD.
    Ответ написан
    1 комментарий
  • Как передать 5 ТБ данных на сервер?

    @d-stream
    Готовые решения - не подаю, но...
    По расчетам при скорости интернета 1 Гбит
    Точнее "до 1 Гбит".
    И в этом "до" кроется подвох. Не говоря уже о том, что при пристальном выяснении окажется что это максимально теоретически возможная скорость между абонентом и точкой коммутации провайдера без учета служебного трафика.
    А дальше 2-5-10 Гбит канал на точку обмена трафиком между провайдерами, который делится на всех абонентов провайдера района-микрорайона-города. Плюс активные шейперы рьяных абонентов, чтобы остальные абоненты не начали обрывать телефоны техподдержки.
    Аналогичная картина на втором конце (откуда отдавать). И чуть получше на транзите между провайдерами, если речь о разных городах...

    Так что большую скорость получить - это все-таки "камаз дискет". Ну или арендовать синхронный канал с гарантированным гигабитом и sla, что может оказаться несколько дороже покупки камаза, дискет и топлива для камаза....
    Ответ написан
    2 комментария
  • Как привязать домен RU-CENTER к heroku?

    @Redeve
    Веб-макаке не хватит и 640гБ
    Сначала привязываете существующий домен к приложению на Heroku - https://dashboard.heroku.com/apps/ваше_приложение/settings.
    В самом низу пункт Domains.
    После добавления Хероку выдаст вам адрес на поддомене отличное от названия вашего приложения - example-abcd-1234.herokudns.com.
    Берёте полученный адрес и следуете этой инструкции
    Вкратце - вам нужно просто добавить днс запись
    Тип - CNAME
    Хост - ваш домен
    Адрес: то что выдал Хероку

    Как и куда именно нажимать - это легко гуглится.

    про днс записи
    Ответ написан
    2 комментария
  • Как сбросить KDE Plasma до настроек по умолчанию?

    Fragster
    @Fragster
    помогло? отметь решением!
    Перенеси из ~/.config файлы kde* и plasma* куда-нибудь и посмотри эффект. Должно получиться.
    Ответ написан
    1 комментарий
  • Оптимальный вес фотографии в интернет-магазине?

    @d-sem
    Чем меньше, тем лучше. Прогнать через оптимизацию как верно заметил Антон и смотреть приемлемость качества. Опять-таки грузить все фотографии сразу не обязательно. Одну основную сразу, остальные фоном.
    Ответ написан
    Комментировать
  • Достоверно известно, что некоторый API периодически отваливается по таймауту или с 5хх ошибкой, как решить?

    @d-sem
    1) Кешировать на стороне приложения, что возможно. Тут все сильно зависит от того какое это API и характер работы с ним. В вопросе это не указано.

    2) При обращении к API учитывать таймаут или 500 ошибку. Повторять до успеха или признания поражения. Если на API много бекендов можно попробовать слать параллельные запросы в стиле промисов.
    Ответ написан
    Комментировать
  • Стоит 1с и sql на одной виртуальной машине, как узнать что тормозит, 1с или сеть?

    Jump
    @Jump
    Системный администратор со стажем.
    Все время и дет война между админом и 1сником
    Вот и причина тормозов. Когда одну систему настраивает два независимых человека это проблема.

    Для точной диагностики нужно знать -
    1)Что значит тормозит? В чем выражается? Как работают пользователи? Сколько пользователей, размер базы, конфигурация железа.
    2)Какая именно SQL - мс или постгри, Каая именно ОС -виндовс или линукс.
    3)Замеры производительности и потребления ресурсов во время работы, возможно логи SQL.
    Ответ написан
    Комментировать
  • Какая лучше практика для создания уникального числа и запись его в таблицу, с проверкой на уникальность в этой же Таблице?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - что у вас называется пином? текст, число, какая длина и в каком формате хранится и для чего используется? Насколько это "секьюрная персональная информация"?

    интеджер от 5 до 7 символов
    В идеале, если это пин, он должен содержать какое-то определенное количество символов. Это удобно по многим причинам.

    1 вариант - настроить таблицу на автоинкремент от какого-то пятизначного числа, сделать шаг автоинкремента отличным от единицы и использовать его в качестве пина. Минусы очевидны - привязка к ид, предсказуемость, пляшущая размерность. Плюсы - гарантированная уникальность.

    2 вариант - генерация "налету", например через микротайм, или ранд, не суть. В таком случае конечно же не нужно делать проверку через do while, достаточно сделать селект со сгенерированным значением, если запрос вернул строку - перегенерировать, если вернул пустой результат - можно добавлять. В любом случае поле нужно сделать уникальным, дабы избежать повторений.
    Ответ написан
    7 комментариев
  • Как применить бинарный поиск к массиву строк на Пайтон??

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Можно. Так же, как в любом другом языке.
    Ответ написан
    2 комментария
  • Стек MEAN ( Можно ли заменить MongoDB на MySQL )?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    нет никакого стека MEAN. Это просто свободно заменяемый набор инструментов, причем монгу вообще нет смысла брать. И родилась эта аббревиатура еще во времена первого ангуляра и вырвиглазной ноды, еще до nest.js и тайпскрипта.
    Все мануалы того периода сейчас уже нельзя воспринимать всерьез.
    Ответ написан
    3 комментария
  • Сервис и компонент конвейера обработчика запросов, то есть компонент middlewire, - это одно и то же?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Сервис это вспомогательный компонент, предназначенный для вспомогательной работы, типа запрос и обработка данных, работа с файловой системой и тд, middleware же непосредственно предназначен для обработки запроса и формирования ответа сервера. Сервисы обычно в контроллерах используются, это как уровень абстракции, обычно сервис реализует какой либо интерфейс, чтобы его можно было бы мокнуть при юнит тестировании. Короче это абсолютно разные вещи.
    Ответ написан
    Комментировать
  • Какая есть хорошая книги про микросервисную архитектуру?

    EvgenyMamonov
    @EvgenyMamonov
    Senior software developer, system architect
    Лучшее, что я читал по микросервисам - "Крис Ричардсон - Микросервисы. Паттерны разработки и рефакторинга", но там немногим больше 500 страниц :)

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

    Правда там примеры на Java, но легко "заходят".

    Ну и сайт автора книги https://microservices.io/ - там почти всё тоже, что и в книге.

    Примеры кода из книги https://github.com/microservices-patterns/ftgo-app...
    Ответ написан
    1 комментарий
  • Что делать с джуниор программистом, который самоучка и не с этой планеты?

    @anton99zel
    29а класс средней школы №7
    Во первых:
    Нужно разделять личные качества и профессиональные!!
    (Какая разница, что он бедный или хулиганил....)
    Второе:
    Если профессиональные качества вас устраивают, то пусть человек работает и не мешайте ему.
    Если не устраивают, то ищите другого специалиста
    Третье:
    Срыв сроков это не только его вина или еще чья то. Часто так бывает, что это общая вина: заказчик меняет ТЗ, менеджмент обещает сроки, лишь бы ухватить заказ, технический директор не вникает в процесс.... В итоге всё вешается на джуна.
    И еще:
    Программист это творческая профессия. Это не оператором работать по 8 часов по некому алгоритму. Тут и думать надо и вникать и прорабатывать отдельные моменты. Нужно создавать условия для комфортной работы, а не наседать и стоять над душой. Но чтобы релакс не затягивался, даже долги нужно планировать.
    Далее необходимо понять, почему возникают задержки:
    Если это плохая планировка времени, то пусть работает как ему удобно (в ночное время или вечернее), если задержки возникают из-за недостатка знаний, значит нужно их подтягивать, включая курсы или помощь наставников.
    И:
    Он склонен всю задачу целиком держать в своей голове и думать над ней один. И чтобы никто не отвлекал. Обсуждать с кем-либо задачу, даже просто общаться в корпоративном чатике среди рабочего дня - все это вроде не дает видимых проблем, но по нему видно, что это его сильно раздражает.

    Меня тоже раздражает отвлекаться каждые 5 минут на сообщения, которые вообще не относятся ко мне. А бесконечные обсуждения могут бесконечно обсуждаться.
    Взялись работать - работайте. Летучка 10 минут каждый день с утра. 60 минут в понедельник. И всё. Ибо нех.
    С ним же никогда не было начальника

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

    Работы было бы меньше, если бы вы, там наверху, между собой всё порешали, а потом уже приходили со своими хотелками, а не переобувались каждый день со своим ТЗ "не знаю что хочу".
    Ответ написан
    Комментировать
  • Как оптимизировать этот php код?

    Stalker_RED
    @Stalker_RED
    Сравнить пересечение массивов можно так: https://www.php.net/manual/ru/function.array-diff.php

    Но возможно еще быстрее будет залить все в базу, во временную таблицу (load data infile) и потом добавить куда нужно используя insert ignore.
    1. создать временную таблицу (без индекса)
    2. load data infile ...
    3. создать индекс по id
    4. insert ignore into ... select (или on duplicate key update?)
    5. удалить временную

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

    boratsagdiev
    @boratsagdiev
    geolib.getDistance
    https://github.com/manuelbieh/Geolib

    Или в конце-концов ответ из первой же ссылки по запросу js calculate distance between two coordinates

    function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
      var R = 6371; // Radius of the earth in km
      var dLat = deg2rad(lat2-lat1);  // deg2rad below
      var dLon = deg2rad(lon2-lon1); 
      var a = 
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2)
        ; 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c; // Distance in km
      return d;
    }
    
    function deg2rad(deg) {
      return deg * (Math.PI/180)
    }
    
    const distanceMOWBKK = getDistanceFromLatLonInKm(
      55.45, 37.36, 13.45, 100.30
    )
    
    console.log(distanceMOWBKK);


    Посмотрите ответ и загуглите расстояние между Москвой и Бангкоком, считает верно.
    Ответ написан
    Комментировать