|
|
|
| Усть много-много таблиц (с одинаковой структурой) вида: table_1, table_4, table_3, table_105... Причем они расположены в неправильном порядке и не под всеми числами есть таблица. Можно как то удалить записи из этих таблиц, в которых type=1? | |
|
|
|
|
|
|
|
для: IIDeckaRII
(23.04.2012 в 18:37)
| | Всех проще получить список таблиц и выполнить столько DELETE-запросов, сколько таблиц
DELETE FROM table_1 WHERE type = 1;
...
DELETE FROM table_1 WHERE type = 105;
...
|
| |
|
|
|
|
|
|
|
для: cheops
(23.04.2012 в 19:38)
| |
DELETE FROM table_105 WHERE type = 1;
|
| |
|
|
|
|
|
|
|
для: Valick
(23.04.2012 в 20:03)
| | Да, конечно же :) | |
|
|
|
|
|
|
|
для: cheops
(23.04.2012 в 19:38)
| | Таблиц может быть очень много, сотни или даже под тысячу. | |
|
|
|
|
|
|
|
для: IIDeckaRII
(24.04.2012 в 17:21)
| | Коль скоро отказываетесь от реляционных отношений, и вместо одной таблицы используете сотни и тысячи однотипных, требуются сотни и тысячи однотипных запросов. Это цена отказа (ничего сделать нельзя, SQL компактный и удобный, только пока вы остаетесь в рамках реляционных отношений, за их границей вся работа ложится на вас). Можно, конечно, попробовать извернуться чистым SQL, написав процедуру, но на клиентском языке, вроде PHP это будет сильно проще и удобнее.
PS Вообще сейчас в MySQL есть секционирование, т.е. когда вы одну таблицу пилите на множеством мелких, но запросы к ним идут как к одной таблице. Однако, для этого нужна версия MySQL не ниже 5.1. | |
|
|
|
|
|
|
|
для: cheops
(24.04.2012 в 17:33)
| | А как быстрее будут выполняться запросы? В несколько небольших? Или в 1 большую, но с секционированием? | |
|
|
|
|
|
|
|
для: IIDeckaRII
(25.04.2012 в 07:36)
| | на ваш вопрос в принципе невозможно ответить, потому что ответ зависит от самих таблиц, их структуры и от запросов
_
лучше расскажите о каких объемах идет речь, и откройте секрет, что в этих таблицах и почему их так много | |
|
|
|
|
|
|
|
для: Valick
(25.04.2012 в 07:57)
| | Это чаты сообществ пользователей. Соответствеено по 2 таблицы: с постами и с пользователями онлайн. Для каждого сообщества по 2 отдельных таблицы. | |
|
|
|
|
|
|
|
для: IIDeckaRII
(25.04.2012 в 17:09)
| | и сколько всего строк в таблице чата? | |
|
|
|
|
|
|
|
для: Valick
(25.04.2012 в 19:04)
| | Раз в сутки обновляется-> может быть от 0 до любого числа | |
|
|
|
|
|
|
|
для: IIDeckaRII
(26.04.2012 в 18:51)
| | достаточно странная организация чата | |
|
|
|
|
|
|
|
для: Valick
(26.04.2012 в 22:05)
| | Почему? Лучше хранить определенное количество записей? | |
|
|
|
|
|
|
|
для: IIDeckaRII
(27.04.2012 в 06:50)
| | ну наверно потому что это все таки чат, а не форум
обычно действительно хранят ограниченное количество строк (например 100)
полагаю, что огромное количество таблиц возникло из-за масштабирования кода изначально рассчитанного на один чат | |
|
|
|
|
|
|
|
для: Valick
(27.04.2012 в 07:33)
| | Нет, огромное количество таблиц возникло из-за того, что для каждого сообщества отдельный чат, т.к. делать выборку нескольких строк из ОБЩЕЙ таблицы- долго. | |
|
|
|
|
|
|
|
для: IIDeckaRII
(27.04.2012 в 13:07)
| | таблица создается при регистрации сообщества и существует независимо от того есть пользователи в чате или нет?
и за каждым сообществом закреплена определенная таблица, которая удаляется при удалении сообщества? | |
|
|
|
|
|
|
|
для: Valick
(27.04.2012 в 13:14)
| | Именно так | |
|
|
|
|
|
|
|
для: IIDeckaRII
(27.04.2012 в 14:58)
| | тогда чего вы хотите добиться одинаковыми запросом ко всем таблицам?
какова сущность удаления этой записи? | |
|
|
|
|
|
|
|
для: Valick
(27.04.2012 в 16:04)
| | Обновление списка онлайн, удаление устаревших | |
|
|
|
|
|
|
|
для: IIDeckaRII
(27.04.2012 в 20:21)
| | я так понимаю выборка списка онлайн происходит не каждый раз при выборке диалога
как у вас организован чат, фреймами или с использованием AJAX?
в любом случае выборка диалога имеет определённую периодичность, ни что не мешает сделать тоже самое для списка онлайн, только несколько увеличить паузу между запросами, от 1 до 5 минут и совместить удаление неактивных с этой выборкой
это несколько снизит нагрузку, по сравнению с перелопачиванием всех таблиц из которых многие вообще будут даже не активны
если хотите снизить нагрузку до минимума, то нужно копать в сторону http://dklab.ru/lib/dklab_realplexor/, но придется практически полностью переписывать код чата | |
|
|
|
|
|
|
|
для: Valick
(27.04.2012 в 21:30)
| | Мой проект рассчитан на мобильные телефоны, так что никакого JS нету | |
|
|
|
|
|
|
|
для: IIDeckaRII
(28.04.2012 в 09:29)
| | ну каким-то образом браузер должен опрашивать сервер на предмет появления новых постов в чате, в чем проблема сделать то же самое для списка онлайн? в конце концов тупо нарисовать кнопку "обновить онлайн"
еще как вариант сделать таблицу онлайн пользователей общую для всех и работать с ней
мне лично этот вариант нравиться больше всех | |
|
|
|
|
|
|
|
для: Valick
(28.04.2012 в 10:03)
| | Когда пользователь обновляет(вручную) страницу чата выбираем 10 последних сообщений(если не указана страница) | |
|
|
|
|
|
|
|
для: IIDeckaRII
(28.04.2012 в 10:14)
| | ну если обновление ручное, то ничего не мешает вместе с выборкой текста, сделать выборку онлайн пользователей, предварительно удалив устаревших (об этом я уже писал) | |
|
|
|
|
|
|
|
для: IIDeckaRII
(25.04.2012 в 07:36)
| | Одинаково, так как это фактически эквивалентные таблицы, просто в одном случае вы каждую таблицу обслуживаете самостоятельно, а в другом случае это на себя берет база данных. Многое так же зависит от того, как вы разобьете таблицы, по какому параметру.
Разбивка таблиц на части за ради скорости прием давно известный, многие движки их решают по разному, но почти у каждого есть штатные средства. У MyISAM, к сожалению, оно появилось сравнительно недавно. | |
|
|
|
|
|
|
|
для: IIDeckaRII
(23.04.2012 в 18:37)
| | Усть много-много таблиц (с одинаковой структурой)
это уже заставляет задуматься | |
|
|
|
|
|
|
|
для: Valick
(23.04.2012 в 20:05)
| | Бывает выгодно, особенно, если удалять нужно часто и много. | |
|
|
|