|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2016, 01:48 | #1 |
Форумчанин
Регистрация: 05.06.2007
Сообщений: 529
|
вопрос о БД
Здравствуйте. Меня интересует, как хранится текст переменной длины в базах данных? К примеру в том же мускуле.
Я догадываюсь что полям отдается заранее определенное кол-во байт, таким образом можно менять данные полей в файле без необходимости целиком перезаписывать файл. Это вполне норм для мелких полей, типа строк, к примеру 256 байт выделил и норм. Но как быть в случае с большим текстом, который скажем на форумах пишут? Если один текст 10 кб весом, а другой 1 кб, не думаю что выгодно создавать поля по 10 кб весом под каждый пост, но тогда если поле имеет переменный размер, то при сохранении текста придется каждый раз перезаписывать файл целиком? Ведь если сообщение решили отредактировать, оно стало длиннее, и надо сдвинуть данные идущие после этого сообщения, а это значит перезаписать файл, вместо изменения только одного поля. |
29.10.2016, 09:47 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
отдельное хранилище (или специально выделенная область файла) для объектов переменных длин.
в основной ссылка фиксированной длины (смещение { +длина} { + ...} ) на данное хранилище. изменение атрибута = новая запись в хранилище + изменение ссылки.
программа — запись алгоритма на языке понятном транслятору
|
29.10.2016, 09:50 | #3 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,179
|
какой файл? о чем вы
большие тексты в поле формата TEXT пример хранения текста переменной величины например {"len":100500,"text":"тут 100500 символов текста......"} |
29.10.2016, 10:15 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ADSoft, Вы уверены, что ВНУТРИ БД хранится именно так, как Вы указали?!
очень сильно соменваюсь. в принципе я согласен с мнением evg_m |
29.10.2016, 16:34 | #5 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,179
|
нет конечно.... так для понимания лишь
но похожий принцип записи данных был в давно забытой txtSQL базе |
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 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
по разному делается
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по с++ | 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 |