Ответы пользователя по тегу MySQL
  • Правильное хранение изображений на сервере

    nikel303
    @nikel303
    Можно хранить имя файла (good.jpg) и тип картинки (goods), например картинка товара, на основе этой информации строить путь, так, как вам угодно, например:
    /media/origin/goods/g/go/good.jpg
    /media/origin/goods/t/to/tovar.jpg

    Если нужно сохранить картинку с таким же именем, то в конец дописываем индекс, например:
    /media/origin/goods/g/go/good.jpg
    /media/origin/goods/g/go/good__1.jpg
    /media/origin/goods/g/go/good__2.jpg

    Подпапки после типа картинки /g/go/ нужны, чтобы в одну директорию не сваливалось слишком много файлов.

    Если в качестве имени файла используются цифры (напрмер - это индексы записей в базе), то подпапки лучше формировать с конца имени файла, например:
    125.jpg -> /5/2/125.jpg
    126.jpg -> /6/2/126.jpg
    это позволит более равномерно распределять файлы по папкам.

    Такой вариант позволит в будущем изменить место хранения картинок, поменять логику формирования пути к картинке, и т.д.

    Закешированые картинки соответственно будут храниться, например, по такому пути /media/cached/goods/<название пресета (200x120r)>/go/g/good.jpg

    Пресет можно формировать, например, на основе ширины, высоты, способа масштабирования, и названия фильтра
    Ответ написан
    Комментировать
  • Как реализовать фасетный поиск?

    nikel303
    @nikel303
    1. Берете характеристики товаров, которые могу участвовать в фильтре, получаете для каждой характеристики все варианты значений для текущей выборки товаров.
    2. Выводите в форму фильтра, значения сгруппированные по характеристикам с инпутом-checkbox.
    3. Пользователь ставит галки, отправляет форму.
    4. Формируете критерий для выборки из базы на основе запроса.
    5. Переходим к пункту 1.

    Для ускорения: индексы, кэш, sphinx
    Ответ написан
    3 комментария
  • Как забекапить с помощью mysqldump --all-databases так, чтобы оно сделало имя_базы.sql для каждой базы?

    nikel303
    @nikel303
    Вот ещё такой скрипт есть, можно даже на крон поставить.

    #!/bin/bash
    
    MyUSER="dbuser"
    MyPASS="dbpass"
    MyHOST="localhost"
     
    MYSQL="$(which mysql)"
    MYSQLDUMP="$(which mysqldump)"
    
    #MYSQL="/usr/local/bin/mysql"
    #MYSQLDUMP="/usr/local/bin/mysqldump"
    
    CHOWN="$(which chown)"
    CHMOD="$(which chmod)"
    GZIP="$(which gzip)"
     
    DEST="./db_backup"
     
    MBD="$DEST"
    HOST="$(hostname)"
    NOW="$(date +"%Y%m%d")"
     
    FILE=""
    DBS=""
     
    # DO NOT BACKUP these databases, delemiter SPACE
    IGN="information_schema"
    
    # Get all database list first
    DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
    
    for db in $DBS
    do
    
        skipdb=-1
        if [ "$IGN" != "" ]; then
    		for i in $IGN
    		do
    			[ "$db" == "$i" ] && skipdb=1 || :
    		done
        fi
     
        if [ "$skipdb" == "-1" ] ; then
    		MBD="$DEST/$db"    	
    		[ ! -d $MBD ] && mkdir -p $MBD || :
    		FILE="$MBD/$NOW.sql.gz"
    	        $MYSQLDUMP --opt -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
    		FNUM="$(find $MBD/* | wc -l)"
    		if [ $FNUM -ge 0 ] ; then
    			find $MBD/* -type f -mtime 20 -exec rm -rf {} \;
    		fi
        fi
    
    done
    
    Ответ написан
    Комментировать