Всем привет! подскажите пожалуйста, есть вопрос по работе базы данных.

Как происходит запись и удаление данных в таблицу базы данных? Т.е. получается если создается новая таблица в БД, то при добавлении новых строк, они как в массиве добавляются в конец и у каждого свой уникальный идентификатор, как индекс, но если мы из середины таблицы удаляем строку, то строки, которые были ниже не сдвигаются на одну строку выше, а остаются на своих местах? И при добавлении новой строки сначала проверяется на пустые строки и если есть такие то туда и записывается новая строка, например в середину таблицы, откуда было удаление? я правильно понимаю или нет?Может статью подскажите где об этом почитать

25 ответов

96 просмотров

В Postgre скорее всего так же, как в MS SQL, данные хранятся в страницах. Соответственно при удалении ничего не сдвигается, иначе пришлось бы перезаписывать все страницы.

Послушайте второй сезон подкаста https://t.me/tfeat, про устройство БД. Не реклама :)

Pavel- Автор вопроса
Ara Slanov
В Postgre скорее всего так же, как в MS SQL, данны...

Спасибо, тогда в связи с этим вопрос, при считывании данных как система определяет какая строка на оси времени была записана раньше, а какая позже? Эта информация закладывается в идентификатор как хэш функция и при считывании расшифровываете ее и сортирует в нужном порядке, например по дате?

Pavel- Автор вопроса
Леонид Волканин
ответ в выпуске 29 :)

Отлично, ещё раз спасибо!

Pavel
Спасибо, тогда в связи с этим вопрос, при считыван...

СУБД вообще без разницы хронологический порядок записей. Особенно если это кластеризованная таблица.

Ara Slanov
СУБД вообще без разницы хронологический порядок за...

Более того, по стандарту языка SQL, порядок вывода строк не определён без указания ORDER BY

Pavel- Автор вопроса
Ara Slanov
СУБД вообще без разницы хронологический порядок за...

а как происходит понимание какие данные были раньше записаны, какие позже?

Pavel- Автор вопроса
АВ
А зачем?

например данные для формирования отчета по заказам

А причём здесь порядок кортежей в СУБД?

Pavel
например данные для формирования отчета по заказам

Это уже, извините планирование за Вами, какие Вы данные хотите в таблице хранить

Pavel- Автор вопроса
АВ
А причём здесь порядок кортежей в СУБД?

Хочу понять как происходит вытаскивание данных из таблицы, если они записываются не в конец, а туда где есть свободное место и где заложены временные данные для сортировки и формирования списка данных по хронологии

Pavel
Хочу понять как происходит вытаскивание данных из ...

Блин, данные выбираются выборкой при помощи языка SQL. Почитайте книги - их море

Pavel
Хочу понять как происходит вытаскивание данных из ...

Это зависит от конкретного SQL-сервера, его версии и т.п., и вам знать не нужно, от слова совсем.

Pavel
Хочу понять как происходит вытаскивание данных из ...

Если ВЫ добавите поле ДАННЫХ временное/порядковое и индекс к ним, то совершенно неважно, где физически кортежи находятся

Pavel
а как происходит понимание какие данные были раньш...

в каждом кластере есть счётчик транзакций, который и является мерилом времени для вопросов "раньше-позже". у каждой строки есть xmin -номер транзакции которая строку создала, xmax - номер транзакции которая строку удалила. и есть ещё битовая маска со всякими флагами. вот сервер на это смотрит, сраванивает эти значения с номером текущей транзакции и делает выводы

Pavel
Хочу понять как происходит вытаскивание данных из ...

в загаловке каждой странице есть указатели на версии строк и указатели на свободное пространство, постгрес грубо говоря при обращени к табдице смотрит кка (то не важно как) читая эти страничные указатели и решает можно ли на эту страничку новую строку положить или нет

Pavel
Хочу понять как происходит вытаскивание данных из ...

как бы было именно так поставлен вопрос "данные для сортировки и формирования списка данных по хронологии"

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта