powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Экономная реализация отношения "многие ко многим"
13 сообщений из 13, страница 1 из 1
Экономная реализация отношения "многие ко многим"
    #32259567
NickKarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть проблема: надо реализовать отношение "многие ко многим" промеж двух таблиц, причем вопрос занимаемого на диске места очень жесткий (т.к. если каждая из связанных таблиц занимает по паре гигабайт, то сколько же будет занимать таблица, описывающая отношение (а заполнение ее довольно плотное, т.е. ее размер будет близок к произведению размеров связанных таблиц). А меня это совсем не устраивает. Нашел и Инете алгоритм хранения информации о связи на основе двоичного дерева, позволяющий экономить раз так в пять (при использовании SQL Server) но тогда все это довольно медленно работает (дерево надо еще в памяти построить, а дело это небыстрое и памяти немерянно жрет).
Теперь к сути: подскажите, кто знает, как еще можно поступить.
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32259670
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если действительно размер будет близок к произведению размеров связанных таблиц то может стоит подумать о хранении факта не связанности записей друг с другом?
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32259841
Jinn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 NickKarev

Будет лучше если опишешь проблему подробнее. Вполне возможно что есть некоторые решения.
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32262377
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>NickKarev
>ее размер будет близок к произведению размеров связанных таблиц

Врядли такое возможно, скорее произведению кол-ва записей связанных таблиц. При отношении "многие ко многим", в "третьей" таблице будет меньше полей, т.е.
1. id integer - не обязательно
2. id_ref1 integer
3. id_ref2 integer
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32262710
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-во поднял бучу... Ты построй эти 2 таблицы залей в них тестовых данных хоть тыщь на 100 - оцени размер, Поставь третью, сделай развязки - залей связи - оцени размер. Если первые 2 таблицы содержат много данных (полей), то таблица развязки будет не более 5-10 процентов места на диске кушать от первых двух максимум

Изучайте матчасть, господа. MS SQL - скорее всего размер страницы стандартный - 2К. ID пусть 4 байта занимает, для экономии - без синтетического ключа - 8 байт. В среднем каждая страница содержит ~ 2K - заголовок (байт 400, от сервера зависит и числа записей на странице - точно не помню) / 8байт. Итого ~ 200 тыщ записей на 2К. 5 блоков будет содержать около лимона записей? Смеешься что-ли? Это что-ли размер? Конечно могу немного наврать, писал навскидку. Открывай теперь любые курсы по внутренней архитекруре твоего любимого MS SQL и считай точно... Но уверяю тебя, не на том циклешься
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32266551
NickKarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Denis uskov: я это и имел в виду.
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32266586
NickKarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Jinn:
Дело тут в том, что пишу поисковую систему. Делать для нее свой формат хранилища лениво (поэтому и пользую SQLServer), но размер индекса в нынешнем состоянии не устраивает (он приближается к размеру проиндексированных документов). Получается, если хранить индекс в виде "ИД_Слова, ИД_Документа", то на каждый факт вхождения слова в документ получим как минимум 8 байт(+индексы по таблице+служебная информация), а это многовато. Кстати, можно уточнить задачу таким образом: вопрос "в каких документах попадается слово" возникает очень часто (все же поисковая система :)), а вот вопрос "какие слова содержит документ" - довольно редко (при обновлении индекса). Это может кое-что дать(не буду углубляться - все равно не очень помогло пока).
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32275250
Iva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Iva
Гость
Делать надо именоо так - "третью" таблицу, но я бы сделал две вещи: 1) для уменьшения размера индекса создать список стоп-слов, 2) поджать (архиваторм) сами ТЕКСТЫ - тут ты сэкономишь кучу места. И все будет ок - проверено. Далее можешь делать лексический анализ и сводить словоформы, но это уже нехилая по сложности задача.
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32275339
Yossarian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>вопрос "в каких документах попадается слово" возникает очень часто
>(все же поисковая система :)), а вот вопрос "какие слова содержит
>документ" - довольно редко

Ну тогда кластерный индекс.

Еще можно попробовать полнотекстовый поиск и вообще обойтись без индексов
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32278665
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще таблица связи не нужна.
Ставь полнотекстовый индекс и ищи по нему, только не через like.

В MySQL это организовано очень быстро, как и все остальное.
Механизм поиска настолько мощный и быстрый, что удивишься.
Как ты думаешь организованы поисковоки, а MySQL -дефакто для любых хостов.
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32279362
GoIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант достаточно простой и эффективный построение 1-й(или более, в зависимости от задачи и реальной необходимости) рекурсивной таблицы. Бо дерево в этом случае хорошо, но иногда просто влечет в потере времени на построение, ну и прочие причуды по своему обслуживанию. Для задач среднего уровня (когда обрабатываемых данных не слишком! большое количество, хотя:) сие для каждого свое), рекурсия позволяет достаточно эффектно выходить из положения
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32293535
NickKarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, я понимаю, что полнотекстовый поиск, встроенный в MySQL и SQL Server работает достаточно хорошо. Но мне надо решить задачу без хранения самих документов в СУБД (такова постановка задачи).
2GolV: Не мог бы ты поподробнее объяснить свою мысль?
...
Рейтинг: 0 / 0
Экономная реализация отношения "многие ко многим"
    #32293542
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2K - заголовок (байт 400, от сервера зависит и числа записей на странице - точно не помню) / 8байт. Итого ~ 200 тыщ
я конечно матчать не учил, а вот с маетматикой вроде проблем у меня не было :-)

не выйдет 200 тыщ если делить _2_ тыщщи на число больше единицы :-)
такчто не 200 тыщ записей а всего 200 на блок

Открывай теперь любые курсы по внутренней архитекруре твоего любимого MS SQL и считай точно...
да ладно, не напрягайся, все ошибаются :-)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Экономная реализация отношения "многие ко многим"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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