72 похожих чатов

Подскажите, как лучше сделать? Есть таблица с большим количеством записей

о файлах. Буду делать агент, который проверяет наличие файла на своем месте и обновлять в таблице поле "дата-время последней проверки". При отсутствии файла будет вносится временная метка в поле "удален". Изредка будет возникать ситуация, когда файл, помеченный ранее как удаленный, снова будет найден на своем месте. Как лучше поступить с точки зрения скорости работы: для всех найденных файлов - обновлять одним запросом оба поля "дата-время последней проверки" и вносить Null в поле "удален" или, принимая во внимание то, что обнаружение на месте ранее удаленного файла - редкое событие предусмотреть отдельный запрос для сброса информации об удалении, а для всех файлов обновлять только одно поле?

24 ответов

31 просмотр

Учитывая, что возвращать удалённое планируется редко -- без разницы. (Немного зависит от СУБД, в каких-нибудь колоночных бывает смысл это оптимзировать. Но тожэ не во всех).

Alexander-Morozov Автор вопроса
Ilya Anfimov
Учитывая, что возвращать удалённое планируется ред...

А не получится так, что впустую заменяя Null на Null в 99.999% случаев я потрачу времени на замену двух полей больше чем на одно? (БД - MySQL.)

Alexander Morozov
А не получится так, что впустую заменяя Null на Nu...

Нет, ему всё равно. Точнее, разница в сотни тактов не будет измеримой.

Alexander-Morozov Автор вопроса
Ilya Anfimov
Нет, ему всё равно. Точнее, разница в сотни тактов...

Спасибо! Принимая во внимание то, что первый вариант еще и короче по размеру кода его и выберу.

Alexander Morozov
А не получится так, что впустую заменяя Null на Nu...

Всем классическим СУБД примерно всё равно -- они достают тапл для обновления цэликом, и потом цэликом его записывают. У некоторых есть оптимизацыи чтобы не бродить по индэксам и не трогать их если индэксируемое не сменилось -- но все сравнивают индэксированное значение до и после, им тожэ всё равно -- указано оно или нет.

Ilya Anfimov
Всем классическим СУБД примерно всё равно -- они д...

Пг перестраивать будет. В пг как раз надо учитывать что и как ты апдейтишь.

Ilya Anfimov
Нет.

А с какой версии пг научился не трогать Индексы поля которых не менялись?

alias cd='rm -rf'
Пг перестраивать будет. В пг как раз надо учитыват...

Сейчас pg не перестраивает если ни одно из индэксируемых полей не изменилось и на страницэ есть место для новой записи. И перестраивает если хоть одно изменилось. При этом изменение определяется побайтовым сравнением старого и нового полей тапла.

alias cd='rm -rf'
А с какой версии пг научился не трогать Индексы по...

В районе 12. Лень искать. В 12 оно ужэ было, в 9.6 не было. Читайте про HOT UPDATE.

alias cd='rm -rf'
А с какой версии пг научился не трогать Индексы по...

И да, неважно -- есть там HOT UPDATE или нет. В любом случае -- путь изменений абсолютно одинаков, заменишь ты нормального размера поле на то жэ значение или нет.

С точки зрения скорости это пока рано, предъяви несколько решений, я смогу сказать, что быстрее, а что медленнее

Ilya Anfimov
И да, неважно -- есть там HOT UPDATE или нет. В лю...

А это как то экспереминтально увидеть можно?

Alexander-Morozov Автор вопроса
Ilya Zviagin
С точки зрения скорости это пока рано, предъяви не...

1) update files set checkdate=sysdate(), deletedate=Null where path='Путь к файлу'; 2) update files set checkdate=sysdate() where path='Путь к файлу'; и отдельный блок для выявления восстановленных файлов.

Ilya Anfimov
Что именно из "этого"?

Увидеть хочу что не перестраиваются все Индексы при апдейт поля которое не в индексе.

alias cd='rm -rf'
Увидеть хочу что не перестраиваются все Индексы пр...

Ну, можэшь сформировать HOT UPDATE и посмотреть через pageinspect, что получилось.

alias cd='rm -rf'
О. Точна. Пасиб.

При этом смотреть есть некоторый смысл при открытой транзакцыи -- иначе через небольшое время по идее вакуум вычистит лишнее и из HOT CHAIN и из индэкса, так что отличить одно от другого не получится.

Alexander-Morozov Автор вопроса

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

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

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
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
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
Карта сайта