Используйте WCF, чтобы безопасно позволить множеству одновременно работающих пользователей безопасно обращаться к MS-Access, Sqlite или другим файловым базам данных? - PullRequest
0 голосов
/ 29 мая 2009

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

Какие конфигурации WCF дадут мне то, что я хочу? Получает ли меня параллелизм PerSession?

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

РЕДАКТИРОВАТЬ: я пытаюсь собрать сайт с открытым исходным кодом для календаря, который не требует от пользователей иметь дело с MySql или SqlServer - другими словами, это должно быть развертывание xcopy.

Ответы [ 4 ]

2 голосов
/ 29 мая 2009

Возможно, вы захотите использовать один экземпляр с одним параллелизмом:

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode = ConcurrencyMode.Single)]

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

ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
    MaxConcurrentCalls = 200,
    MaxConcurrentInstances = 200,
    MaxConcurrentSessions = 200,
};
ServiceHost host = ...
host.Description.Behaviors.Add(throttlingBehavior);
1 голос
/ 29 мая 2009

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

Я не знаю, как ms-access работает с параллелизмом.

Какой веб-сайт вы создаете?

1 голос
/ 29 мая 2009

Мэтью,

Каков ваш вариант использования? Вы разрешаете пользователям подключать базы данных ad-hoc? Если это так, вам может быть лучше написать некоторый код, который берет их данные и импортирует их в базу данных SQL Server. Для этого лучше.

Если вас беспокоит стоимость, вы можете использовать SQL Server Express или Postgres.

0 голосов
/ 29 мая 2009

Сериализация «большого количества одновременных обновлений и чтений» приведет к очень плохой производительности для ваших пользователей. Я признаю, что на самом деле это не ответ на ваш вопрос (скорее вызов посылке), но было бы гораздо лучше перейти к менеджеру ресурсов, более подходящему для такого вида деятельности, как SQL Server. С архитектурной точки зрения, попытка заставить пользователей смотреть сквозь соломинку на свои данные - неправильный путь - обычно это приводит к расстроенным пользователям.

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