Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (34)

Лучшие ответы пользователя

Все ответы (57)
  • Как дернуть из таблички рандомную запись?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    Поменяйте `table` на название вашей таблицы, и скажите есть ли прирост в скорости.
    SELECT tab1.`id`  FROM `table` AS tab1
      JOIN
        (SELECT
          (  RAND() * (SELECT MAX(id) FROM `table`) ) 
        AS id )
      AS tab2
     WHERE tab1.id >= tab2.id
     ORDER BY tab1.id ASC
     LIMIT 1;
    Ответ написан
  • Насколько эффективен скрипт↓?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    У вас непарное количество открывающих и закрывающих фигурных скобок.

    xreservederror - это константа? А это $GLOBALS[xreservederror] что такое?

    hexdec($i) я бы заменил на intval($i,16). Но hexdec('ff') вообще заменил бы на 255.

    Создали бы переменную
    $fileName = './db/'.$pre.dechex($i).'.list'

    Вот этот кусок:
    if($i<16)
          $pre=0;
    
        if(!file_exists('./db/'.$pre.dechex($i).'.list'))
          mkfile('./db/'.$pre.dechex($i).'.list');

    Если $i>=16, то переменной $pre не будет.

    Как указал 27cm, это что-то странненькое.
    if($i>hexdec('ff')){
          return false;
          $GLOBALS[xreservederror].='<t>[u01] Database is full.</t>';
          break;
        }


    Вот этот кусок:
    $data.=str_repeat(' ', $size);
    $data=substr($data, $size);

    Я так понимаю, вы берете некоторую строку и увеличиваете её длину на $size, а потом берете фрагмент получившейся строки отступив $size с начала строки. Я тут вижу много входных данных, которые приведут к созданию файла заполненного пробелами.

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

    ---------------
    UPD

    О! Спасибо что откомментировали код, и стало немного яснее. Я понял ваш вопрос.
    Вы хотите забабахать свое хранилище данных, на файловой системе. Объемы будут в районе 3ГБ.
    ---------
    Я вам сейчас скажу крамольную вещь, но вроде очевидную. Файловая система, это не самый лучший вариант по быстродействию. А ваш код не предусматривает никакого кеширования.

    Я бы отошел от идеи использовать свой велосипед. Индустрия изобрела для вас кучу различных хранилищ. Sql, NoSql, ключ-значение, хеш-таблицы. Вы хотите что-то хранить на диске?!
    MySQL и Redis хранят данные на диске, но в то же время у них есть кеширование и механизмы оптимизации, выгрузка в RAM.

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

    что на счёт быстродействия?
    Быстродействие будет посредственное, а главное с коллизиями.

    не нагнётся ничего при 3 ГБ данных?
    Вы будете создавать излишнюю нагрузку на диск.
    Вопрос надо ставить не в гигабайтах, а в обращениях в секунду. Диск захлебнется.
    Ответ написан
  • Как определить компетентность на должность middle - senior php developer?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    Никак. Middle должен оценивать минимум senior, senior минимум techlead.
    Senior- это уже вопросы не на знание языка и приведение типов, а паттерны, транзакции, деплой, покрытие тестами, типичные бизнес проблемы в предметной области.

    На middle(но не middle+), могу порекомендовать https://tests4geeks.com/test/php-mysql
    Даст представление о кандидате, в целом.
    Ответ написан
  • Как разместить запрос к базе данных Mysql внутри функции на PHP?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    В вашей функции
    $result = mysqli_query($con, $query);

    $con - переменная которая не попадает в scope. Функции она не известна.

    Попробуйте
    function selected($db_name){
      global $con;
    ...
    }


    А в целом, должен заметить что так уже давно никто не пишет. Оберните $con хотя бы в синглтон. Чтобы быть уверенным что никто эту переменную не перепишет в коде рантайм.
    Ответ написан
  • Как составить правильную модель mysql?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    habrahabr.ru/post/254773

    Исходя из описания, вы верно разбили сущности на 3 таблицы.

    Вам не придется создавать промежточную таблицу если рецепт будет принадлежать к одной географической кухне (отношение один -к-одному). Когда вы добавите таблицу География кухни, то просто id из этой таблицы сопоставите полю в таблице рецептов (geo_region_id)

    Если же вы реализуете отошение один-ко-многим, то без промежуточной таблицы не обойтись.
    Ответ написан