Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Идеология взаимодействия страниц с БД
 
 автор: Владимир55   (30.01.2009 в 15:48)   письмо автору
 
 

Через три года обитания на этом форуме до меня стало доходить, что информацию все же лучше хранить в базе, а не в текстовых файлах. Хотя мне об этом здесь говорили раз сто, если не больше...

А вопрос сейчас вот какой: есть ли смысл делать базу в виде нескольких таблиц небольшого размера, вызываемых независимо друг от друга, или лучше иметь одну объединящую их большую таблицу и каждый раз обращаться ко всей таблице сразу, использую при этом обращении лишь те столбцы, которые нужны в данный момент?

Например, пусть на сайте сто страниц, вызов каждой из которых требует обновления десяти данных (IP адеса посетителя, реферера, с которого он пришел, и т.п.), относящихся к этой странице Для этого можно создать сто таблиц по 10 строк и пусть каждая страница общается со своей таблицей.

А можно создать одну таблицу на 1000 столбцов и каждая страница будет использовать относящиеся к ней десять столбцов общей таблицы?

Как лучше?

Или всё едино?

  Ответить  
 
 автор: Axxil   (30.01.2009 в 15:59)   письмо автору
 
   для: Владимир55   (30.01.2009 в 15:48)
 

А для каждой страницы столбцы с данными уникальные будут?

  Ответить  
 
 автор: Владимир55   (30.01.2009 в 16:06)   письмо автору
 
   для: Axxil   (30.01.2009 в 15:59)
 

Номенклатура записей (столбцов) для всех страниц одинакова.
А сами записи - у каждой страницы свои.

  Ответить  
 
 автор: Axxil   (30.01.2009 в 16:17)   письмо автору
 
   для: Владимир55   (30.01.2009 в 16:06)
 

Тогда не надо не 100 таблиц по 10 столбцов ни, тем более, 1 таблицы на 1000.

Достаточно 2 таблицы. 1 таблица со страницами вида:

page_id   page_name


2 таблица уже с нужными столбцами и ключом связи с первой таблицей.

record_id    ip  host  referrer  ...  page_id


где page_id есть ключ свзязи.

Всё, теперь забиваете все свои страницы в 1 таблицу и им будут присвоены уникальные ключи page_id, по которым из второй таблицы можно будет осуществлять выборку.

  Ответить  
 
 автор: Владимир55   (30.01.2009 в 16:33)   письмо автору
 
   для: Axxil   (30.01.2009 в 16:17)
 

Спасибо, Axxil, это интересный прием!

Но хочу ещё вот что уточнить.

Если предположить, что сайт состоит из ста страниц по десять фиксируемых параметров для каждой страицы, и каждая страница будет просмотрена тысячу раз, то получаем первую таблицу
page_id   page_name 
из ста строк, и вторую таблицу
record_id    ip  host  referrer  ...  page_id 
из 11 столбцов и ста тысяч строк.

Другой вариант - сто таблиц по десять столбцов, и в каждой из них образуется тысяча строк.

Третий вариант - одна таблица на тысячу столбцов, содержащая тысячу строк.

У какого варианта преимущество?

И в чем?

  Ответить  
 
 автор: Axxil   (30.01.2009 в 16:50)   письмо автору
 
   для: Владимир55   (30.01.2009 в 16:33)
 

Скорость выборки, по 1000 строк в случае 100 таблиц по 10 столбцов будет, конечно, выше.
Но не настолько, чтобы жертвовать здравым смыслом.

Если например понадобится добавить ещё одну страницу, то вместо того, чтобы добавить одну строку в таблицу страниц, придётся добавлять в базу новую таблицу.

Так что 1 вариант (с 2-мя таблицами) однозначно предпочтительнее. В этом случае можно организовать периодическое сбрасывание части строк в архивные таблицы или файлы.

Т.е. например построили месячную статистику. Зачем вам теперь все данные лога? Их можно сбросить в архивный файл и удалить из БД.

  Ответить  
 
 автор: cheops   (30.01.2009 в 17:11)   письмо автору
 
   для: Владимир55   (30.01.2009 в 15:48)
 

Чем таблица меньше по объему тем лучше. Объединять данные в единую таблицу требуется лишь в специфическом случае - когда вы хотите избежать многотабличных запросов, которые достаточно ресурсоемки, так как зачастую формируется декартово произведение и получается какой-то несусветный объем данных.

PS Изначально лучше исходить из тактики "Разделяй и влавствуй", к объединению прибегая лишь после во время оптимизации.

>А можно создать одну таблицу на 1000 столбцов и каждая страница будет использовать
>относящиеся к ней десять столбцов общей таблицы?
Нет, тут как раз не разумно использовать 1000 столбцов. Столбцов вообще не должно быть больше 40 - если получается больше, следует задуматься о том, как бы эти столбцы превратить в строки. Строк у вас может быть 1000, а столбцов должно быть 10, коль скоро вы обновляете 10 параметров. Таблиц 2-3 штуки под такую задачу разумно завести.

  Ответить  
 
 автор: Владимир55   (30.01.2009 в 17:26)   письмо автору
 
   для: cheops   (30.01.2009 в 17:11)
 

Спасибо, со столбцами дело проясняется!

А что можно сказать относительно разумного количества строк?

Тысяча, сто тысяч, миллон строк - есть какой-то предел, выше которого нужно принимать меры для сокращения таблицы (путем архивации или иначе)?

  Ответить  
 
 автор: Eugene77   (30.01.2009 в 18:04)   письмо автору
 
   для: Владимир55   (30.01.2009 в 17:26)
 

>
>А что можно сказать относительно разумного количества строк?
>
300М - если больше раздувать таблицу, то начнёт заметно замедлятся выборка, но не очень.
А число строк при этом не так уж влияет. По крайней мере 30000 строк не проблема.
С ещё большими объёмами не сталкивался.

  Ответить  
 
 автор: cheops   (31.01.2009 в 00:05)   письмо автору
 
   для: Владимир55   (30.01.2009 в 17:26)
 

Присоединюсь к Eugene77 - все-равно сколько строк, производительность будет определяться не их количеством, а объемом таблицы в мегабайтах - чем больше объем, тем медленее будет обрабатываться такая таблица.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования