Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2016, 01:48   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию вопрос о БД

Здравствуйте. Меня интересует, как хранится текст переменной длины в базах данных? К примеру в том же мускуле.

Я догадываюсь что полям отдается заранее определенное кол-во байт, таким образом можно менять данные полей в файле без необходимости целиком перезаписывать файл. Это вполне норм для мелких полей, типа строк, к примеру 256 байт выделил и норм. Но как быть в случае с большим текстом, который скажем на форумах пишут? Если один текст 10 кб весом, а другой 1 кб, не думаю что выгодно создавать поля по 10 кб весом под каждый пост, но тогда если поле имеет переменный размер, то при сохранении текста придется каждый раз перезаписывать файл целиком? Ведь если сообщение решили отредактировать, оно стало длиннее, и надо сдвинуть данные идущие после этого сообщения, а это значит перезаписать файл, вместо изменения только одного поля.
Артэс вне форума Ответить с цитированием
Старый 29.10.2016, 09:47   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

отдельное хранилище (или специально выделенная область файла) для объектов переменных длин.
в основной ссылка фиксированной длины (смещение { +длина} { + ...} ) на данное хранилище.
изменение атрибута = новая запись в хранилище + изменение ссылки.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.10.2016, 09:50   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

какой файл? о чем вы
большие тексты в поле формата TEXT
пример хранения текста переменной величины например {"len":100500,"text":"тут 100500 символов текста......"}
ADSoft вне форума Ответить с цитированием
Старый 29.10.2016, 10:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ADSoft, Вы уверены, что ВНУТРИ БД хранится именно так, как Вы указали?!
очень сильно соменваюсь.
в принципе я согласен с мнением evg_m
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.10.2016, 16:34   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

нет конечно.... так для понимания лишь
но похожий принцип записи данных был в давно забытой txtSQL базе
ADSoft вне форума Ответить с цитированием
Старый 30.10.2016, 18:34   #6
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Т.е. получается большой текст переменной длины хранится в отдельном файле базы данных? Просто что если объем текстов большой, много сообщений, скажем файл с этими сообщениями на 2-3 МБ, и если решили изменить 1 сообщение сделав его длиннее, а оно оказалось в начале файла базы данных.. весь файл 2-3 МБ будет перезаписываться целиком? Это может оказаться довольно затратно и будут небольшие задержки в отклике.. а что если 20-30 МБ
Артэс вне форума Ответить с цитированием
Старый 30.10.2016, 19:27   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А есть другой способ? Умозрительно можно два варианта представить перезаписи blob-поля при увеличении его длины. Целиком в новую область в файле, старая помечается как свободная и, возможно, будет использована для записи данных подходящего размера. А может и нет, а только при бэкапе и ресторе такие дырки исчезнут. Или при выполнении какого-то оптимизатора, если таковой есть для СУБД. Второй вариант - на старое место записывается кусок blob-поля со ссылкой на область, в которую запишется остаток. В любом случае полная перезапись blob-поля, даже если его длина и не поменялась. Поэтому и делают ограничения на длину вложений. Второй вариант кстати для чтения хуже
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.11.2016, 00:15   #8
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Хм, довольно интересные варианты, особенно первый, когда берется новая область а старая помечается как пустая, надо будет взять на заметку такое. Просто я задумался о хранении длинных сообщений в файлах, и эти сообщения могут меняться, потому и интересуют варианты их хранения и т.п.
Артэс вне форума Ответить с цитированием
Старый 06.11.2016, 00:32   #9
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

по разному делается
come-on вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по с++ Artiomtb Помощь студентам 0 17.11.2011 19:10
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10