Один рабочий процесс или что-то более специфичное для БД? - PullRequest
0 голосов
/ 17 февраля 2012

Мне нужно избегать перекрывающихся диапазонов дат в моей базе данных. Я хотел бы, чтобы это было независимым от базы данных - это достаточно трудная проблема, даже если она не является анагностичной для базы данных (http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%3a%3a%3aP11_QUESTION_ID:474221407101). У меня есть только одно приложение, пишущее в базу данных. Несколько других читают из него, где критична производительность чтения Приложение, которое выполняет запись, является многопоточным - это веб-приложение - и находится в кластере.

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

1 Ответ

0 голосов
/ 17 февраля 2012

Одним из способов решения этой проблемы является настройка таблицы, которая содержит все дни в виде значений DATE.Примерно так:

CREATE TABLE MY_SCHEDULER (
    SCHEDULED_DATE DATE PRIMARY KEY,
    OWNER_ID NUMBER(8)
);

SCHEDULED_DATE будет означать один день и будет храниться со временем в 00:00.Целостность первичного ключа обеспечит невозможность вставки двух записей с одинаковым SCHEDULED_DATE.OWNER_ID - это ссылка на того, кто «владеет» этой датой.Учитывая, что переменные DATE в Oracle имеют размер 7 байтов, а их число не слишком велико (максимум 22 байта), у вас не должно возникнуть проблем с хранением.100 лет дат будут иметь около 10 МБ!

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