
Спустя 4 минуты, 22 секунды (5.06.2009 - 15:09) Joker написал(а):
А как вариант, сделать два поля, первое будет говорить, чтоб данные уже в архиве второе за какой год.
Спустя 10 минут, 25 секунд (5.06.2009 - 15:19) sergeiss написал(а):
Можно сделать, как Джокер сказал. Минус в том, что таблицы будут расти и расти. А это приведет к замедлению работы. Подчеркиваю, что я сознательно говорю про размер именно таблиц, а не всей БД.
Другой вариант - данные за определенный год переписывать в другую таблицу этой же БД. Тогда:
1. Не будет проблем с конфигурационными файлами.
2. Данные всегда доступны.
3. Если необходимо, можно легко и просто выбрать старые и новые данные одним запросом.
4. Единственный "минус" - надо отработать систему просмотра старых данных.
Другой вариант - данные за определенный год переписывать в другую таблицу этой же БД. Тогда:
1. Не будет проблем с конфигурационными файлами.
2. Данные всегда доступны.
3. Если необходимо, можно легко и просто выбрать старые и новые данные одним запросом.
4. Единственный "минус" - надо отработать систему просмотра старых данных.
Спустя 5 минут, 22 секунды (5.06.2009 - 15:25) Yulk написал(а):
Joker
Ну да, вроде бы так и надо сделать,я б и не сомневалась, если б задача ставилась в начале написания программы...А теперь получится в каждый запрос еще и год надо вставить, а их ооооочень много, очень много переделывать придется... может еще какой-нибудь способ? чтоб поменьше в коде менять?
Ну да, вроде бы так и надо сделать,я б и не сомневалась, если б задача ставилась в начале написания программы...А теперь получится в каждый запрос еще и год надо вставить, а их ооооочень много, очень много переделывать придется... может еще какой-нибудь способ? чтоб поменьше в коде менять?

Спустя 3 минуты, 56 секунд (5.06.2009 - 15:29) Yulk написал(а):
sergeiss
то есть создать например те же таблицы с префиксом 2009_ и туда все переписать? тогда чтоб поработать со старыми данными, надо будет уже к другим таблицам обращаться? опять менять запросы?
то есть создать например те же таблицы с префиксом 2009_ и туда все переписать? тогда чтоб поработать со старыми данными, надо будет уже к другим таблицам обращаться? опять менять запросы?
Спустя 14 минут, 9 секунд (5.06.2009 - 15:43) glock18 написал(а):
зачем менять запросы?
sergeiss же сказал
sergeiss же сказал
Цитата |
4. Единственный "минус" - надо отработать систему просмотра старых данных. |
Самый очевидный вариант - в запросе имя таблицы брать из (вычислять по) переменной. Соответственно, передаешь в функцию год, а она в зависимости от года уже гребет из нужной таблицы. И не надо ничего переписывать.
PS: такое ощущение возникает, что многие тут, когда видят новое слово, которые вывести надо или использовать в расчетах, уже планируют как они будут готовый код "копипастить". Не надо это. Все просто.
Спустя 2 минуты, 25 секунд (5.06.2009 - 15:45) Joker написал(а):
Нужно будет не год ставить а в запросах говорить чтоб обрабатывал только те данные которые не в архихе например
SQL |
WHERE `ahiv`='0' |
Но переделывать запросы полюбому придеться...
Но в варианте sergeiss придеться переделывать только апросы связаные с просмотром архива, а в моём же вообще все запросы скорее всего.
Спустя 1 минута, 17 секунд (5.06.2009 - 15:47) FatCat написал(а):
Вариант как на форуме Экслера не пойдет?
В поддиректории стоит копия движка и старая база с архивом. В рабочей директории рабочий движок с рабочей базой.
Я у себя пошел по пути раздельного хранения данных. Самое нагрузочное место базы - тексты сообщений в таблице сообщений. Сделал, чтобы большие сообщения хранились во внешнем файле, а в базе при этом пишется пустая ячейка. Когда пхп-сценарий видит пустую ячейку, он по айдишнику высчитывает имя файла и file_get_contents($file)... В результате имеем на этом форуме при более 100 000 сообщений (строк в таблице) размер таблицы сейчас всего 52.7 MB.
В поддиректории стоит копия движка и старая база с архивом. В рабочей директории рабочий движок с рабочей базой.
Я у себя пошел по пути раздельного хранения данных. Самое нагрузочное место базы - тексты сообщений в таблице сообщений. Сделал, чтобы большие сообщения хранились во внешнем файле, а в базе при этом пишется пустая ячейка. Когда пхп-сценарий видит пустую ячейку, он по айдишнику высчитывает имя файла и file_get_contents($file)... В результате имеем на этом форуме при более 100 000 сообщений (строк в таблице) размер таблицы сейчас всего 52.7 MB.
Спустя 3 минуты, 9 секунд (5.06.2009 - 15:50) Yulk написал(а):
glock18
спасибо за совет
а что значит "копипастить" ?
спасибо за совет

а что значит "копипастить" ?

Спустя 5 минут, 21 секунда (5.06.2009 - 15:55) Yulk написал(а):
Joker
ага, понятна идея... спасибо
FatCat
тоже вариант "для лентяев" - сделать копию движка, тоже об этом думала, показалось - совсем непрофессионально
оказывается так тоже делают...
С раздельным хранением данных как-то сложно, я все-таки еще не специалист...Это моя первая программа... Но спасибо, может когда-нибудь и до такого дойду
ага, понятна идея... спасибо

FatCat
тоже вариант "для лентяев" - сделать копию движка, тоже об этом думала, показалось - совсем непрофессионально

С раздельным хранением данных как-то сложно, я все-таки еще не специалист...Это моя первая программа... Но спасибо, может когда-нибудь и до такого дойду

Спустя 6 минут, 12 секунд (5.06.2009 - 16:01) glock18 написал(а):
Yulk
Пожалуйста
"Копипастить" - выполнять n-ое количество раз операции copy (Ctrl-C) и paste (Ctrl-V) с кодом. Обычно делают, если что-то похожее уже реализовано, и нужно сделать это еще раз. Только с двумя другими букИвками.
Пожалуйста

"Копипастить" - выполнять n-ое количество раз операции copy (Ctrl-C) и paste (Ctrl-V) с кодом. Обычно делают, если что-то похожее уже реализовано, и нужно сделать это еще раз. Только с двумя другими букИвками.
Цитата |
Но в варианте sergeiss придеться переделывать только апросы связаные с просмотром архива, а в моём же вообще все запросы скорее всего. |
Не знаю как вы, а я стараюсь всегда локализовать использование любых функций. В том числе, обращения к базе данных. Обычно если так делать, то здесь рефакторинг (добавление поля в необходимые запросы) будет состоять в изменении кода в 1-2 строках.
У меня привита непереносимость одинаковых кусков кода длиной от 3 строк

Спустя 19 минут, 21 секунда (5.06.2009 - 16:21) sergeiss написал(а):
Я тут перечитал, что написал насчет скорости работы и решил уточнить (дабы быть правильно понятым): какой объем БД? Это весьма существенно. Потому что если БД небольшая, то и замедление будет малозаметным.
Это когда БД измеряется десятками гигабайт, то ее уменьшение на десяток-другой гигов заметно улучшает скорости
При этом некоторые таблицы, наиболее большие, имеют объем в несколько гигов. Увеличение скорости (уменьшение времени обработки) видно, что называется, "невооруженным глазом".
Уточняю: я это по своему опыту говорю, а не из теории. Не далее как вчера чистил БД. Уменьшил ее на 15 гигов, осталось "всего" 28. Скорости выполнения запросов, связанных с наиболее большими таблицами, возросли заметно.
Это когда БД измеряется десятками гигабайт, то ее уменьшение на десяток-другой гигов заметно улучшает скорости

Уточняю: я это по своему опыту говорю, а не из теории. Не далее как вчера чистил БД. Уменьшил ее на 15 гигов, осталось "всего" 28. Скорости выполнения запросов, связанных с наиболее большими таблицами, возросли заметно.
Спустя 1 минута, 42 секунды (5.06.2009 - 16:22) FatCat написал(а):
Цитата (Yulk @ 5.06.2009 - 16:55) |
С раздельным хранением данных как-то сложно |
Не сложно. Сейчас покажу.
Текст сообщений хранится в таблице ibf_posts в текстовом поле post.
Везде, где есть селекты из таблицы ibf_posts, с последующим использованием $row['post'] добавляется вызов функции:
PHP |
if( strlen($row['post'])<3)$row['post'] = $std->extract_archived_post($row['pid'], "arc"); |
"arc" при вызове функции - это расширение файла.
Позволяет хранить в этих же директориях данные других таблиц с другими расширениями.
Сама функция довольно проста:
PHP |
function extract_archived_post($pid, $j_type) |
Теперь обратное действие: запись в файлы сообщений, чья длина больше 4000 символов:
Везде, где есть запись в ibf_posts (инсерты или апдейты), предварительно добавляется конструкция:
if(strlen($post)>4000)
PHP |
{ |
И сама функция:
PHP |
function create_archived_post($pid, $j_type, $txt) |