• Как исправить ошибку при записи в mysql "Incorrect string value"?

    APTEMOH
    @APTEMOH
    Пишу чат ботов, телеграм ботов, ботов во вконтакте
    Подключение к БД так же нужно изменить на utf8mb4
    Ответ написан
    3 комментария
  • Как сделать behavior для события afterSave?

    qonand
    @qonand
    Software Engineer
    уж извините за грубость но Вы написали бред который и не может работать, во первых при срабатывании поведения на события в указанную функцию передается не заданные Вами атрибуты а экземпляр класса yii\base\Event т.е. никаких $insert и $changedAttributes не будет передано, в Вашем случае в метод будет передан экземпляр класса yii\db\AfterSaveEvent. Во вторых зачем Вы наследуетесь от AttributeBehavior? по коду смысла от этого наследования нет, кроме того метода afterSave, который Вы вызываете в коде
    parent::afterSave($insert, $changedAttributes);
    в классе AttributeBehavior нет. А правильно реализовать Ваше поведение приблизительно так:
    class EntityLogBehavior extends \yii\base\Behavior
    {
        public function events()
        {
            return [
                ActiveRecord::EVENT_AFTER_INSERT => 'afterSave',
            ];
        }
    
        public function afterSave($event)
        {
            $event->changedAttributes // читаем и что-то делаем с измененными атрибутами
        }
    }


    P.S. настоятельно рекомендую детально изучить саму концепцию поведений
    Ответ написан
    3 комментария
  • Что плохого вы можете рассказать про OrientDB?

    RaSla
    @RaSla
    IT-специалист широкого профиля
    https://github.com/orientechnologies/orientdb/issu... :
    "I'm running orientdb standalone server on a machine with 64gb ram and 4g swap space. Database has more than 300 millions edges and around 70 million vertices.

    Each client performs insert/read/delete at around 10k qps(all combined). I have multiple such clients connecting to the server.

    When qps is over 50k, the orientdb server crashes with Out of Memory(OOM) exception."


    Лично для меня цифра "50 000 запросов в секунду" (при более чем 370 млн объектов в БД, на одном сервере) кажется весьма подходящей для очень многих "настоящих" проектов.

    Для ознакомления с OrientDB, советую пройти бесплатный обучающий курс для новичка:
    https://www.udemy.com/orientdb-getting-started/ (на примере OrientDB 2.0, 2014 год).
    Ответ написан
    Комментировать
  • С чего начинать проектировать приложение?

    max-kuznetsov
    @max-kuznetsov
    Главный IT-архитектор
    Предположим, что с будущей функциональностью Вы определились. Тогда Вы точно знаете, кто или что будет поставлять данные, и кто/что будет их потреблять.

    Теперь выясните, кто будет обращаться к вашей системе, чтобы передать или забрать данные, а к чему будет обращаться Ваша программа. Те системы или пользователи, которые обращаются к программе сами, нарисуйте схематически на листе бумаги вверху. Те, к которым будет обращаться программа (включая БД), - снизу.

    Теперь нарисуйте под каждым нарисованным сверху субъектом прямоугольник с названием UI или API - это интерфейсы, к которым будет обращаться пользователь или внешняя управляющая система. Иногда UI тоже может обращаться к API. Объедините все прямоугольники с UI одним контуром и обзовите слоем UI. Объедините все прямоугольники с API и обзовите слоем сервисов.

    Для систем, нарисованных снизу, укажите компоненты, которые будут отвечать за доступ к этим системам. Объедините все эти компоненты одним контуром и обзовите слоем доступа к данным.

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

    Теперь справа нарисуйте несколько длинных прямоугольников снизу доверху и написшите в них: логирование, конфигурация, мониторинг производительности, обработка исключений и что-то ещё, что является общей инфраструктурой (или сквозной функциональностью) для всех слоёв вашей программы.

    Получите логическую архитектуру. Разбросайте слои по серверам - получите физическую архитектуру.

    А дальше - детально прорабатывайте каждый маленький квадратик. Всё.
    Ответ написан
    2 комментария
  • Что плохого вы можете рассказать про OrientDB?

    @DarkDarker
    Из плюсов - это простота и набор all-in-one(вот как раз один сервер решает все вопросы :)). Действительно, есть все что нужно - транзакции и т д. Отлично расширяется горизонтально. Теперь о нюансах: база мульти-модельная - графовая и документо-ориентированная(далее д.о.), а это значит что лучше всего проявляет себя в many-join проектах. Использовать как join-less высокопроизводительное(read-write) д.о. хранилище можно, но для подобных проектов я бы выбрал mongo. (По моим тестам mongo все-же выигрывает по производительности, особенно на select from large data).
    По поводу API:
    Иногда не хватает JPA совместимости - некоторые "легкие" проекты удобней делать на JPA. Здесь-же объектное апи более тривиально и требует большего внимания разработчика. Д.о. и графовое апи - минусов не заметил.
    Ответ написан
    2 комментария
  • Стоит ли использовать Mongo и Node.js для сервиса аналога Яндекс.Метрики и Google Analytics?

    @kaasius
    Нода тут вас никак не спасёт, потому что узкое место у вас в БД.
    Монга только отсрочит неминуемое.
    А неминуемое состоит в том, чтобы перейти на очереди.
    То есть, как бы сделал я - на машине, которая собирает статистику (принимает запросы от сайтов), все данные пишутся в очередь. Можно использовать RabbitMQ например. И больше эта машина ничем не занимается.
    Вторая машина достает из очереди данные и кладет их в БД, делая дополнительно какую-то обработку этих данных.
    При этом как первых, так и вторых машин у вас может быть несколько. А можно всё это запустить и на одной. В любом случае, работать это будет быстрее, а записывать в БД будет не 100 потоков, а один, предварительно консолидируя данные.
    Ответ написан
    4 комментария
  • Работа с websockets + $_SESSION + $_SERVER

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    $_SESSION и $_SERVER нужны для работы поверх http, а у вас голые (почти) tcp сокеты. Вот и думайте.
    Обычно при установке соединения проводится аунтефикацию и все. По сути алгоритм простой

    Сервер слушает входящие соединения
    Клиент соединяется с сервером
    Клиент отправляет данные (токен скажем)
    Сервер проверят токен и определяет какому пользователю соответствует данное соединение.

    Ну а дальше просто. Если нужно какому-то пользователю послать данные, находим все соответсвующие соединения и шлем данные.
    $_SESSION и $_SERVER для этих целей вообще ненужны.
    Ответ написан
    2 комментария
  • Доменная зона .io — что я пропустил?

    vosi
    @vosi
    input/output?
    это ж как-бы основа всех основ )))
    Ответ написан
    5 комментариев