26 июн. 2011 г.

Структура презентации проекта

  1. Общая информация о предприятии. Название. Сфера деятельности. Базовые показатели: численность персонала, объемы выпуска, количество единиц машино-тракторного парка и т.п. Где находится. Как добраться. (Только для первой презентации).
  2. Уровень автоматизации предприятия. История взаимоотношений (для наших клиентов). Установленное ПО. Ответственные лица. Базовые параметры: количество компьютеров, наличие сети, конфигурация сервера и т.п.
  3. Действующее соглашение с клиентом. Условия подписанного договора. Сроки.
  4. Информация об автоматизируемом участке. Описание технологического процесса. Участники технологического процесса.
  5. Текущая организация документоооборота и информационных потоков на автоматизируемом участке. Участники, с подробным описанием роли и выполняемых операций каждого.
  6. Реализуемая организация документооборота и информационных потоков. Участники, с подробным описанием роли и выполняемых операций каждого. Подробное, пошаговое описание действий при ежедневной эксплуатации, закрытии периода и построении отчетных форм.
  7. Информация по проекту. Какие базовые настройки будут использованы. Какие настройки будут разработаны специально для клиента. Структуры данных. Документы. Алгоритмы. Типовые хозяйственные операции. Корреспонденция счетов. Взаимодействие и обмен данными со сторонним ПО. Сопряжение с действующими модулями в рамках платформы Гедымин. Подключение внешнего оборудования.
  8. Выходные формы. Образей для каждой. Информация на основании чего строится форма, как вычисляется/заполняется каждое поле.
  9. Таймлайн. Порядок выполнения работ. Сроки. Ответственные.

25 июн. 2011 г.

Быстродействие триггера на коммит транзакции

Насколько замедлит выполнение кода наличие триггера на коммит транзакции?

Тестовый пример 10 000 раз извлекает имя контакта с идентификатором 650 001.
EXECUTE BLOCK
AS
  DECLARE VARIABLE I INTEGER = 0;
  DECLARE VARIABLE S VARCHAR(60);
BEGIN
  WHILE (:I < 10000) DO
  BEGIN
    EXECUTE STATEMENT
      'SELECT name FROM gd_contact WHERE id=650001'
    WITH COMMON TRANSACTION
    INTO :S;
    I = :I + 1;
  END
END
На общей транзакции время выполнения у нас составило 367 мс. Теперь повторим тоже самое, но каждый селект будет выполняться на своей, автономной транзакции:
EXECUTE BLOCK
AS
  DECLARE VARIABLE I INTEGER = 0;
  DECLARE VARIABLE S VARCHAR(60);
BEGIN
  WHILE (:I < 10000) DO
  BEGIN
    EXECUTE STATEMENT
      'SELECT name FROM gd_contact WHERE id=650001'
    WITH AUTONOMOUS TRANSACTION
    INTO :S;
    I = :I + 1;
  END
END
Время выполнения составило 13 000 мс. Как видно, 10 000 стартов и коммитов транзакции не даются нам даром. Создадим пустой триггер на коммит транзакции:
CREATE OR ALTER TRIGGER tc_test
  ACTIVE
  ON TRANSACTION COMMIT
  POSITION 9000
AS
BEGIN
END
Время выполнения с таким триггером также составляет 13 000 мс. Для сравнения добавим в триггер операторы:
CREATE OR ALTER TRIGGER tc_test
  ACTIVE
  ON TRANSACTION COMMIT
  POSITION 9000
AS
  DECLARE VARIABLE S VARCHAR(255);
BEGIN
  S = RDB$GET_CONTEXT('USER_TRANSACTION', 'TEST');
  IF (:S IS NULL) THEN
  BEGIN
    S = 'A';
  END
END
Время выполнения увеличилось на 700 мс (по 0.7 мс в расчете на одну итерацию).

Вывод: Для Firebird 2.5 само по себе наличие триггера на коммит транзакции не увеличивает время выполнения кода.