Возможно вы искали: 'WWII GI'

May 15 2025 19:23:10
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » О грамотном использовании БД MySQL (mysql)

О грамотном использовании БД MySQL (mysql)

Ключевые слова: mysql, (найти похожие документы)

From: Евгений В. Жданов <eugene@protoplex.ru.>
Date: Mon, 26 Mar 2006 14:31:37 +0000 (UTC)
Subject: О грамотном использовании БД MySQL

Оригинал: http://design.protoplex.ru/?showid2=37

Многие мои друзья и знакомые часто спрашивают меня о том, как устроен
мой сайт, сколько у меня таблиц в базе данных, как я храню данные и по
каким полям веду поиск. Я, конечно, не выдаю все свои государственные
тайны, но всегда понимаю причину таких вопросов и пытаюсь помочь людям
построить быструю и надежную базу данных - т.е. тщательно продумать
структуру БД таким образом, чтобы при увеличении нагрузки или объема
таблиц динамический веб-сайт не превратился в тормозное усмертие. А
ведь многие новички (веб-строители) даже не догадываются о том, что
крупные динамические сайты тормозят вовсе не из-за нагрузки скриптов
на процессор, а в основном из-за неоптимизированного или дохленького
MySQL-сервера. При этом во многом все зависит от того, как устроена
ваша база данных.

Итак, начнем ликбез. Сразу всем вопрос: что делает MySQL во время
записи в таблицы типа INSERT или UPDATE? Правильно - БЛОКИРУЕТ ТАБЛИЦЫ
и пишет в них данные. Скорость записи и поиска может быть достаточно
низкой, поэтому статус таблиц запрещает другим процессам считывать из
них данные до окончания операции записи или обновления и снятия
блокировки. При этом может получиться так, что во время записи
единственного поля в длинные таблицы, ваш MySQL-сервер надолго
заблокирует доступ к таблице остальным скриптам.

Например, вы создали таблицу новостей такого типа:

ID - номер, первичный ключ
TEMA - тема новости
MESS - сообщение, сама новость
VIEWS - количество просмотров


При каждом обращении к новостям, скрипт будет выводить саму новость, а
потом увеличивать поле VIEWS запросом UPDATE table 'NEWS' set
VIEWS=VIEWS+1 where id=ID. При этом количество апдейтов будет довольно
высоким. При высокой посещаемости веб-ресурса или при "нападении" на
сайт поискового робота (эти ребята страдают многопоточностью и могут
запросто повесить ваш сайт своими запросами) несколько одновременных
процессов станут пытаться сделать UPDATE и SELECT. При каждом UPDATE
таблица будет блокироваться (на это уходит время) и все остальные
процессы будут ждать завершения операции. А если таблица достаточно
большая? Например, несколько тысяч записей. Ежу понятно, что
построится очередь из нескольких десятков скриптов, ожидающих ответа
MySQL-сервера. Каждый будет жрать память и держать остальные процессы.
В итоге все у вас зависнет и переглючит. Выход: делать вместо одной
таблицы несколько. Советую разделять поля по типу их использования.
Одну таблицу - только для вывода и редких обновлений или вставок.
Другую - для частых обновлений, но редкого вывода. Например, значения
счетчика обращений держать отдельно в таблицу вида:

ID - номер, первичный ключ
VIEWS - количество просмотров


Сами новости лучше держать в другой таблице, где нет поля VIEWS. При
этом таблица с новостями будет тяжелой (много текста, полей,
индексов), а таблица COUNT (счетчик) будет очень легкой и быстрой.
Таблица NEWS будет кешироваться и выводиться очень быстро при любых
объемах, а таблица COUNT будет быстро обновляться из-за того, что она
очень легкая (всего два целочисленных поля). Разделение данных по
нескольким таблицам существенно ускоряет работу MySQL-сервера. Гораздо
быстрее работают несколько мелких запросов по каждой таблице, чем один
длинный запрос по одной или нескольким таблицам. Имейте это в виду,
чтобы спать спокойно.

Дальше - круче. Чтобы не блокировать лишний раз свои таблицы
используйте при вставках директиву DELAYED. Пример: INSERT DELAYED
into STAT (ID,IP,UTIME) values (null,$ip,NOW()). Он позволяет серверу
ответвлять поток в режиме ожидания, а саму вставку производить тогда,
когда сервер освободится от других запросов или поступит следующий
аналогичный INSERT DELAYED. Обычно отложенный метод подходит для любых
операций с кумулятивными таблицами (когда в основном идут INSERTы, а
данные копятся, а не модифицируются), при которых не особо важно когда
именно подействуют изменения - мгновенно или через несколько секунд,
минут. Например, если хотите собирать IPадреса своих посетителей,
УРЛы, по которым они ходят или страницы, откуда пришли, время. При
добавлении с задержкой скрипт отработает почти мгновенно, еще до
выполнения операции.

Операция UPDATE идет в три этапа: поиск того, что будете менять, затем
запись данных, обновление индексов. При этом, чем больше таблица, тем
дольше поиск. Если есть индексы, то операция кешируется и выполняется
достаточно быстро. Но сам процесс очень емкий. И только дурак не
догонит, что большая таблица со множеством индексов и записей, будет
тормозить при UPDATE. INSERT же выполняется одним залпом, очень
быстро. Поэтому обычно используют аддитивные записи (вставками INSERT)
во временные таблицы, потом блокируют основные талицы, суммируют
обновления, и плюют их в основную таблицу. Получается, что в основном,
главные таблицы работают только в режиме вывода, а обновления идут
гораздо реже и быстрее. Например, можно копить данные о загрузках
новостей во временной таблице, а по крону или иным образом обновлять
счетчик каждые 10 минут (или реже). Это ускорит работу сервера.

При запросах SELECT * FROM таблица скрипт получит все поля данной
таблицы. А нужно ли это? Использование * ведет к лишнему расходу
ресурсов. Гораздо эффективнее использовать точные названия полей,
которые нужны скрипту. Например: SELECT id,name FROM таблица. При
таком запросе передача займет меньше времени и понадобится меньше
ресурсов. Старайтесь ограничивать вывод при помощи директивы LIMIT.
Это также ускоряет вывод.

Поиск по БД идет быстрее если вместо LIKE '%слово%', ставить 'слово%'.
Операции с шаблонами регулярных выражений кешируются только в том
случае, если в начале отсутствует символ %. Поэтому при построении
поисковых запросов с LIKE избегайте начинающих символов %.

При построении таблиц для наиболее используемых полей (при поиске,
сортировке и т.д.) обязательно создавайте индексы. Без индексов
таблицы будут сильно тормозить. Индексы служат для кеширования и
позволяют существенно ускорить вывод данных из таблиц. При этом
таблицы будут занимать больше места на диске и в памяти. Но это в наше
время не проблема.

Используйте надлежащий тип полей для своих записей. Тип TINYINT
занимает 1 байт - самый быстрый. Таблицы с MEDIUMINT быстрее таблиц с
INT. Если ставить полям свойство NOT NULL, то в целом их работа будет
быстрее. VARCHAR медленее CHAR, поэтому таблицы переменной длины (где
есть тип VARCHAR или TEXT) занимают меньше дискового пространства, но
работают медленнее.

По своему опыту скажу, что для большинства сайтов подходят изложенные
советы по работе с MySQL. Чтобы еще больше ускорить свой сервер,
советую частоиспользуемые операции проводить по крону выделенными
процессами и писать данные в различные файлы. Например, раз в 20 минут
запускать скрипт, который будет создавать файл с новостями. Или
например, генерить файл с новостями при их добавлениях или
обновлениях. Таким образом, вы экономите на каждом обращении к БД.
Интерактивность при этом не теряется, а производительность
увеличивается во много раз. Особенно, повторяю, при высокой
посещаемости ресурса. Старайтесь отделить интерактивные операции от
фоновых. Например, на ПротоПлексе работает один интерактивный движок,
но в фоне по заданиям трудятся с десяток различных роботов, которые
генерируют часто вызываемые страницы, рассылают письма и т.д. Крупный
сайт - это не только то, что вы видите, но и бек-енд (обратная
сторона). В фоновом режиме можно быстро и эффективно готовить контент,
освобождая основной движок от лишней работы.

В общем, основы должны быть всем понятны. Дробите все на мелочи, будь
то запросы, таблицы или операции. Структура БД должна быть такой,
чтобы не выполнялось ничего лишнего. Регулярно проводите OPTIMIZE на
таблицах с переменной длиной, особенно, если в них идут удаления
записей. Тестируйте свои запросы на скорость, упрощайте их. Ну а я уже
устал это писать :) Если будут вопросы, пишите, отвечу.
385 Прочтений •  [О грамотном использовании БД MySQL (mysql)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• О грамотном использовании БД MySQL ... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка