Симлинкинг (ln) быстрее, чем двигаться (mv)? - PullRequest
1 голос
/ 26 марта 2010

Когда мы создаем выпуски веб-программного обеспечения, мы подготавливаем выпуск во временном каталоге, а затем заменяем каталог выпуска только что подготовленным временным каталогом:

# Move and replace existing release directory.
mv /path/to/httpdocs /path/to/httpdocs.before
mv /path/to/$newReleaseName /path/to/httpdocs

В соответствии с этой схемой случается, что примерно с 1 из каждых 15 выпусков пользователь использовал файл в исходном каталоге выпусков точно в то время, когда выполняются вышеприведенные команды, и для этого пользователя возникает фатальная ошибка.

Мне интересно, если использование символьных ссылок, как описано ниже, будет значительно быстрее с точки зрения времени обработки, что поможет уменьшить вероятность этой проблемы:

# Remove and replace existing release symlink.
ln -sf /path/to/$newReleaseName path/to/httpdocs

Ответы [ 4 ]

6 голосов
/ 26 марта 2010

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

ln -s /path/to/newrelease /path/to/httpdocs.tmp && mv -Tf /path/to/httpdocs.tmp /path/to/httpdocs
1 голос
/ 26 марта 2010

Это определенно будет быстрее, если вы будете перемещаться между разделами. В том же разделе я бы предположил, что по-прежнему будет проще использовать ссылку.

Мой совет - примерить время - примерно так:

#!/bin/bash
for i in $(seq 1 1000); do
   time mv /path/to/httpdocs /path/to/httpdocs.before
   time mv /path/to/$newReleaseName /path/to/httpdocs
done

for i in $(seq 1 1000); do
   time ln -sf /path/to/$newReleaseName path/to/httpdocs
done

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

1 голос
/ 26 марта 2010

Мне кажется, что, поскольку mv в Linux - это просто изменение информации об инодах, а ln копирует запись об инодах, они оба должны быть достаточно быстрыми, чтобы вы не могли заметить разницу с помощью секундомера .

Но мне интересно, решат ли они на самом деле вашу проблему. Я предполагаю, что вы говорите, что пользователи использовали файлы назначения - так что, в любом случае, это просто не получится?

0 голосов
/ 26 марта 2010

Помните, что символические ссылки могут быть немного медленнее: http://httpd.apache.org/docs/2.0/misc/perf-tuning.html

Это может решить одну проблему и создать другую.

...