|
|
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
Здраствуйте, господа... Решился наконец-то разобраться с БД. Возник такой вопросец по проектированию структуры БД. 1. Есть таблица tbl1 с полями field1-field100. Из них постоянная надобность в полях field1-field5, остальные поля нужны "когда как"/"от случая к случаю". Есть ли смысл разбить таблицу на две? Что это даст(какие плюсы, какие минусы)? 2. Есть таблица tbl2 c полями simpleField1-5 и полем достаточно громоздким(по содержимому) полем hugeBlobField. Даст ли что-нибудь выделение этого hugeBlobField в отдельную таблицу(в плане скорости)? 3. Не совсем по проектированию, но всё же: для таблицы из п.1(с сотней полей) есть ли разница в скорости для Код: plaintext Код: plaintext P.S. Понимаю, что вопросы глупые... потому не обижусь, если пнут в сторону какой-нибудь грамотной статьи/чтива по проектированию БД, но, желательно, чтобы это был не двух-томник войны и мира, а что-нибудь коротенькое(типа курса молодого бойца). FAQ смотрел, ссылок на чтиво не нашёл :(. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 19:02 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
имхо, советовать что-то конкретное имеет смысл только в рамках конкретной СУБД или даже конкретного движка (для MySQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 19:36 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
Вот даже как :). Т.е., если я правильно трактую Ваши слова, то при переходе с MySQL к, к примеру, Oracle(из-за увеличившейся нагрузки) придётся переделывать структуру БД, чтобы получить приемлемую производительность? Странно... мне казалось, что миграция с одной СУБД на другую - обычное дело... ну да ладно :). Что ж... тогда посоветуйте для MySQL, заодно, посоветуте пожалуйста, какой движок лучше :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 19:41 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
почитайте, например, тему с обсуждением хранения BLOB-ов в MySQL в движке InnoDB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 19:48 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
archimed7592при переходе с MySQL к, к примеру, Oracle(из-за увеличившейся нагрузки) придётся переделывать структуру БД, чтобы получить приемлемую производительность?Так вы фактически хотите не "переделать структуру БД", а изменить структуры физического хранения данных. А тут СУБД влияет очень сильно. Что-то советовать, не зная задачи, тоже смысла мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 19:53 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
miksoftЧто-то советовать, не зная задачи, тоже смысла мало. Задача: спроектировать структура БД и схему работы с ней так, чтобы это было наиболее оптимально и масштабируемо для ныне популярных СУБД(MySQL, MS SQL Server, PostgreSQL, etc.) :). Спасибо за ссылку, почитаю... Не посоветуете какого-нибудь чтива для начинающих DBA? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 20:19 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
Начинающим DBA было бы ой как неплохо полностью! реализовать пару-тройку проектов в разных областях. От анализа предметной области и постановки задачи через разработку и до внедрения и сопровождения. И штоб своими собственными лапками! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2008, 22:02 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительНачинающим DBA было бы ой как неплохо полностью! реализовать пару-тройку проектов в разных областях.Примерный список областей(для выбора) в студию! :) Программист-ЛюбительОт анализа предметной области и постановки задачи через разработку и до внедрения и сопровождения. И штоб своими собственными лапками! А чьими ж ещё лапками? :) Собственно говоря, сейчас я и занят проектом, только мала вероятность, что проект будет куда-то внедряться(ибо делается он с одной целью - научиться) и на него будет реальная нагрузка(к примеру, такая же интенсивная как на этот форум)... А хотелось бы сделать всё "по взрослому" :), чтобы проект был расчитан на приличную нагрузку... По части программной реализации проблем не будет, а вот части БД я пока dumb... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2008, 05:47 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
archimed7592 Странно... мне казалось, что миграция с одной СУБД на другую - обычное дело... ну да ладно :). Я искренне завидую Вашему оптимизму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2008, 09:30 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
drev , хотите сказать, что можно даже не заморачиваться с кросс-СУБД'овостью(слово то какое придумал :))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2008, 09:35 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
archimed75921. Есть таблица tbl1 с полями field1-field100. Из них постоянная надобность в полях field1-field5, остальные поля нужны "когда как"/"от случая к случаю". Есть ли смысл разбить таблицу на две? Что это даст(какие плюсы, какие минусы)? Смысл может быть, но чаще не особо присутствует. Может понизить нагрузку и повысить скорость, может наоборот. archimed75922. Есть таблица tbl2 c полями simpleField1-5 и полем достаточно громоздким(по содержимому) полем hugeBlobField. Даст ли что-нибудь выделение этого hugeBlobField в отдельную таблицу(в плане скорости)? В нормальной СУБД - вряд ли. В хреновой может и даст. Нормальные СУБД и так по умолчанию держат блобы отдельно, собственно еще dBase так поступал. archimed75923. Не совсем по проектированию, но всё же: для таблицы из п.1(с сотней полей) есть ли разница в скорости для Код: plaintext Код: plaintext Может не быть, может реально быть. Скажем, если по этим полям есть индекс, то второй запрос может вообще не читать таблицу, а воспользоваться index full scan. archimed7592Странно... мне казалось, что миграция с одной СУБД на другую - обычное дело... Для приложений уровня телефонного справочника Васи Пупкина. archimed7592drev, хотите сказать, что можно даже не заморачиваться с кросс-СУБД'овостью(слово то какое придумал :))? Нужно не заморачиваться. Если задача - сдать на права и перевезти 100кг груза из пункта А в пункт Б, то не стоит начинать с проектирования транспорта, способного одновременно быть КАМАЗом и мотороллером с прицепом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 02:33 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
archimed7592 drev , хотите сказать, что можно даже не заморачиваться с кросс-СУБД'овостью(слово то какое придумал :))? Это две большие разницы - поддержка разных баз данных и миграция из одной в другую. Первая имеет достаточное количество стратегий, некоторые из которых предполагают миграцию. Есть и другие, например PeopleSoft поддерживал для каждой базы отдельный модуль. А миграция - вещь достаточно тяжелая и практически всегда полуавтоматическая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2008, 07:52 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
имхо, если дело только в производительности, то вряд ли стоит так заморачиваться. Разница в скорости даже если и будет, то не настолько большая, чтобы юзиры смогли ее заметить, тем более что таблицы будут проиндексированы. зато тебе головняков добавится, вместо обычной выборки Код: plaintext придется городить всяких монстров типа Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2008, 23:01 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
drev , ну смотрите, есть, к примеру ADOdb(абстракция от специфики разных СУБД для PHP)... Есть аналогичные вещи для других ЯП... Смысл ими пользоваться, если всё равно придётся делать упор на конкретную СУБД? А если не делать упор, то, выходит нужно гадать на кофейной гуще... Или забыть про абстракцию уровня СУБД и делать абстракцию уровня доступа к данным, которую уже подгонять под каждую конкретную СУБД, вплоть до изменения набора таблиц, полей, связей, ХП and so on(для меня это равносильно самоубийтсву). Goffman , дело не столько в производительности, сколько в идеалогии... Я видел несколько реально существующих и процветающих проектов, структуру их БД и организацию работы с нею... Мне не понравилось хотя бы то, что одна таблица может содержать около 50 совершенно несвязанных полей(т.е. у меня первый порыв был разбить таблицы на более маленькии, чтобы было понятно их назначение, проще было вникать в общую картину и т.д.). Или как Вам такое: в таблицы, помимо несущих смысл полей добавляются поля, значение которых по сути можно получить join'ом и некоторым условием. Зачем добавили эти поля? Очевидно для повышения быстродействия(кэширование так сказать), но почему кэш не был вынесен в отдельную таблицу мне непонятно. Хотя... даже разработчики MySQL не имеют на этот счёт общего мнения :) 7.4.2. Make Your Data as Small as PossibleIn some circumstances, it can be beneficial to split into two a table that is scanned very often. This is especially true if it is a dynamic-format table and it is possible to use a smaller static format table that can be used to find the relevant rows when scanning the table. 7.2.20. Other Optimization TipsIt is normally not useful to split a table into different tables just because the rows become large. In accessing a row, the biggest performance hit is the disk seek needed to find the first byte of the row. After finding the data, most modern disks can read the entire row fast enough for most applications. The only cases where splitting up a table makes an appreciable difference is if it is a MyISAM table using dynamic row format that you can change to a fixed row size, or if you very often need to scan the table but do not need most of the columns. See Chapter 13, Storage Engines. С одной стороны хорошо когда данные фиксированной длины отделены от данных дин. размера(почему я изначально и спрашивал об отделении blob'ов), а с другой стороны дробить таблицу плохо, ибо самая дорогостоящая часть работы - это найти нужную строку в таблице... т.е. нужно как-то балансировать между этими двуми крайностями(стресс тесты делать или ещё как). И всё это актуально для конкретной СУБД и её конкретного движка. Печально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2008, 23:42 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
archimed7592есть, к примеру ADOdb(абстракция от специфики разных СУБД для PHP)... Есть аналогичные вещи для других ЯП... Смысл ими пользоваться Смысл ими пользоваться отсутствует. Это подгузники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2008, 23:43 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
имхо, не стоит искусственно усложнять простые вещи, процветающие проекты - чем не пример. но вот по поводу хранения блобов, тут лучше посмотреть рекомендации к СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2008, 00:05 |
|
||
|
Дробление таблицы на 2(3, 5, 10...)
|
|||
|---|---|---|---|
|
#18+
archimed7592 drev , ну смотрите, есть, к примеру ADOdb(абстракция от специфики разных СУБД для PHP)... Есть аналогичные вещи для других ЯП... Смысл ими пользоваться, если всё равно придётся делать упор на конкретную СУБД? А если не делать упор, то, выходит нужно гадать на кофейной гуще... Или забыть про абстракцию уровня СУБД и делать абстракцию уровня доступа к данным, которую уже подгонять под каждую конкретную СУБД, вплоть до изменения набора таблиц, полей, связей, ХП and so on(для меня это равносильно самоубийтсву). Т.е. база данных - одни данные? Без процедур, тригерров и т.д.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2008, 11:48 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35236899&tid=1543928]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
8ms |
get forum data: |
8ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 391ms |

| 0 / 0 |
