#sql-server #linq #search #operation
Вопрос:
Я нахожусь в очень сложной ситуации с поиском, SQL-сервером и рутинными операциями. Каждые два часа запускается программа, и по крайней мере в течение 5 минут поиск, реализованный в другой программе, не работает, потому что рутинная операция очищает основную таблицу, в которой хранятся все данные, и после некоторой доработки таблица будет заполнена новыми данными.
Есть ли оптимальный способ справиться с этими 5 минутами?
Мы пытаемся поменять местами таблицы или переименовать их, но связи будут потеряны, а недостающие данные будут удалены каскадно.
Лучшее решение сделает данные всегда доступными. (в таблице около 3,5 миллионов строк)
Комментарии:
1. Что вы подразумеваете под «рутинной операцией очистки основного стола»? Удаляются ли старые данные? Обновляются ли неверные данные? Можете ли вы изменить этот процесс «очистки», чтобы уменьшить проблемы, которые он вызывает?
Ответ №1:
Один из способов сделать это-убедиться, что обычная операция очищает таблицу и повторно заполняет ее с помощью транзакции. Затем в вашем коде для поиска вам нужно будет установить TRANSACTION ISOLATION LEVEL
SNAPSHOT
значение (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server). Это позволяет вам искать данные, которые были там во время выполнения операции очистки/пополнения.
Комментарии:
1. Рад слышать! Был бы признателен, если бы вы поддержали этот ответ и отметили его как ответ.
2. Сделал это, но появилось следующее сообщение: Спасибо за отзыв! Вам нужно не менее 15 репутации, чтобы проголосовать, но ваши отзывы были записаны