|
2 / 2 / 1
Регистрация: 01.11.2010
Сообщений: 43
|
||||||
Работа с mysql_insert_id() и генерирование уникального имени файла15.02.2013, 19:16. Показов 1744. Ответов 2
Метки нет (Все метки)
Здравствуйте
Пред история: Был запущен проект без особых надежд на не дорогом купленном движке для загрузки файлов. Вот работал этот движок и я только иногда менял что то в шаблоне и почти никогда не лез в код (так как после покупки я его увидел и мне было страшно туда лезть ). Но вот пришло мне письмо от хостера про высокую нагрузку. Я уже был на дорогом шаред хостинге и пришлось все таки арендовать ВПС. После настройки я все запустил и все залетало дальше, хотя иногда проскакивали и тормоза. Я уже всерьез взялся после переноса за движок так как уже смотрел более подробно за нагрузкой. И после анализа тяжелых запросов я начал понемногу менять архитектуру движка. А теперь о самом вопросе: Добавление файлов на сервер оказалось происходило очень не правильно. В случае картинок сначала генерировалось превью и имя конечного файла которое будет на сервере и производилась запись файлов на диск. Дальше добавлялась запись в таблицу. Вот тут я и был сильно удивлен. Имя файла генерировалось по такому шаблону id.xxx где xxx тип файла. Такой шаблон меня устраивал но для всего этого требовалось 4 запроса в базу. И так. Внимание! Первый запрос брал с базы данных последний ИД (который создавался автоинкрементом) и добавлял ему единицу. И это было название нашего файла. По заданному алгоритму генерировалось превью для картинки и получало имя id-thumb.xxx где xxx тип файла. Єтот ИД хранился в переменной и использовался дальше для создания имени новой полной картинки. Дальше происходила запись в таблицу где в определенных полях хранился полный путь к файлу и имя файла. Потом был ужас. (Заметка: Авторизация пользователей происходила при помощи сессий). Выбирался с базы ИД пользователя где ИД был равен ИД который был в массиве сессии (они всегда были одинаковы и эта операция была выброшена). Потом для генерации ссылок на файл проис ходил еще один запрос к базе где выбиралась уже информация по загруженному файлу (пути, кто загрузил) и генерировалась ссылка. Оптимизация: Первым делом я решил убрать генерацию ИД при помощи запроса к базе и выбора ИД последней записи так как кто его знает сколько еще может быть и инсертов после этого селекта. План был таков. Делать всего одну запись в базу. Но тут появилась проблема. Для генерации имени нужен ИД который будет присвоен этому файлу. Его решил брать при помощи функции mysql_insert_id(). И вот беда,во идее после инсерта должны быть заполнены поля с путями к файлу, но их нельзя заполнить так как генерация ИД происходит во время создания записи. Решением этой проблемы чтобы не создавать еще один запрос но уже апдейт данных я думал решить так: Первая мысль фантастическая. Чтобы мускуль каким то образом сам дописал ид в поле имени файла но мне это показалось не правильным и не возможным. И я оставил такую затею. Вторая мысль. Генерировать имя файла не связывая его и ИД. Но вот как сделать алгоритм чтобы имя файла было всегда разным? Думал использовать в алгоритме временную метку и например размер файла. Или может кто подскажет как правильней это сделать. Чтобы был минимум запросов а также не большое время на выполнение скрипта. Если я упустил что то важное для решения то пишите. Обязательно напишу. Добавлено через 10 минут Вот кусочек код с запросами Кликните здесь для просмотра всего текста
0
|
||||||
| 15.02.2013, 19:16 | |
|
Ответы с готовыми решениями:
2
Как сделать проверку на наличие похожего имени файла и запрос нового имени файла? |
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||
| 16.02.2013, 09:29 | ||
|
Если поддерживаются транзакции, то для целостности данных лучше запустить транзакию перед insert'ом (или savepoint, если всё целиком уже происходит в транзакции). Затем после успешного сохранения файла update и commit (или сохранение savepoint). В случае ошибки сохранения файла откат транзакии (или savepoint'а).
1
|
||
|
2 / 2 / 1
Регистрация: 01.11.2010
Сообщений: 43
|
|||||||||||
| 17.02.2013, 20:22 [ТС] | |||||||||||
|
В общем как я сделал.
Имя файла генерируется перед запросом к БД.
А потом один запрос к базе данных
PS. Наверно все таки добавлю к имени файла еще и ИД. Тогда уж точно один пользователь не загрузит одновременно два одинаковых файла.
0
|
|||||||||||
| 17.02.2013, 20:22 | |
|
Помогаю со студенческими работами здесь
3
Работа с выделенным файлом. Получение имени выделенного файла Создание уникального файла Работа с файлами. Как менять часть имени файла с каждым проходом цикла? Создание временного уникального файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|