Транзакция Oracle - таблица подсчета - PullRequest
1 голос
/ 17 сентября 2011

У меня есть таблица, где мне нужно ограничить по категориям, а затем найти все перекрывающиеся даты в некотором диапазоне дат. Это занимает около 2 секунд, что недопустимо для каждой транзакции, которая происходит со скоростью примерно 50 / с. Альтернатива состоит в том, чтобы создать какую-то таблицу подсчета - опять же, я не знаю, насколько это здорово, потому что все может быть не синхронизировано.

Date on Rent   # Rented   Category
9/5/2011       5          CATEGORY1

В Oracle (PL / SQL, если это имеет значение), как я могу поддерживать эту производительность, но гарантировать, что параллельные транзакции не приводят к увеличению / уменьшению, делая его на единицу меньше или на единицу больше, чем на самом деле?

У меня есть два типа транзакций, вроде поиска и аренды. Только арендная плата будет обновлять эту таблицу учета (и ищет только чтение из нее). Я не против, если арендная плата замедляется, но не хочу, чтобы эффективность поиска снижалась. Арендная плата может происходить так часто, как 5-10 в секунду.

1 Ответ

1 голос
/ 17 сентября 2011

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

Вам придется поэкспериментировать с вашими данными, чтобы увидеть, помогает ли вам составление сводной таблицы / таблицы подсчета или вред.Это действительно зависит от того, насколько быстро обновляется основная таблица, сколько времени вы тратите на обновление своей подсчетной таблицы, сколько времени вы экономите, имея возможность выбирать ее, и от того, насколько современной вам требуется выбор.1003 *

...