|
|
|
структура БД
|
|||
|---|---|---|---|
|
#18+
есть таблица - опись документов ------------------------------------ id_dokumenta - идентификатор документа id_tome - место нахождение в архиве id_dela - тоже самое тока в большем маштабе names - название документа vladelec - кто его создал text_dok - текст документа list - количество листов в документе list_n - лист с которого документ начинается list_k - лист который говорит где документ заканчивается ---------------------------------------------------- сейчас а таблице около 5 000 000 записей. понятно, что когда документ изменяется (ну скажем начинался с 100 странице, а заканчивался 120 и становится на 3 листа больше ) то место положение всех остальных документов этого тома приходится пересчитывать в среднем сейчас это занимает 20-30 минут (прирост документов постоянный ориентировачно 1 000 000 документов в год) вопрос в следующем уменьшется ли существенно время пересчет место положения документов, если разбить эту таблицу ну скажем каждый, том - отдельная таблица (ограничения тома 500 листов), или имеет смысл брать деление таблиц по делам (ограничения по количеству томов нет, ограничение томов тоже 500 листов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 12:49 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
1. По-моему достаточно полей list и list_n. list_k - или на нем может быть окончание одного документа и начало другого. 2. Не лучше ли хранить порядковый номер документа в деле и считать страницу начала при требовании конкретного документа? Тогда даже поле list необязательно. Как понимаю "приходится пересчитывать "= "приходится править записи в базе." Сделайте поля с номерами страниц расчетными - возможно будет быстрее. По созданию разных таблиц - вместо того, чтобы динамически создавать таблицы в базе и, соответственно, динамически генерить к ним запросы я бы лучше задумался о секционировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:11 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
M2k list_n - лист с которого документ начинается list_k - лист который говорит где документ заканчивается Зачем вам эти поля, можно полюбопытствовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:13 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
M2kесть таблица - опись документов ------------------------------------ id_dokumenta - идентификатор документа id_tome - место нахождение в архиве id_dela - тоже самое тока в большем маштабе names - название документа vladelec - кто его создал text_dok - текст документа list - количество листов в документе list_n - лист с которого документ начинается list_k - лист который говорит где документ заканчивается ---------------------------------------------------- сейчас а таблице около 5 000 000 записей. понятно, что когда документ изменяется (ну скажем начинался с 100 странице, а заканчивался 120 и становится на 3 листа больше ) то место положение всех остальных документов этого тома приходится пересчитывать в среднем сейчас это занимает 20-30 минут (прирост документов постоянный ориентировачно 1 000 000 документов в год) вопрос в следующем уменьшется ли существенно время пересчет место положения документов, если разбить эту таблицу ну скажем каждый, том - отдельная таблица (ограничения тома 500 листов), или имеет смысл брать деление таблиц по делам (ограничения по количеству томов нет, ограничение томов тоже 500 листов) почетче картину можно? "лист с которого документ начинается" - не знаю таких типов данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:26 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
EC10401. По-моему достаточно полей list и list_n. list_k - или на нем может быть окончание одного документа и начало другого. 2. Не лучше ли хранить порядковый номер документа в деле и считать страницу начала при требовании конкретного документа? Тогда даже поле list необязательно. Как понимаю "приходится пересчитывать "= "приходится править записи в базе." Сделайте поля с номерами страниц расчетными - возможно будет быстрее. По созданию разных таблиц - вместо того, чтобы динамически создавать таблицы в базе и, соответственно, динамически генерить к ним запросы я бы лучше задумался о секционировании. list_n. list_k нужны так как при изяти документа номерация остальных, должна сохранится, она пересчитывается тока при изменении документа (это делает тригер) поле list - служит для статистики и контроля что касается привязок то сейчас сделано так (есть 3 таблицы с привязками 1 ко многим (дело - том - документ )) в деле - список всх дел и ключи к ним в томе привязка к делу и список всех томов по всем делам , а в документ список всех документов с привязкой по делу и тому вот я и спрашиваю что лучше хранить 1 маленькую 1 среднюю и 1 большую таблицу как сейчас или имеет смысл разбть большую таблицу на множество маленьких которые соответсвуют томам (тоесть ограничивается табличка 500 листами и затем по мере надобности генерится новая ) ? или разбить ее на большего размера по делам тоесть таблицы соответсвуют делам и хранят документы водящии тока в 1 дело ? во втором случии мы имеем количестов таблиц соответствующее томам которых очень много, а в третьем случии мы имеем меньше таблиц соответствующие делам что будет быстрее работать и удобнее хранить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 14:40 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
_DocSerzh почетче картину можно? "лист с которого документ начинается" - не знаю таких типов данных это не тип данных а описание столбца - тоесть то для чего он служит а тип там стоит ( int ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 14:46 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
Я понимаю, что для программиста русская грамматика не критична, но все таки читать Ваши посты неприятно M2k list_n. list_k нужны так как при изяти документа номерация остальных, должна сохранится, она пересчитывается тока при изменении документа (это делает тригер) Что значит пересчитывается? Изменяются значения полей list_n и list_k? Выложите типы всех полей в таблице документов и индексы, которые на этой таблице есть M2k поле list - служит для статистики и контроля Какую статистику Вы собираете и что контролируете? M2k вот я и спрашиваю что лучше хранить 1 маленькую 1 среднюю и 1 большую таблицу как сейчас или имеет смысл разбть большую таблицу на множество маленьких что будет быстрее работать и удобнее хранить? Вопрос удобства как вопрос вкуса - кому как. По моему мнению удобнее как сейчас. По скорости - скорее всего будет быстрее несколько маленьких таблиц, однако при неразумном их создании, неграмотном построении запросов к этим таблицам и т.п. вы можете потерять в скорости по сравнению с большой секционированной таблицей. По имеющейся информации повторяю - вам нужен номер документа в деле и количество листов. Пересчитывать номера листов в триггере на таблице в 5 млн. записей НЕРАЗУМНО! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 16:07 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
EC1040Я понимаю, что для программиста русская грамматика не критична, но все таки читать Ваши посты неприятно за граматику приношу извинения, надеюсь я не много доставил неприятностей когда вы читали мою ахинею ----------------------------- Что значит пересчитывается? Изменяются значения полей list_n и list_k? Выложите типы всех полей в таблице документов и индексы, которые на этой таблице есть ------------------------------ 1.да эти значения меняются, в том случии если документ меняется (тоесть меняется колличество листов в документе), если документ просто изымается то поля остаются такими как есть 2.по поводу контроля это поле нужно для контроля нахождения документа в томе, так как длина тома ограничена количеством листо, то по этому полю сейчас расчитывается в каком томе должен находится документ и 1 и 2-ю задачу выполняют тригеры и хранимые процедуры не спрашивай по чему так (тут замешана большая политика руководства и повлиять на нее не в моих силах) (эта база задумывалась как маленькая картотека и никто не расчитывал, что ей начнут пользоватся в канторе) о тома, что пересчитывать никуда не годится, я и сам знаю, поэтому и спрашивал насчет выхода. в качестве моей идеи было разбить большую таблицу на много маленьких и обрабатывать уже их (тока пока не знаю, что лучше очень много маленьких таблиц (томов) и генерация их по мере появления новых томов или всетаки отталкиватся от колличества дел и заводить таблицы по колличеству дел в числовом варианте выглядит это так - дела сейчас 58 869 и заводятся новые редко, а вот томов ну если примерно, то в кажом деле - томов штук 5 точно есть , а может и большеи и заводятся они в месяц по 3-4, правда не во всех делах ) что касается секционирования то я - сейча читаю доки об этом звере попробую сделать 2 варианта посмотрим что выйдет если есть какие нибудь еще предложения или варианты буду рад их выслушать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 17:43 |
|
||
|
структура БД
|
|||
|---|---|---|---|
|
#18+
Что-то я не совсем понял. 58000 дел по 5 томов в каждом, т.е. ~300000 томов не более 500 листов в каждом томе если на таблице документов есть индекс по id_tome и никаких других нет, то Код: plaintext Сколько пользователей, насколько часто изменяются данные. Уже звучало, что хорошо бы индексы и типы полей. Версию сервера и какие нибудь данные о производительности машины. Кроме того - неужели все эти 58000 дел в работе? Это сколько же человек в организации? Как насчет выведения дел в архив? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 15:30 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=105&tid=1543944]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
60ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 319ms |

| 0 / 0 |
