Как происходит запись и удаление данных в таблицу базы данных? Т.е. получается если создается новая таблица в БД, то при добавлении новых строк, они как в массиве добавляются в конец и у каждого свой уникальный идентификатор, как индекс, но если мы из середины таблицы удаляем строку, то строки, которые были ниже не сдвигаются на одну строку выше, а остаются на своих местах? И при добавлении новой строки сначала проверяется на пустые строки и если есть такие то туда и записывается новая строка, например в середину таблицы, откуда было удаление? я правильно понимаю или нет?Может статью подскажите где об этом почитать
В Postgre скорее всего так же, как в MS SQL, данные хранятся в страницах. Соответственно при удалении ничего не сдвигается, иначе пришлось бы перезаписывать все страницы.
Послушайте второй сезон подкаста https://t.me/tfeat, про устройство БД. Не реклама :)
Спасибо, тогда в связи с этим вопрос, при считывании данных как система определяет какая строка на оси времени была записана раньше, а какая позже? Эта информация закладывается в идентификатор как хэш функция и при считывании расшифровываете ее и сортирует в нужном порядке, например по дате?
ответ в выпуске 29 :)
Отлично, ещё раз спасибо!
СУБД вообще без разницы хронологический порядок записей. Особенно если это кластеризованная таблица.
Более того, по стандарту языка SQL, порядок вывода строк не определён без указания ORDER BY
а как происходит понимание какие данные были раньше записаны, какие позже?
Именно по этому он и не определен
например данные для формирования отчета по заказам
А причём здесь порядок кортежей в СУБД?
Это уже, извините планирование за Вами, какие Вы данные хотите в таблице хранить
Хочу понять как происходит вытаскивание данных из таблицы, если они записываются не в конец, а туда где есть свободное место и где заложены временные данные для сортировки и формирования списка данных по хронологии
Блин, данные выбираются выборкой при помощи языка SQL. Почитайте книги - их море
Это зависит от конкретного SQL-сервера, его версии и т.п., и вам знать не нужно, от слова совсем.
Если ВЫ добавите поле ДАННЫХ временное/порядковое и индекс к ним, то совершенно неважно, где физически кортежи находятся
понятно, спасибо
в каждом кластере есть счётчик транзакций, который и является мерилом времени для вопросов "раньше-позже". у каждой строки есть xmin -номер транзакции которая строку создала, xmax - номер транзакции которая строку удалила. и есть ещё битовая маска со всякими флагами. вот сервер на это смотрит, сраванивает эти значения с номером текущей транзакции и делает выводы
в загаловке каждой странице есть указатели на версии строк и указатели на свободное пространство, постгрес грубо говоря при обращени к табдице смотрит кка (то не важно как) читая эти страничные указатели и решает можно ли на эту страничку новую строку положить или нет
как бы было именно так поставлен вопрос "данные для сортировки и формирования списка данных по хронологии"
Обсуждают сегодня