У меня есть простое веб-приложение в ASP.NET MVC, которое использует Sql CE для бэкэнд-базы данных с использованием EF. Все работает отлично, за исключением того, что я хотел бы сохранить журнал показов для пользователей, попавших в api в приложении, - я получаю достаточно запросов о том, что он сбой сервера. Я пробовал пару вариантов, которые не работают достаточно хорошо, и я должен был отключить их. Я использую идентификатор пользователя в базе данных, на котором есть уникальный индекс.Производительность Sql Ce для транзакций с большим объемом
- во всех случаях, если элемент не существует в db, создается и сохраняется новая запись.
в v1, найдите член в db, увеличьте счетчик показа, сохраните запись назад. Это было слишком медленно и разбило сервер.
в версии v2, я просто проверил, существует ли запись и ее создать. если он существует, я ничего не делаю. Это все еще слишком медленно, но быстрее, чем v1.
Я занимаюсь хранением db in-памяти для этого следующего и периодически храним его в sql ce. Я беспокоюсь, будет ли это работать, если я закрою 1000 элементов за несколько секунд, а затем попытаюсь сохранить их в одном обновлении? Кажется, что sql ce может просто не быть способным делать то, что мне нужно вообще, или я не замечаю простую оптимизацию производительности?
то, с чем вы сталкиваетесь, является простой проблемой производительности с EF + SQL CE. У меня также была эта проблема, и она ускорилась (примерно в 15 раз быстрее!) С уже открытым соединением, переданным в контекст, - похоже, что EF с CE имеет проблему с обработкой соединения, что касается открытия соединения вместе с первым запрос будет очень трудоемким, особенно если ваша схема базы данных не соответствует вашим классам POCO точно или база данных была создана на другой ОС (или иногда даже проблемы с доступом к файлу). – DevilSuichiro
ОК, я думал, что он использует соединение пула под капотом, но я проверю это. –
Используйте интерфейсы TableDirect через raw ADO.net и реализуйте обработку/развёртывание соединений, как указано выше. – ErikEJ