|
|
|
| Через три года обитания на этом форуме до меня стало доходить, что информацию все же лучше хранить в базе, а не в текстовых файлах. Хотя мне об этом здесь говорили раз сто, если не больше...
А вопрос сейчас вот какой: есть ли смысл делать базу в виде нескольких таблиц небольшого размера, вызываемых независимо друг от друга, или лучше иметь одну объединящую их большую таблицу и каждый раз обращаться ко всей таблице сразу, использую при этом обращении лишь те столбцы, которые нужны в данный момент?
Например, пусть на сайте сто страниц, вызов каждой из которых требует обновления десяти данных (IP адеса посетителя, реферера, с которого он пришел, и т.п.), относящихся к этой странице Для этого можно создать сто таблиц по 10 строк и пусть каждая страница общается со своей таблицей.
А можно создать одну таблицу на 1000 столбцов и каждая страница будет использовать относящиеся к ней десять столбцов общей таблицы?
Как лучше?
Или всё едино? | |
|
|
|
|
|
|
|
для: Владимир55
(30.01.2009 в 15:48)
| | А для каждой страницы столбцы с данными уникальные будут? | |
|
|
|
|
|
|
|
для: Axxil
(30.01.2009 в 15:59)
| | Номенклатура записей (столбцов) для всех страниц одинакова.
А сами записи - у каждой страницы свои. | |
|
|
|
|
|
|
|
для: Владимир55
(30.01.2009 в 16:06)
| | Тогда не надо не 100 таблиц по 10 столбцов ни, тем более, 1 таблицы на 1000.
Достаточно 2 таблицы. 1 таблица со страницами вида:
2 таблица уже с нужными столбцами и ключом связи с первой таблицей.
record_id ip host referrer ... page_id
|
где page_id есть ключ свзязи.
Всё, теперь забиваете все свои страницы в 1 таблицу и им будут присвоены уникальные ключи page_id, по которым из второй таблицы можно будет осуществлять выборку. | |
|
|
|
|
|
|
|
для: Axxil
(30.01.2009 в 16:17)
| | Спасибо, Axxil, это интересный прием!
Но хочу ещё вот что уточнить.
Если предположить, что сайт состоит из ста страниц по десять фиксируемых параметров для каждой страицы, и каждая страница будет просмотрена тысячу раз, то получаем первую таблицу из ста строк, и вторую таблицу
record_id ip host referrer ... page_id
| из 11 столбцов и ста тысяч строк.
Другой вариант - сто таблиц по десять столбцов, и в каждой из них образуется тысяча строк.
Третий вариант - одна таблица на тысячу столбцов, содержащая тысячу строк.
У какого варианта преимущество?
И в чем? | |
|
|
|
|
|
|
|
для: Владимир55
(30.01.2009 в 16:33)
| | Скорость выборки, по 1000 строк в случае 100 таблиц по 10 столбцов будет, конечно, выше.
Но не настолько, чтобы жертвовать здравым смыслом.
Если например понадобится добавить ещё одну страницу, то вместо того, чтобы добавить одну строку в таблицу страниц, придётся добавлять в базу новую таблицу.
Так что 1 вариант (с 2-мя таблицами) однозначно предпочтительнее. В этом случае можно организовать периодическое сбрасывание части строк в архивные таблицы или файлы.
Т.е. например построили месячную статистику. Зачем вам теперь все данные лога? Их можно сбросить в архивный файл и удалить из БД. | |
|
|
|
|
|
|
|
для: Владимир55
(30.01.2009 в 15:48)
| | Чем таблица меньше по объему тем лучше. Объединять данные в единую таблицу требуется лишь в специфическом случае - когда вы хотите избежать многотабличных запросов, которые достаточно ресурсоемки, так как зачастую формируется декартово произведение и получается какой-то несусветный объем данных.
PS Изначально лучше исходить из тактики "Разделяй и влавствуй", к объединению прибегая лишь после во время оптимизации.
>А можно создать одну таблицу на 1000 столбцов и каждая страница будет использовать
>относящиеся к ней десять столбцов общей таблицы?
Нет, тут как раз не разумно использовать 1000 столбцов. Столбцов вообще не должно быть больше 40 - если получается больше, следует задуматься о том, как бы эти столбцы превратить в строки. Строк у вас может быть 1000, а столбцов должно быть 10, коль скоро вы обновляете 10 параметров. Таблиц 2-3 штуки под такую задачу разумно завести. | |
|
|
|
|
|
|
|
для: cheops
(30.01.2009 в 17:11)
| | Спасибо, со столбцами дело проясняется!
А что можно сказать относительно разумного количества строк?
Тысяча, сто тысяч, миллон строк - есть какой-то предел, выше которого нужно принимать меры для сокращения таблицы (путем архивации или иначе)? | |
|
|
|
|
|
|
|
для: Владимир55
(30.01.2009 в 17:26)
| | >
>А что можно сказать относительно разумного количества строк?
>
300М - если больше раздувать таблицу, то начнёт заметно замедлятся выборка, но не очень.
А число строк при этом не так уж влияет. По крайней мере 30000 строк не проблема.
С ещё большими объёмами не сталкивался. | |
|
|
|
|
|
|
|
для: Владимир55
(30.01.2009 в 17:26)
| | Присоединюсь к Eugene77 - все-равно сколько строк, производительность будет определяться не их количеством, а объемом таблицы в мегабайтах - чем больше объем, тем медленее будет обрабатываться такая таблица. | |
|
|
|