sqlite через сетевой ресурс для аварийного переключения
В продолжение этого вопроса: /questions/45230110/sqlite-cherez-setevoj-resurs
Если я поставлю SQlite DB на сетевой ресурс, но не получу к ней доступ одновременно с разных машин. У меня есть только база данных SQLite, хранящаяся на общем ресурсе, поэтому кластер отказоустойчивых компьютеров может занять место, где остановился один компьютер.
Есть ли присущие этому подходу проблемы?
1 ответ
Интересуюсь знанием вашего опыта (через 5 лет). За полезную подсказку Эрика Гранджа:
"SQLite использует консультативные блокировки POSIX для реализации блокировки в Unix"... "Консультативная блокировка POSIX, как известно, глючит или даже не реализуется во многих реализациях NFS"... "Ваша лучшая защита - не использовать SQLite для файлов в сетевой файловой системе". ".
Сказав это, если ваш сервер NFS надежен (например, NetApp), а ваши клиенты надежны (то есть, вероятно, не Linux; см., Например, http://nfsworld.blogspot.co.at/2006/10/ обзор-оф-почему-NFS-отстой-бумажно-from.html).
Консультативная блокировка POSIX через NFS также зависит от имплементации: из статьи Википедии о блокировке файлов: "В Linux до 2.6.12 вызовы flock для файлов NFS будут действовать только локально. В ядре 2.6.12 и выше реализованы вызовы flock для файлов NFS с использованием Блокировки диапазона байтов POSIX. Эти блокировки будут видны другим клиентам NFS, которые реализуют блокировки POSIX в стиле fcntl, но невидимы для тех, кто этого не делает. " Если есть сомнения, вы можете использовать
nfstrace
определить, что ваша ОС пытается сделать.Что произойдет, если узел A начал транзакцию, заблокировал файл таблицы, а затем упал? Увидит ли узел B консультативную блокировку и откажется от записи в файл?