powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос по структуре базы
21 сообщений из 21, страница 1 из 1
Вопрос по структуре базы
    #34215543
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
У меня есть вопрос по структуре таблиц в БД. Может сможете подсказать лучшее решение...
База данных - DB2 8.2, под Win32.

Есть входящиее в некоторую программу сообщения. Каждое сообщения имееют свой номер, в тектовом формате. Размер 36 букофф. Кроме того сообщение содержит в себе куч другой информации, в том числе и приатаченые файлы -они(файлы) кладуться в ДБ как БЛОБы. Основная задача это варехаусинг этих сообщений, но так же в процессе обработки группы сообщений (несколько подряд приходящих сообщений могут составлять группу, которые обрабатываются в одной транзакции) происходит обращение к БД за информацией о уже обработанных ранее в этой транзакции сообщениях. Внизу придуманная мной часть структуры БД в упрощенном виде.

В первую таблицу кладется приходящий ИД, и авторматом генерируется соответствующий ему ИД, но уже в БИГИНТ, затем он выбирается и работа с остальными таблицами ведется уже через это БИГИНТ. Я сделал эту таблицу, исходя из тех соображений, что поиск по ней будет происходить быстрее, нежели если бы я объеденил эту таблицу и таблицу ARCHMSG. Вот тут я ошибаюсь или нет?

CREATE TABLE "MSG2ARCH" (
"MSG_ID" CHAR(36) NOT NULL ,
"ARCH_MSG_ID" BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY
)
ALTER TABLE "MSG2ARCH"
ADD CONSTRAINT "CC1159525283343" PRIMARY KEY
("MSG_ID");

Вторая таблица хранит детали сообщения. Т.е. получив БИГИНТ ИД я вставляю его в эту таблицу, и затем заполняю остальные поля.
CREATE TABLE "ARCHMSG" (
"ARCH_MSG_ID" BIGINT NOT NULL ,
"GROUP_ID" CHAR(50) ,
"FROM" VARCHAR(255) NOT NULL ,
"SUBJECT" VARCHAR(255) ,
"PUT_TIME" TIMESTAMP NOT NULL WITH DEFAULT CURRENT TIMESTAMP ,
"TEXT" CLOB(104857600) LOGGED COMPACT )

ALTER TABLE "ARCHMSG"
ADD CONSTRAINT "CC1159525782374" PRIMARY KEY
("ARCH_MSG_ID");

Есть еще таблицы, которые хранят ARCH_MSG_ID и ссылаются на него.
Как я уже сказал выше, я не совсем уверен, что нужно было разносить эти две таблицы. Но с другой стороны мне кажется что выборка из MSG2ARCH по MSG_ID будет быстрее когда там всего, нежели если бы эти таблицы были объеденены.

Заранее спасибо за любую информацию!
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34215553
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить, что записей будет много. Т.е. ожидается поток 1 сообщение в минуту.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34216874
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogorЗабыл добавить, что записей будет много. Т.е. ожидается поток 1 сообщение в минуту. Это "много" ?
60*24*365=525600 шт. за год...
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34217985
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну конечно смотря с чем сравнивать... Вообще по ТЗ нагрузка должна быть такая: Количество сообщений размером 100 кб, обрабатываемых центральным узлом в течение суток не менее 100 тысяч. Так что я сообщил инфу по текущей ситуации на опытном участке, и наверное поскромничал... но наверное это сути дела не меняет. Вот только я не понял, я задал слишком дурацкий вопрос, или слишком сложный... что никто ничего не ответил?
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218077
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogorВот только я не понял, я задал слишком дурацкий вопрос, или слишком сложный... что никто ничего не ответил?
Скорее - первое :-).
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218128
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Rin@t: Раз "Скорее" значит сам не уверен... а когда не уверен, то не гони.

А вообще похоже, тут многие наверное сразу родились со знанием арихтектур БД, нормализации и завышенным самомнением... Я наверное вопрос и задал, чтобы если я не прав, чтобы меня поправили...
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218220
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogor2Rin@t: Раз "Скорее" значит сам не уверен... а когда не уверен, то не гони.
"Скорее" - означает тонкий намёк. Неуверенность-то исходит от Вас. Pardon :-).

kogorА вообще похоже, тут многие наверное сразу родились со знанием арихтектур БД, нормализации и завышенным самомнением... Я наверное вопрос и задал, чтобы если я не прав, чтобы меня поправили...
Поправляю. Нарисуйте себе БД (или её часть) в виде схемы (с полями, связями) и тогда сами поймете: что лишнее, а что нет?
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218496
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно мне следовало сразу вставить картинку со структурой, но мне казалось, что вопрос не затрагивает остальной структуры базы. К сожалению Визио не отображает типы полей, но наверное они и не важны в данный момент. Скажу только, что все ПК - БИГИНТ, за исключением таблицы ARCH2MSG, где MSG_ID это char(36)
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218502
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, структура в этом файле.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218941
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogor,
если исходить из первого поста, просмотрев скрипты CREATE TABLE, то таблица MSG2ARCH содержит fk (ARCH_MSG_ID), с помощью которого она ссылается на ARCHMSG. А на схеме указано наоборот.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34218952
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схему я немного перекроил. Немного неаккуратно нарисовал, но, надеюсь, прояснит проблему.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34220122
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае разделять таблицы в надежде, что из меньшей таблицы будут быстрее выборки - я бы не стал. Во первых, в принципе выигрыш сомнителен и зависит от используемой БД, а во вторых, всегда можно построить покрывающий индекс для этой пары полей, что заведомо даст не худшую производительность и не будет затрагивать структуру системы.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34220149
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже не стал бы. Порядок таблицы невелик. Но... нам не известно развите проекта в будущем :-).
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34220215
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также как неизвестна и структура того самого 36 буквенного номера. Может быть, там полная белиберда и есть резон использовать полностью синтетический ключ. Может быть, у него чёткая структура и имеет смысл распарсить его и разложить по атомарным полям в таблице, при необходимости комбинируя обратно. А может быть, стоит хранить его целиком, кластеризуя по нему таблицу.

Уж простите, что вмешиваюсь, хоть DB2 в глаза не видел, но мне кажется, эти соображения не зависят от конкретной БД.)
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34220347
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlУж простите, что вмешиваюсь, хоть DB2 в глаза не видел, но мне кажется, эти соображения не зависят от конкретной БД.)
Абсолютно верно. Логическое проектирование БД не зависит от используемой СУБД.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34221998
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем ответившим.
2DocAl: в поле MSG_ID будет храниться подобная строка: 414d51205344535f42524b5f514d2020f27d8f4520001a04 Кстати мне по ней надо будет делать поиск на сравнение и я думаю может лучше использовать не чар а блоб? По какому типу столбца будет поиск производится быстрее? Мне казалось что CHAR будет работать быстрее чем блоб, поэтому был выбран тип CHAR.
Как я писал выше, по ТЗ должно быть порядка 100 тысяч записей в сутки. По моему это достаточно большая нагрузка. Если не трудно, можно в двух словах тогда сказать в каком направлении двигаться, чтобы сделать данную структуру более оптимизированной для быстродействия или может кто найдет время нарисовать исходя из моей схемы что-то более правильное?
Но первый шаг к более правильной модели, насколько я понимаю, это объеденить таблицы ARCHMSG и MSG2ARCH?
Заранее всем спасибо!
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34222066
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogorСпасибо всем ответившим.
Но первый шаг к более правильной модели, насколько я понимаю, это объеденить таблицы ARCHMSG и MSG2ARCH?
Да. Обрати внимание на мой знак "?" . Если это связь 1:1 между ARCHMSG и DESTINATION, то и их можно объединить. Телепатируя, подозреваю, что не так. Тогда ARCH_MSG_ID - вторичный ключ, необходимо добавить первичный ключ.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34222239
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да правильно, в одном сообщении может быть несколько направлений, таблица DESTINATIONS как раз предназначена чтобы хранить все направления для маршрутизации сообщения. На рисунке не правильно нарисовал :( - естественно ARCH_MSG_ID в таблице DESTINATIONS должен быть внешним ключом.
А вообще я конечно получил совет - объеденить таблицы, но я не понял почему? Разве поиск в таблице (по полю MSG_ID, который имеет тип CHAR) которая содержит меньше столбцов, причем оба столбца имеют фиксированную размерность, не будет происходить быстрее, чем поиск в большой таблице (ARCHMSG) с множеством не фиксированных полей? К тому же количество записей я считаю достаточно большое.
Ну и как все-таки быть с типом полей? Что лучше использовать в данном случае CHAR или BLOB?
Дело в том, что база эта будет крутиться под ДБ2 в 64битном режиме, под AIX 64bit на рSeries, поэтому я и пытаюсь понять есть ли какие способы выиграть в производительности.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34222290
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogorА вообще я конечно получил совет - объеденить таблицы, но я не понял почему? Разве поиск в таблице (по полю MSG_ID, который имеет тип CHAR) которая содержит меньше столбцов, причем оба столбца имеют фиксированную размерность, не будет происходить быстрее, чем поиск в большой таблице (ARCHMSG) с множеством не фиксированных полей?
Порядок отношения ARCHMSG после объединения с ARCH2MSG невелик, поэтому никаких особых преимуществ по извлечению данных не получишь. Если сомневаешься, заполни обе таблицы и проведи эскперимент.

kogorНу и как все-таки быть с типом полей? Что лучше использовать в данном случае CHAR или BLOB?
CHAR, это же не двоичная информация.
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34223218
kogor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня есть класс который конвертирует блоб в чар. Т.е.на входе имеется поле MSG_ID (тип БЛОБ)=414d51205344535f42524b5f514d2020f27d8f4520001a04 После конвертации я получаю строку MSG_ID_CHAR = h'414d51205344535f42524b5f514d2020f27d8f4520001a04', так что я могу сохранять этот MSG_ID как чар в базе, и искать уже по нему. Насколько я понимаю, лучше использовать CHAR так как индекс по блобу не строится? Или я ошибаюсь?
...
Рейтинг: 0 / 0
Вопрос по структуре базы
    #34223251
Фотография Rin@t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogorНасколько я понимаю, лучше использовать CHAR...
Да.
kogor...так как индекс по блобу не строится?
Это было бы круто :-).
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос по структуре базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]