Ответы пользователя по тегу Базы данных
  • Почему не проходит запрос к БД?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    В Гарри Поттере было заклинание "круциатус". При изучении представленного кода я испытал его на себе.

    А теперь об ошибке. Вы были любезны и не скрыли на своем сайте вывод ошибок (что является плохим тоном на рабочем сервере). Но в целом, можно увидеть что ошибка заключается вот в чём.

    Warning: mysqli_query() expects parameter 2 to be string, object given in /home/virtwww/w_novum-sibopt0_e83967c7/http/inc/vam_db_query.inc.php on line 34

    Catchable fatal error: Object of class mysqli_result could not be converted to string in /home/virtwww/w_novum-sibopt0_e83967c7/http/inc/vam_db_error.inc.php on line 28

    Вы видимо в какой-то момент хотите получить результат запроса, и обращаетесь к нему как к строке, а не объекту.
    Ответ написан
  • Насколько эффективен скрипт↓?

    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 ГБ данных?
    Вы будете создавать излишнюю нагрузку на диск.
    Вопрос надо ставить не в гигабайтах, а в обращениях в секунду. Диск захлебнется.
    Ответ написан
  • Стоит ли разрешить делать прямые запросы в baas базу данных напрямую с клиента без участия сервера и без серверной валидации?

    elevenelven
    @elevenelven
    Php Dev @ Amadeus
    Никогда не доверяйте данным полученным от третьей стороны.
    Может в вашей БД и нет конфиденциальных данных. Но есть еще целостность и доступность, которые могут быть нарушены. А кроме того, в какой-то момент может появится необходимость ранжировать пользователей, выдавать права доступа и контролировать их. Ну или появятся конф. данные.
    Всегда пишите свой код так, как будто это ПО для искусственной почки. И практика хорошая и привычка полезная.
    Ответ написан
    2 комментария
  • Как составить правильную модель mysql?

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

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

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

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