Синхронизация базы данных на основе PowerShell с использованием двоичного файла - PullRequest
1 голос
/ 01 декабря 2008

Я написал приложение базы данных, используя двоичный файл в качестве хранилища. доступ к нему осуществляется через командлеты powershell.

Вы можете поместить информацию в базу данных, используя put-, и вы можете прочитать информацию, используя get -.

Проблема в синхронизации. Как лучше всего обеспечить, чтобы командлеты не обращались к файлу одновременно?

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

Лучше ли я использовать механизм блокировки на основе файлов или механизм синхронизации на основе .NET?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2008

Мне не известны какие-либо механизмы синхронизации на основе .NET, которые были бы здесь уместны (читайте дальше - я делаю предположение, что это может быть неверно).

Если вам абсолютно необходимо иметь монопольный доступ для «пут», то может быть целесообразным либо (а) блокировка на основе файлов, либо (б) блокировка на основе базы данных. Например, команда «put» может сначала проверить специальное поле базы данных, чтобы увидеть, может ли она получить эксклюзивный доступ; если это возможно, он обновил бы это поле, чтобы показать, что эксклюзивный доступ уже занят, предотвращая повторное одновременное размещение.

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

0 голосов
/ 01 декабря 2008

Я думаю, что метод мьютекса должен сделать сейчас. Хотя PowerShell v2 действительно позволяет легко выполнять сценарии удаленно, я думаю, что беспокойство об этом в настоящий момент помешает быстрой реализации PowerShell v1.

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

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

0 голосов
/ 01 декабря 2008

Я думаю, мьютекс будет хорошо работать здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...