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

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

25 ответов

91 просмотр

В 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
Хочу понять как происходит вытаскивание данных из ...

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

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

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

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
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
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
У меня задача: написать брокер сообщений. Очереди и потребители. Очереди поддерживают приоритеты. Очередь отдает сообщения, только обработчикам с соответствующими характеристи...
Aleksandr Filippov
2
Решил тут попробовать embassy на bluepill. Все установил, собрал blink и успешно залил с помощью St link 2 китайского. Но после этого чип шиться перестал. На форумах прочел, ч...
Lukutin R2AJP
6
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Карта сайта