• Много исходящих запросов на сторонний API за короткое время и преобразование в JSON, справится ли node JS, или взять Go?

    @falconandy
    1. Можете начать с реализации отправки запросов и получения результатов, но результаты запросов просто игнорируйте без всяких преобразований. Сравните Go и Node между собой и с лимитом в 3 секунды. Если вышли за 3 секунды, думайте, как получать результаты быстрее или поднимайте лимит.
    2. Если вам нужна скорость, то нужно ли вам полноценное преобразование тело-запроса -> json -> объект -> БД? Можете ли вы обойтись более короткой цепочкой, например тело-запроса -> нужные поля -> БД?
    3. Для Go можете попробовать https://github.com/mailru/easyjson или аналоги, если структура объектов известна заранее. В этом случае преобразование json -> объект должно быть быстрее, чем со стандартной библиотекой.
    4. Для Go эта задача вполне в его нише - реализация должна быть простой. В общем случае что-то типа N горутин на выполнение запросов, M горутин для конвертации результатов, K горутин для записи в БД. Обычно K=1 и в этой горутине можно писать записи в БД пачками (batches), что быстрее, чем по одной записи.

    Весь день голову ломаю.

    За день уже могли бы реализовать на том, что знаете (nodejs) и если не устроит по результатам, попробовать Go.
    Ответ написан
    1 комментарий
  • Что выбрать для бэкенда с нуля?

    @foterio
    Преимущество NodeJS - это ее асинхронность, и тут это нам сыграет на пользу. Плюс математические вычисления мы вынесем в отдельные worker'ы. Подробнее, как организовать worker pool тут https://github.com/josdejong/workerpool
    При правильно спроектированной архитектуре и настроенном NGINX, NodeJS способна переварить тысячи запросов и чувствовать себя отлично.
    У меня, к примеру в одном из проектов я уперся быстрее в производительность MongoDB на запись 165-220 RPS (на той конфигурации монги, которая была у заказчика), чем в невозможность обработать запрос клиента у NodeJS.
    Я бы начал с тестового backend'а на Fastify, так как мы все равно пишем с нуля и нам важна производительность. Будем честны для Go тут еще маловато нагрузки))))
    Затем пострелял бы в него из пушки, скажем 1000 RPS 10 секунд подряд и посмотрел результаты.
    Далее будет понятно, справляется ли один инстанс с этой задачей или нет, и тогда можно в случае чего масштабировать его и лить трафик на несколько NodeJS приложений через load balancer.
    Ответ написан
    Комментировать
  • Что выбрать для бэкенда с нуля?

    Steel_Balls
    @Steel_Balls
    0KLRiyDQv9C40LTQvtGALiDQmNC00Lgg0L3QsNGF0YPQuQ==
    Здесь не язык надо выбирать, а правильно разрабатывать архитектуру.
    С правильной архитектурой неважно на чём написан бэк - на C#, Go, NodeJs или, простигосподи, на Kotlin.
    И вообще, в бэкенде обычно используется несколько языков. Python, JS, Go и C# одновременно - абсолютно нормально
    Ответ написан
    2 комментария
  • Выбор базы данных для быстрой записи меняющихся данных?

    SagePtr
    @SagePtr
    Еда - это святое
    Если сохранность данных не нужна, то можно прямо в памяти держать нужную информацию
    Ответ написан
    6 комментариев
  • Выбор базы данных для быстрой записи меняющихся данных?

    @KingstonKMS
    Для хранения/обновления/получения актуальных значений используйте redis, для сохранения истории mysql.
    Nodejs по апи забирает исходные данные и обновляет их в redis, из редиса данные берутся во фронтенд и отдельным микросервисом складываются в mysql
    Ответ написан
    3 комментария
  • Выбор базы данных для быстрой записи меняющихся данных?

    @Vitsliputsli
    Это не должно быть проблемой для Mysql, это очень быстрая СУБД. С учётом, что это временные значения, которые не нужно хранить постоянно, то и классическая СУБД не нужна. Поэтому берите Redis. А Clickhouse это аналитическая СУБД, это здесь вообще не причём.
    Ответ написан
    Комментировать
  • Можно ли в sql сделать поле isactive, чтобы активной единовременно могла быть только одна запись?

    BorLaze
    @BorLaze
    Java developer
    А это принципиально - иметь именно флаг?

    Можно сделать по-другому - заводим поле типа DATE, называем его ACTIVATED (например), и при активации записи пишем в него текущую дату. Потом, когда нам нужно найти активную запись, просто ищем запись с самой старшей датой.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Непонятна боязнь автора перед регулярками.
    Как будто любой другой парсер не споткнется о пропущенную точку с запятой.
    При том что регулярки делают код на порядки короче.

    preg_match_all('!A\[\d+\]=\[(.*?)\]!', $s, $matches);
    $data = [];
    foreach ($matches[1] as $row) {
        $data[] = str_getcsv($row, ",", "'");
    }


    ЗЫ.
    Мне не верится, что в питоне все настолько плохо.
    Хотелось бы увидеть решение от человека знающего язык.
    Ответ написан
    6 комментариев
  • Как распарсить массив возвращаемый сервером в виде обычной строки?

    @bbkmzzzz
    без без регулярок и pandas
    Текст структурирован, так что вот:
    stroke = "A[1]=[1765540,14,2799,4790,'Ts','MSC','2019,8,7,21,00,00',-1,3,2,1,2,1,1,1,2,'20','13','','',82,'','',8,0];A[2]=[1706041,83,4134,19230,'3DF','rSC','2019,8,7,21,00,00',-1,3,1,2,0,0,0,0,0,'14','8','','',66,'','',0,0];"
    list_of_arrays = stroke.split(';') #  делим записи по ;
    
    for i in list_of_arrays:
      # если вдруг пустой элемент списка
      if not i: 
        continue
      # делим каждую запись на 2 части, A[1] и все остальное
      head, body = i.split('=')
      
      # вторая часть, удаляем символы [], и сразу делим на элементы по ,
      body = body.replace('[', '').replace(']', '').split(',')
      
      # проходим по всем элементам тела
      for num, val in enumerate(body):
        # удаляем символы '
        body[num] = val.replace("'", '')
        try:
          # пробуем привести к числу
          body[num] = int(body[num])
        except ValueError:
          # значит строка
          pass
      
      # делим A[1] по символу [, берем вторую часть и удаляем там ]
      head_number = head.split('[')[1].replace(']', '')
      
      
      head = head.split('[')[0]
      print(f'head: {head}\nhead_num: {head_number}\nbody:{body}\n')

    есть допущения.
    1. Всегда имеется индекс у заголовка: A[1]
    2. Числа всегда целые. С плавающей точкой приведутся к целому
    Ответ написан
    4 комментария
  • Как распарсить массив возвращаемый сервером в виде обычной строки?

    adugin
    @adugin Куратор тега Python
    import re
    import pandas as pd
    from io import StringIO
    
    srv_data = "A[1]=[1765540,14,2799,4790,'Ts','MSC','2019,8,7,21,00,00',-1,3,2,1,2,1,1,1,2,'20','13','','',82,'','',8,0];"\
               "A[2]=[1706041,83,4134,19230,'3DF','rSC','2019,8,7,21,00,00',-1,3,1,2,0,0,0,0,0,'14','8','','',66,'','',0,0];"
    
    csv_data = '\n'.join(re.findall('=\[(.+?)\];', srv_data))
    
    # Вариант без регулярок:
    # csv_data = '\n'.join(line.split('=')[1].strip('[]') for line in srv_data.split(';') if line)
    
    df = pd.read_csv(StringIO(csv_data), quotechar="'", header=None)

    5d8606aaad01d242226827.png

    Самый лаконичный вариант, но строго не рекомендуется ввиду риска запуска переданного кода:
    import pandas as pd
    
    data = "A[1]=[1765540,14,2799,4790,'Ts','MSC','2019,8,7,21,00,00',-1,3,2,1,2,1,1,1,2,'20','13','','',82,'','',8,0];"\
           "A[2]=[1706041,83,4134,19230,'3DF','rSC','2019,8,7,21,00,00',-1,3,1,2,0,0,0,0,0,'14','8','','',66,'','',0,0];"
    
    A = {}
    exec(data)  # Потенциально опасная операция, т.к. в ответе сервера может быть вредоносный код
    
    pd.DataFrame(A.values())

    5d85ffb1038ac596871535.png

    Если не хотите связываться с Pandas, можно применить namedtuple.
    Ответ написан
    6 комментариев
  • Vps вместо локального сервера для веб разработки на php?

    @m0nym
    как сделать чтобы писать на локальном компе через netbeans а смотреть в браузере с VPS?


    Алексей Скобкин,

    В NetBeans есть синхронизация по SFTP. Настраивается в таком случае так чтобы по сохранению файла он автоматически заливался на сервер.


    SSHFS практичнее
    Ответ написан
    1 комментарий
  • Vps вместо локального сервера для веб разработки на php?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    можно ли на этом VPS поднять веб сервер с GIT чтобы писать веб приложения

    Да.
    Не будет ли это мешать OpenVPN

    Нет.
    как сделать чтобы писать на локальном компе через netbeans а смотреть в браузере с VPS?

    В NetBeans есть синхронизация по SFTP. Настраивается в таком случае так чтобы по сохранению файла он автоматически заливался на сервер.
    С какими камнями придется столкнуться в данном случае.

    С точки зрения поднятия конфигурации - никаких особо подводных камней. А вот с точки зрения пригодности этого для разработки - не очень удобно будет. Лучше локальная виртуалка (проще) или Docker (сложнее).
    Проблемы будут, например, с настройкой XDebug (не невыполнимо, но менее удобно и нужно поднимать прокси.
    И другие мелочи.
    Ответ написан
    8 комментариев
  • Какими инструментами парсить постоянно меняющуюся AJAXом страницу?

    @Sad_Bro
    На темной стороне.
    с каким то интервалом шлются запросы ajax..

    может быть попробовать слать запросы аналогичные самому и парсить ответ, а если там json возвращается то еще проще.
    Ответ написан
    2 комментария