Задать вопрос
  • Как подключить Crypt RSA?

    DevMan
    @DevMan
    Ответ написан
    Комментировать
  • Как запросить другую сущность в repositoty?

    Decadal
    @Decadal
    $qb = $this->createQueryBuilder('room')
                ->join('room.doors', 'd')  
            return $qb->getQuery()->getResult();


    в чем собственно проблема?
    В сущности Room должна быть описана связь с сущностью Door.
    Поле должно называться doors
    тип связи - один ко многим
    тип самого поля - Collection

    вот вам пример:
    /**
         * @var \Doctrine\Common\Collections\Collection
         * @ORM\OneToMany(targetEntity="Applications\Entity\Offer", mappedBy="application", cascade={"persist"})
         */
        private $offers;


    Это поле у сущности Application (заявка).
    обращаемся: $application->getOffers();
    у сущности Applications\Entity\Offer есть поле application:

    /**
         * @ORM\ManyToOne(targetEntity="Applications\Entity\Application", inversedBy="offers")
         * @ORM\JoinColumn(name="application_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
         */
        private $application;


    обращаемся: $offer->getApplication();
    Ответ написан
    Комментировать
  • Как выбрать архитектуру и БД для высоконагруженной системы?

    @stratosmi
    Добрый день! Хотел посоветоваться с опытными бэкэнд программистами.
    Встала задача создать высоконагруженный проект (Типо кассового решения). В базе данных через 1-2 года планируется , около 150млн записей у основной сущности (продажа).


    150 миллионов записей - это ерунда, а не высоконагруженное решение.
    У меня 5 000 записей в секунду создается на довольно дохлом (что-то около 500 рублей в месяц стоит хостинг) сервере VDS/VPS
    Два года? 150 миллионов - это за ... 9 часов.
    И да, я не считаю это решение высоконагруженным.
    Нагруженным - да.

    то есть нужно максимально быстрое чтение этих данных

    Нет.
    Людям не нужно снимать отчеты со всех данных сразу. Только часть данных интересует их.

    Если всё же нужны все данные сразу (ну какая-то общая статистика) - то на основании первичных данных выполняется агрегация (например, по ночам) и тогда отчеты будут строится вообще - мгновенно.

    Но большим плюсом является что эти 150млн записей - разделены примерно на 1000-5000 разных пользователей, и выборка нужна в рамках одного пользователя только.

    Вот только если ваши 1000-5000 пользователей будут постоянно получать данные - только тогда это и можно назвать нагруженным решением.
    Как лучше хранить такие данные? в одной таблице? или можно разделить по разным таблицам, и держать связку какой пользователь в какой базе хранит.

    Это зависит от того что за данные.
    Что именно за данные.
    Сам пишу на mysql - потянет ли он такие объемы, на нормальном железе. Или нужно смотреть в сторону других БД?

    MySQL довольно быстр.
    Например, PostgreSQL более функционален. Но насчет скорости - не обязательно.
    потянет ли он такие объемы, на нормальном железе

    А в официальную документацию заглянуть?
    https://dev.mysql.com/doc/refman/8.0/en/limits.html
    150 млн. записей для современных СУБД и современных компьютеров (даже не на "нормальном железе") - это тьфу, а не нагрузка.

    P.S.:
    Для высоконагруженных систем формирования отчетов есть различные решения:

    1. Предварительная (ночная) агрегация данных
    2. Master-slave, где master только обновляет данные, а slave - только для отчетов.
    3. Специализированные, заточенные под конкретный вид данных СУБД (InfluxDB, Redis-Tarantool-Aerospike, ClickHouse пр.)
    Ответ написан
    4 комментария
  • Что сегодня подразумевается под веб-компонентами?

    @MadridianFox
    Web-программист, многостаночник
    Веб-компоненты - обобщающее название нескольких технологий, позволяющих создавать собственные элементы с инкапсулированными структурой, стилями и поведением.
    Т.е. вы создаёте один-два файла в какой-нибудь папочке, описываете в них разметку, стили и js-код и вызовом некоторых api-функций говорите браузеру - "вот мой собственный элемент с именем my-element, если встретишь тэг , то наполни его вот этим, стилизуй вот так и по событиям выполняй этот код".
    Технологии, которые это позволяют постепенно появляются в браузерах, но как обычно не полностью и не везде. Нужны полифилы.

    И да, веб-компонент мужского рода)
    Ответ написан
    1 комментарий
  • Реализация полнотекстовый поиска?

    @grinat
    Да для 2к строк можно спокойно использовать https://dev.mysql.com/doc/refman/8.0/en/fulltext-s... единственное, он слегка неадекватен. Но это любого движка для полнотекстового поиска касается, без напильника они не всегда адекватно отрабатывают. Если эластик брать, то надо иметь в виду что начиная с 5ой версии по моему они сильно свое апи поменяли и нагугленные примеры не подойду, а документация у них не очень. Свинкс уже давно тупо устарел, тащить его, это все равно что на писатьна php4
    Ответ написан
    Комментировать
  • Фильтр на одной странице, а данные на другой?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Страница с фильтром имеет форму, форма шлет get запрос на index, а там все стандартно из gii. По сути Вы отдельно делаете рендер для стандартной view-шки _search.php
    Ответ написан
    Комментировать
  • Как в php установить timezone для time?

    DevMan
    @DevMan
    у time() нет понятия таймзоны, это всегда только utc.
    Ответ написан
    Комментировать
  • Как добавить элементы на начало и конец svg?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    У Вас есть координаты, вот и отрисуйте другой svg там.
    Ответ написан
    Комментировать
  • Как правильно организовать импорт xml?

    kimono
    @kimono
    Web developer
    Я бы добавил этот функционал в бэк (админку), чем загружать файлы на сервер, потом заходить по ssh и запускать консольную команду.
    Ответ написан
    2 комментария
  • Как лучше реализовать обновление данных?

    @Wentixon
    Да очень просто такое делается.. Запускаете сервис на ноде с готовой либой для сокетов (socket.io, например), конектите к нему фронт. Запускаете сервис очередей, для этой задачи тот же редис подойдет. Когда на сервере обновляется статья, вы через редис отправляете ее в ноду. Там собственно отправляете всем клиентам.

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

    В ларавель кстати такая система есть из коробки, а на yii вот это нашел, тоже можете потестить https://github.com/MKiselev/yii2-broadcasting/blob...
    Ответ написан
    1 комментарий
  • Как убрать ключи?

    kimono
    @kimono
    Web developer
    Всё просто:
    {id:0, type: 'car'} - это переданный одиночный объект.
    [ { id: 0, type: 'car'} ] - это переданный массив объектов.
    Хотите передать объект, передавайте json_encode(Object).
    Хотите передать массив, передавайте json_encode([Object1, Object2]).
    Ответ написан
    Комментировать
  • Как объединить массивы объектов так, чтобы в результирующем массиве значения определённого свойства были уникальны?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Создаём новый массив:

    const concat = (key, ...arrs) =>
      Object.values([]
        .concat(...arrs)
        .reduce((acc, n) => (acc[n[key]] = acc[n[key]] || n, acc), {})
      );
    
    
    const newFirst = concat('hour', first, hours);

    Дополняем существующий:

    function add(key, target, ...sources) {
      const keys = new Set(target.map(key));
    
      sources.forEach(arr => arr.forEach(n => {
        const k = key(n);
        if (!keys.has(k)) {
          keys.add(k);
          target.push(n);
        }
      }));
    
      return target;
    }
    
    
    add(n => n.hour, first, hours).sort((a, b) => a.hour - b.hour);
    Ответ написан
    3 комментария
  • Как объединить массивы объектов так, чтобы в результирующем массиве значения определённого свойства были уникальны?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Тут ключевой индекс это hours. Поэтому стоит сначала переделать объекты в словари, где ключ час, а значение - объект с car и bike

    Далее стоит определить минимальное и максимальное среди упомянутых значений часов – это диапазон, который надо будет покрыть подряд с шагом 1.

    Далее двигаться по этому диапазону, наполняя данными из массива данных или дефолтного.

    Потом привести опять к исходному формату, где ещё какие-то индексы в начале от 0.
    Ответ написан
    Комментировать
  • Как выполнить execute VK API PHP?

    Например так:
    class DevClass {
    	public $group_id = 30666517;
    	public $membersGroups = array();
    	public $access_token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    	public function devMethod(){
    		$opts = ["group_id"=>$this->group_id, "access_token"=>$this->access_token, "fields"=>"photo_50,members_count", "v"=>"5.80"];
    		$answer = $this->vk->getMethod("groups.getById", $opts, true);
    		//$members_count = $answer->response[0]->members_count;
    		$members_count = 45000;
    		$members_groups = 0;	//изначально в массиве 0 объектов
    		//выполняем цикл пока полученное кол-во участников меньше общего кол-ва участников в группе
    		while($members_count > $members_groups){
    			usleep(300000);	//задержка на 0.3 сек.
    			$answer = $this->getMembers25k($this->group_id, $members_count);
    			if($answer->response){
    				$new = explode(",",$answer->response);
    				$this->membersGroups = array_merge($this->membersGroups, $new);
    				//второй раз определяем переменную, уже с новым массивом данных
    				$members_groups = count($this->membersGroups);
    			}
    			else{
    				echo "NO RESPONSE";
                    print_r($answer);
    				die();
    			}
    		}
    		print_r($this->membersGroups);
    		die();
    	}
    
    	public function getMembers25k($group_id, $members_count) {
    		$members_groups = count($this->membersGroups);
    		$offset = 1000;
    		$code =  'var members = API.groups.getMembers({"group_id": '.$this->group_id.', "v": "5.80", "sort": "id_asc", "count": '.$offset.', "offset": '.$members_groups.'}).items;'
    			.'var offset = '.$offset.';'
    			.'while (offset < 25000 && (offset + '.$members_groups.') < '.$members_count.')'
    			.'{members = members + "," + API.groups.getMembers({"group_id": '.$this->group_id.', "v": "5.80", "sort": "id_asc", "count": '.$offset.', "offset": ('.$members_groups.' + offset)}).items;offset = offset + '.$offset.';};'
    			.'return members;';
    
    		$answer = $this->vk->getMethod("execute", ["code" => urlencode($code), "v"=>"5.80", "access_token" => $this->access_token], true);
            return $answer;
    	}
    }
    
    $dev = new DevClass();
    $dev->devMethod();

    но надо понимать что тут у меня уже сформирован access_token другим классом как и запросы к методам ($this->vk->getMethod), я лишь хотел показать логику.
    Ответ написан
    2 комментария
  • Как подсчитать COUNT с условием в DataProvider?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Count(temperature > 10)?

    А что это? Вы долго рассказывали про стандартный код из gii и потом, клац совершенно с потолка взявшиеся понятия "temperature", "10", "Count".
    Я расшифровал это так количество(40 записей колонки temperature > 10), но 40 записей колонки temperature > 10 это видимо или true или false, а что Вы ожидаете от подсчета количества булиного, я не понимаю.
    В dataProveder есть метод getModels он дает массив моделей, а хелпер типа ArrayHelper::column может вытянуть столбец. Вероятно надо посчитать сумму значений в колонке temperature,а не количество ибо количество равно лимиту не зависимо от колонки.
    Ответ написан
    2 комментария
  • Как изучить JS?

    @strangeletc
    Можно писать backend на Node.js или десктопные приложения на electron
    Ответ написан
    1 комментарий
  • Обучение английскому по скайпу?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    долгий и давний вариант: пополняешь скайп ( на США копейки стоит звонить) и звонишь:
    сначала автоответчикам, потом технарям (домены там купить) , ну а потом и обычным

    иногда, правда, дозваниваешься до Гугл по за гарантию на планшет, саппортер выслушивает, обещает решить проблему, потом хвалит что "планшет хороший, сам бы купил, но на филиппинах $699 это большая зарплата"
    Ответ написан
    Комментировать
  • Сортировка текстового поля как числа и как строки одновременно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если все числовые значения - неотрицательные целые, то
    ORDER BY IF(`val` REGEXP('^[0-9]+$'), LENGTH(`val`), 100), `val`
    Ответ написан
    Комментировать