Использование больших двоичных объектов для небольшого журнала - PHP/MySQL


Я создаю небольшой веб-сайт журнала, который планирую использовать ежедневно, но мне интересно, следует ли хранить изображения и видео моих статей в виде физических файлов или в виде BLOB в моем MySQL Table.

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

Моей идеальной настройкой было бы иметь 2 таблицы:

article_table:

ID  | Title   | Image | Article
-------------------------------
int | varchar | int   | text



blob_table:

ID  | Name    | Blob
--------------------
int | varchar | blob

Итак, когда я загружаю свой статья, основанная на ID, затем я бы выбрал свое изображение большого двоичного объекта, где идентификатор совпадает:

if(isset($_GET["id"])){$id = $_GET["id"];}else{
header("Location: http://www.wesbite.com");
exit();
};

$blob_sql = "SELECT * FROM blob_table WHERE id = '$id'";
$blob_res = mysqli_query($con, $blob_sql);

Используя этот метод, как это повлияет на наличие огромного количества записей в blob_table при попытке отобразить их на article.php страница?

Кроме того, кто-нибудь знает, есть ли разница в размере файла, который физически хранится, по сравнению с размером большого двоичного объекта? т.Е. Если физический JPG составляет 320 КБ, каков будет эквивалентный размер ячейки таблицы больших двоичных объектов.

Наконец - Есть ли разница в фактической скорости загрузки при сравнении загрузки большого двоичного объекта с загрузкой физического файла?

Спасибо.

Author: Wayne Six, 2017-05-06

1 answers

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

Физические файлы. Меньше нагрузки на сервер.

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

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

Моей идеальной настройкой было бы иметь 2 таблицы...Используя этот метод, как это повлияет на наличие огромного количества записей в таблице больших двоичных объектов при попытке отобразить их на article.php страница?

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

Таким образом, у вас может быть такая таблица:

ID | Description | filename
----------------------------
 1 | apples      | /home/myself/public_html/apple.jpg
 2 | oranges     | /home/myself/public_html/orange.jpg
 3 | bananas     | /home/secret/bananas.jpg

Кроме того, кто-нибудь знает, есть ли разница в размере файла, который физически хранится, по сравнению с размером большого двоичного объекта? т. Е. Если физический JPG составляет 320 КБ, что соответствует размеру ячейки таблицы больших двоичных объектов.

Это зависит от используемого SQL и версии. Каждый тип данных имеет разные размеры и зависит от того, как вы объявляете данные. Например, если вы объявляете идентификатор как BIGINT вместо TINYINT, то вы, вероятно, тратите 6 байт на запись. Хранение файла в виде реального файла одновременно ускоряет обработку и экономит место, и для его обработки не требуется механизм SQL.

Наконец - Есть ли разница в фактической скорости загрузки при сравнении загрузки большого двоичного объекта с загрузкой физического файла?

Скорость загрузки зависит в первую очередь от того, насколько перегружен ваш сервер. Если миллионы людей получают доступ к нему в одну и ту же секунду, то, скорее всего, загрузка может быть значительно медленной. Когда гость загружает что-то, это по большей части неопределенные данные, потому что его сценарий сервера затем определяет, что происходит с данными. В PHP вы можете сделать так, чтобы гости могли загружать файлы это быстрее, так как вам не нужно открывать файл на сервере, чтобы преобразовать его в большой двоичный объект.

 1
Author: Mike -- No longer here, 2017-05-06 20:40:23