Файл, добавляют атомарный в UNIX?

Многостолбцовый индекс может использоваться для запросов, ссылающихся весь столбцы:

SELECT *
FROM TableName
WHERE Column1=1 AND Column2=2 AND Column3=3

Это может искаться непосредственно с помощью многостолбцового индекса. С другой стороны, самое большее один из индекса отдельного столбца может использоваться (это должно было бы искать все записи, имеющие Column1=1, и затем проверить Column2 и Column3 в каждом из тех).

99
задан Peter Cordes 25 July 2018 в 17:41
поделиться

2 ответа

Запись, размер которой меньше 'PIPE_BUF', должен быть атомарным. Это должно быть не менее 512 байт, хотя легко может быть больше (кажется, в Linux установлено значение 4096).

Предполагается, что вы говорите обо всех полностью совместимых с POSIX компонентах. Например, это неверно для NFS.

Но если вы пишете в файл журнала, который вы открыли в режиме 'O_APPEND', и сохраняете свои строки (включая новую строку) под байтами 'PIPE_BUF', у вас должно получиться несколько писателей в файл журнала без проблем с повреждением. Любые прерывания поступят до или после записи, а не посередине. Если вы хотите, чтобы целостность файла сохранялась после перезагрузки, вам также необходимо вызывать fsync (2) после каждой записи, но это ужасно для производительности.

Пояснение : прочтите комментарии и ответ Оз Соломона . Я не уверен, что O_APPEND должен иметь атомарность размера PIPE_BUF . Вполне возможно, что это просто то, как Linux реализовал write () , или это может быть связано с размерами блоков базовой файловой системы.

60
ответ дан 24 November 2019 в 05:05
поделиться

Вот что говорит стандарт: http://www.opengroup.org/onlinepubs/009695399/functions/pwrite.html .

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

16
ответ дан 24 November 2019 в 05:05
поделиться
Другие вопросы по тегам:

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