Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6

Оптимизация работы с БД

09.03.2013, 16:57. Показов 2476. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошло 5 недель, как я перешёл на веб-разработку. У меня много вопросов касающихся оптимизации. Самый главный вопрос, который сейчас меня волнует, это оптимизация работы с бд.
Имеется база данных, в которой существует две таблицы: "новости" и "комментарии к новостям". При переходе на главную страницу, в БД посылается запрос на считывание данных и вывод информации, т.е. новостей или комментарий с новостью. Хорошо. Всё работает, но я то пока на сайте один А что если таких запросов будет 1000 за 1 минуту? Да БД будет постоянно отваливаться! Нужно как-то свести к минимуму обращения к БД.
Что я думаю по этому поводу:
Нужно создать две таблицы. В одну из них будет загружена таблица с новостями, а в другую с комментариями. При переходе на страницу с новостями или на страницу с новостью и комментариями, запрос будет выполнен к этой таблице, а не к БД. Таблицу с новостями, можно будет обновлять по необходимости, т.е. появилась новая новость - подгрузили её в таблицу. А таблицу с комментариями обновлять раз в сутки! Т.е. если был добавлен комментарий, то мы его загружаем не в БД, а потом считываем данные в таблицу; мы добавлям запись к таблице, а потом, например в конце дня автоматически запускается скрипт и обновляет БД из этой таблицы. Или даже можно сделать две таблицы: с новыми комментариями и старыми, чтоб лишние действия не делать в поиске свежих комментариев.

Так вот. Правильны ли мои мысли? Как оно вообще по сути делается правильно? Подкиньте источников или название книги какой-нибудь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2013, 16:57
Ответы с готовыми решениями:

Загрузка данных, оптимизация алгоритма для работы с сервером
В таблице хранится примерно 240 000 записей, запрос выполняется где-то за 0.0010 секунд. Использую PDO-объект для подключения к БД, для...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии "оптимизатора" в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Оптимизация работы
Есть большой файл с множеством формул массива, работа с ним довольно затруднительно. Вопрос такой, если ввести дополнительное условие...

23
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
10.03.2013, 19:19  [ТС]
АП
0
 Аватар для t1m0n
638 / 416 / 27
Регистрация: 03.11.2009
Сообщений: 1,855
10.03.2013, 19:46
вообще еще есть кеширование, страница которая не меняется кешируется в озу или в папке на винчестере и отдается нгиксом
про индексы не забыли?
еще есть быстрые базы данных memcached, redis
Цитата Сообщение от BuPy7 Посмотреть сообщение
А таблицу с комментариями обновлять раз в сутки!
это долго очень
1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
10.03.2013, 19:48  [ТС]
Цитата Сообщение от t1m0n Посмотреть сообщение
это долго очень
Там наверно я хотел написать базу данных из таблицы.
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
10.03.2013, 20:43
А что если таких запросов будет 1000 за 1 минуту? Да БД будет постоянно отваливаться!
а что буде если НЛО сядет?
При переходе на страницу с новостями или на страницу с новостью и комментариями, запрос будет выполнен к этой таблице, а не к БД
ты сам понял, что написал?
Правильны ли мои мысли? Как оно вообще по сути делается правильно?
Я ничего не понял что ты написал. Вообще.

Есть мем кеш, результаты запросов можно хранить в нем. Но изначально вопрос стоит по-идиотски - "а что будет если.." Вот когда у тебя будет 1000 запросов в минуту - тогда и можно будет говорить о чем-либо. Сейчас разговор бессмыслен.

Добавлено через 1 минуту
ну и http://phpclub.ru/mysql/doc/mysql-indexes.html
1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
10.03.2013, 21:02  [ТС]
Цитата Сообщение от Василий Макогон Посмотреть сообщение
http://phpclub.ru/mysql/doc/mysql-indexes.html
Ничего нового не узнал.

Цитата Сообщение от Василий Макогон Посмотреть сообщение
а что буде если НЛО сядет?
Хороший программист думает заранее о том, что может произойти с его программой и предотвращает это.


Цитата Сообщение от Василий Макогон Посмотреть сообщение
ты сам понял, что написал?
По крайне мере да.

Цитата Сообщение от Василий Макогон Посмотреть сообщение
Есть мем кеш, результаты запросов можно хранить в нем.
Вы второй человек кто мне это предлагает. Значит будем использовать.


Цитата Сообщение от Василий Макогон Посмотреть сообщение
Но изначально вопрос стоит по-идиотски - "а что будет если.." Вот когда у тебя будет 1000 запросов в минуту - тогда и можно будет говорить о чем-либо. Сейчас разговор бессмыслен.
Если у вас богатый опыт в программировании, то вот после таких утверждений вы просто в грязь лицом упали.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
10.03.2013, 23:30
Цитата Сообщение от BuPy7 Посмотреть сообщение
Ничего нового не узнал.
Покажите ваши запросы на создание таблиц.

Цитата Сообщение от BuPy7 Посмотреть сообщение
Хороший программист думает заранее о том, что может произойти с его программой и предотвращает это.
Хороший программист знает, что если в секунду у него 1000 открытий страниц, то нужно пользоваться не хостингом, а чем то посерьезней. А там 1000 не отвалиться

Цитата Сообщение от BuPy7 Посмотреть сообщение
Если у вас богатый опыт в программировании, то вот после таких утверждений вы просто в грязь лицом упали.
Боюсь что нет. Вам правильно написали, сначала добейтесь такой посещаемости, а там увидите что дело не только в бд, а будет всех ресурсов не хватать, даже интернет канала.

Цитата Сообщение от BuPy7 Посмотреть сообщение
запрос будет выполнен к этой таблице, а не к БД
Цитата Сообщение от BuPy7 Посмотреть сообщение
А таблицу с комментариями обновлять раз в сутки!
Цитата Сообщение от BuPy7 Посмотреть сообщение
Т.е. если был добавлен комментарий, то мы его загружаем не в БД, а потом считываем данные в таблицу; мы добавлям запись к таблице, а потом, например в конце дня автоматически запускается скрипт и обновляет БД из этой таблицы.
Вы вообще не понимаете что такое БД и что такое таблица?

Цитата Сообщение от BuPy7 Посмотреть сообщение
Или даже можно сделать две таблицы: с новыми комментариями и старыми, чтоб лишние действия не делать в поиске свежих комментариев.
Почему не 5? Это вообще к чему?
1
10.03.2013, 23:36

Не по теме:

Цитата Сообщение от BuPy7 Посмотреть сообщение
запросов будет 1000 за 1 минуту?
пфф.. 4800 запросов в минуту с каждого

0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
11.03.2013, 00:44
Значит будем использовать
http://yandex.ru/yandsearch?te... 648&lr=213
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
11.03.2013, 12:58  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Покажите ваши запросы на создание таблиц.
PHP
1
$sql = "SELECT dateCreate, caption, fullTextNews " . "FROM news WHERE ID LIKE " . (int)$id;
Плохой запрос?

Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Вы вообще не понимаете что такое БД и что такое таблица?
Я имел ввиду не ту таблицу, которая в БД, а внешняя. Отделённая от БД.

Добавлено через 12 минут

Не по теме:

Где срачь? Никого нет.

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.03.2013, 13:06
Цитата Сообщение от BuPy7 Посмотреть сообщение
Плохой запрос?
как сказать. сам запрос ~ нормальный. Использование двойных кавычек без надобности - минус. Присваивание переменной без надобности - минус. Использование конкатенации без надобности - минус. К тому же, насколько я понимаю, здесь LIKE не нужно, т.к. процентов все равно не видно. Да и навряд ли вообще здесь нужно использовать LIKE даже по логике. И все зависит также от того, что вы потом с ним делаете.

Не по теме:

А вообще, показать одну строчку - все равно что показать руль от машины и сказать "Скажи, как тебе машина?" :D

1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
11.03.2013, 13:15  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Использование двойных кавычек без надобности - минус
А какие использовать? Одинарные?

Цитата Сообщение от KOPOJI Посмотреть сообщение
Присваивание переменной без надобности - минус.
Я переменную потом могу и освободить. Если сразу запрос вписать в mysqli_query, то это какой-то онанизм.

Цитата Сообщение от KOPOJI Посмотреть сообщение
Использование конкатенации без надобности - минус
В коде возврат каретки есть. Я просто скопировал строку запроса и всё.

Цитата Сообщение от KOPOJI Посмотреть сообщение
К тому же, насколько я понимаю, здесь LIKE не нужно
Почему-то до этого момента я думал, что его можно использовать и вместо "=". Исправимся.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.03.2013, 13:18
Цитата Сообщение от BuPy7 Посмотреть сообщение
А какие использовать? Одинарные?
в двойных кавычках пых ищет переменные, соответственно, код выполняется дольше. Но к оптимизации именно БД это не относится.
Цитата Сообщение от BuPy7 Посмотреть сообщение
Я переменную потом могу и освободить. Если сразу запрос вписать в mysqli_query, то это какой-то онанизм.
а на мой взгляд, как раз наоборот, для текста мелкого запроса создавать переменную является данным действием.
Цитата Сообщение от BuPy7 Посмотреть сообщение
В коде возврат каретки есть. Я просто скопировал строку запроса и всё.
Тоже самое что и выше. Разделять мелкий запрос на несколько строк имхо лишнее.
Цитата Сообщение от BuPy7 Посмотреть сообщение
Почему-то до этого момента я думал, что его можно использовать и вместо "=". Исправимся.
Можно. Но не нужно
1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
11.03.2013, 13:24  [ТС]
KOPOJI, я заметил, что PHP понимает индекс в ассоциативном массиве, как с кавычками, так и без. Дак как правильно?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.03.2013, 13:30
а вы включите вывод ошибок E_NOTICE, сразу поймете Чтение несуществующей переменной
При обращении без кавычек пых сначала пытается найти константу с таким именем, а уже только потом смотрит как на индекс, подставляя кавычки
1
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.03.2013, 13:48
Цитата Сообщение от BuPy7 Посмотреть сообщение
Плохой запрос?
Это вообще не запрос на создание таблицы
Покажите структуру таблицы.

Ну а по поводу плохости запроса, главный минут тут не в кавычках двойных или одинарных, сокрость очень не значительна. Главный минус в том тчо имена полей и название таблиц вы не заключаете в `обратные апострофы`.
Обзовёте поле или таблицу служебным словом, ну например count, захотите выбрать поле
SQL
1
SELECT COUNT FROM TABLE
и будет вам ошибка синтаксиса запроса и запрос не выполнится, или выполнится, по этому всегда нужно заключать имена в обратные апострофы а текст в кавычки или апострофы.
SQL
1
SELECT `count` FROM `table`
выполнится
1
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
11.03.2013, 13:52  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Это вообще не запрос на создание таблицы
Да. Извиняюсь.
SQL
1
2
3
4
5
6
7
8
CREATE TABLE `commentsNews` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT,
  `idNews` INT(11) DEFAULT NULL,
  `dateCreate` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `nick` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `comment` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
0
 Аватар для Василий Макогон
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
11.03.2013, 14:04
зачем тут like?

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
Присваивание переменной без надобности - минус
совсем не минус. это нормальная практика, ТС прав, что писать большой запрос в query() это изврат. К тому же всегда можно для отладки посмотреть содержимое запроса.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.03.2013, 14:05
Василий Макогон,
Цитата Сообщение от KOPOJI Посмотреть сообщение
а на мой взгляд, как раз наоборот, для текста мелкого запроса создавать переменную является данным действием.
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
11.03.2013, 14:31  [ТС]
Я сайт создаю на хостинге hostinger, там раз в сутки база данных сама отваливается. =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2013, 14:31
Помогаю со студенческими работами здесь

Оптимизация работы с ТЗ
Есть две ТЗ Они, можно сказать, связаны один-к-многим При формировании печатной формы идет перебор строк ТЗ1 и для каждой ее строки...

Оптимизация Работы С Тз
Есть две ТЗ с одинаковыми колонками: Товар, Цена, День, НачО, КонО, Приход, Расход Если в ТЗ1 и в ТЗ2 есть строки с совпадающими...

Оптимизация работы с изображениями
Написал простенькое приложения с фильтрами для фото используя WriteableBitmapEx. Изображения храню просто в WriteableBitmap, а все...

Оптимизация работы Windows 8 ?
Господа , как Оптимально настроить Windows 8 ? спасибо .

Оптимизация работы класса
Написал класс который оперирует с числами в разных СС. Укажите на недостатки, на то что можно сделать получше, что можно добавить. Код:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru