Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 23 24 25 26 27 [28] 29 30 31 32 .. 34   вперед  Ctrl
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Alexey Rovdo

Угу, типа все могло бы быть наоборот, но я не знаю как этого достичь.

А я грил как - пригласить кого-то поопытней. Но Вы не стали этого делать. Тогда как на реальных тестах системы настраивают заинтересованные и опытные. А так конечно. Может завтра найдется парень, у которого Версант будут рвать все СУБД подряд.
14 апр 05, 16:49    [1469394]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Alexey Rovdo
Угу, типа все могло бы быть наоборот, но я не знаю как этого достичь.

А я так считаю, если что-то "якобы можно", но никто не знает как этого достичь, то можно утверждать что "якобы можно" ~ "нельзя". А с отключенными констрейнтами и индексами всех порвет exe-шник, который будет тупо складывать данные в текстовый файл.


Вопрос стоит не так. На форуме дофига народу которые знают как (я и сам мала-мала знаю), но НАФИГА ???

Мотивация отсутствует
14 апр 05, 16:57    [1469439]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
vadiminfo

А я грил как - пригласить кого-то поопытней. Но Вы не стали этого делать. Тогда как на реальных тестах системы настраивают заинтересованные и опытные. А так конечно. Может завтра найдется парень, у которого Версант будут рвать все СУБД подряд.


1. Почему вы решили, что моя конфигурация Oracle чем-то плоха?
2. Почему вы решили что моя конфигурация Oracle плоха настолько, что быстродействие на "вставке" падает более чем на порядок?
3. Почему вы решили, что я сам такой уж неопытный для работы с Oracle?
4. Почему вы решили, что мне некого спросить (очень даже опытного), если я вдруг испытываю затруднения с настройкой Oracle?
5. Почему вы решили, что моя конфигурация Версанта так хороша, что ее нельзя улучшить?
6. Кто вам мешает проверить все самому (весь код выложен в данном топике)?
14 апр 05, 17:01    [1469460]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
Gluk (Kazan)

Вопрос стоит не так. На форуме дофига народу которые знают как (я и сам мала-мала знаю), но НАФИГА ???


"знаю, но не стану делать - нафига" - разумно, но ...

Вы не путайте. В данном случае это звучит так "знаю, но не скажу - нафига".
А это в рамках данного форума эквивалентно "не знаю".
14 апр 05, 17:06    [1469477]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 1228
vadiminfo
Alexander A. Sak

Версант порвал Оракла на вставке.

Боюсь что таким способом один Оракл мог порвать другого Оракла.
Сомневаюсь, что такие тесты могут быть признанными образцовыми во всех отношениях. И тем более не уверен, что Оракл с отключенными внешними ключами не порвет Версанта с МуSQL вместе взятых, в немного более опытных руках. Обоих нет на общепризнанных тестах, где Оракл среди лидирующих.


Да фиг с ней, с образцовостью. Меня код на Java, например, выкосил, так чего ж теперь, совсем все выкинуть? Пусть человек выложит все аргументы, а уж потом каждый сделает свои выводы.
14 апр 05, 17:08    [1469482]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 1228
Alexey Rovdo
А с отключенными констрейнтами и индексами всех порвет exe-шник, который будет тупо складывать данные в текстовый файл.


Точно. Например, в конференции по Firebird желающих лить логи с железяк сразу на сервер стараются побыстрее переубедить.

Без примера получения статистики я не вижу смысла в Версанте. Зачем мне шустрая заливалка данных, если для обработки все равно надо идти в старый знакомый RDBMS? Выбирая между "быстро залить данные и трахаться с выборками" и "отключить констрейнты, залить, включить констрейнты, получить выборки" однозначно выберу второе.
14 апр 05, 17:25    [1469545]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
Alexander A. Sak

Без примера получения статистики я не вижу смысла в Версанте. Зачем мне шустрая заливалка данных, если для обработки все равно надо идти в старый знакомый RDBMS? Выбирая между "быстро залить данные и трахаться с выборками" и "отключить констрейнты, залить, включить констрейнты, получить выборки" однозначно выберу второе.


В большинстве практических ситуаций вы конечно окажетесь правы. Просто бывает и так (пусть и не слишком часто), что просто нельзя (или проблемно) "отключить констрейнты, залить, включить констрейнты" (в основном при встраивании СУБД в оборудование). Вот тогда то и используют ООСУБД.
14 апр 05, 17:37    [1469581]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Alexey Rovdo

1. Почему вы решили, что моя конфигурация Oracle чем-то плоха?


А Вы что только теперь увидели, что я высказываю сомнения?
Где Вы были када начинали свой эксперимент? Вы не отвечали, даже не выполнили простейшего запроса, что я предлагал. А собирался предлагать и другие по ходу.
Вы беретесь сравнивать Оракл, у которого туча средств для сбора статистики работы системы, но ее не показываете. Почему? Многие из этих средств хотят включить в Юкон. А Вы представляете дело так будто Оракл это темный какой-то ящик, и если и можно что-то понять то тока на входе и выходе этого ящика. Я Вам задавал вопрос про сильное чтение, которое Вы запихнули в код, якобы предназначенный исключительно для проверки записи больших объемов. Т.е. заливку. Т.е. я высказал сомнение про то, что это вообще не тест чистой заливки.
Если бы Вы представили трассировку, отчеты построенные на моментальных снимках выполняли другие действия по сбору статистики можно было бы понять, что делает сервер.

Alexey Rovdo

2. Почему вы решили что моя конфигурация Oracle плоха настолько, что быстродействие на "вставке" падает более чем на порядок?

Речь идет не о вставке, а о заливке. Первое характерно для БД оперативной обработки, второе для хранилищь данных. Т.е. там относительно частые, но недолговременные транзакции. Вы же запустили либо в режиме чрезмерных транзакций, либо одной чрезмерно длинной. Поскольку это далеко от обычной работы, то там легко получить отличия более чем на порядок и между двумя Ораклами. У меня есть такие личные наблюдения.
Вы же ничем не подтвердили, что настраивали вообще оракл на это. См. выше. Нет ни статистики, в конце Вы привели парметры инициализации из init.ora. Я уже писал про это.

Alexey Rovdo


3. Почему вы решили, что я сам такой уж неопытный для работы с Oracle?

Любой опытный и заинтересованный Ораклист позаботился бы о представлении показателей, проясняющих картину и дающих другим вмешаться. Разумеется если он не официально выствавлен фирмой Оракл. Только в последнем случае достаточно привести результаты в цифрах.
Потому и решил что Вы не опытный, потому что все еще не подозреваю Вас в том, что Вы намерно этого не сделали.
Хотя обыкновенно независимые наблюдатели для формальности иногда привлекаются. Мало ли Вы что-нибудь забыли. Какую-нибудь лишнюю прогу грузящую процессор, пока оракл парился.

Alexey Rovdo


4. Почему вы решили, что мне некого спросить (очень даже опытного), если я вдруг испытываю затруднения с настройкой Oracle?


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

Alexey Rovdo

5. Почему вы решили, что моя конфигурация Версанта так хороша, что ее нельзя улучшить?

Не решал. Думал, что Вы опытный Версант. Но если две из них настроены плохо, то одна победит. Из двух плохих генрелов один все равно победит.
Тока при чем тут те категоричные выводы с квантором всеобщности? Что версан всегда делает Оракла. Таких ведь не делают даже на официальных тестах, которые мягко говоря, отвечают несколько более строгим требованиям чем Ваши. Ведь если например, узкое место I/O, то одна система которая выигрывает при одних I/O в общем случае может проиграть при других.

Alexey Rovdo

Кто вам мешает проверить все самому (весь код выложен в данном топике)?

Я жду JDeveloper на 9. На днях, правда это тянется уже два месяца (со дня на день обещают). Но тогда посмотрю, что вообще делает Оракл. Что Вы заставили его переваривать, подбросив для того, чтоб не расслаблялся еще и запросиков на чтение. Однако, считаться это должно чистой заливкой. Конечно заливку таких объемах, мне дома не провести дома - места уже мало. А там тока UNDO на несколько Гб потянет.
14 апр 05, 19:47    [1469926]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
vadiminfo
Конечно заливку таких объемах, мне дома не провести дома - места уже мало. А там тока UNDO на несколько Гб потянет.

Я сделал тест на заливку вчера вечером на работе. Сейчас выложу результаты теста, чтобы Алексей мог убедиться в том, что РСУБД не только не отстают от его ООСУБД, но еще и с гиком обгоняют, если уметь правильно их готовить.

Суть теста была в том, что все тестовые данные были сгенерированны запросами в временные таблицы, выгружены с них в CSV и уже с него загружены в физические таблицы БД.

Итак исходные данные:
Машина: P4 2600 (трейд на 2 процессора), 1 гиг памяти, винт SEAGATE SATA
ОС: Win XP SP2
СУБД: ASA 9.0.2.3044, запущена как системный сервис, разрешено взять под кэш 700 мб памяти, другие настройки по умолчанию
БД: на 8 кб странице, CHECKSUM на страницах отключена (хотя особо замедления и не было бы)
Используемый диалект: WatcomSQL
Другие условия: ну естественно это моя рабочая машина и я на ней продолжал работать, гонять другие БД на отдельных инстансах серверов, слушать музыку, просматривать SQL.RU без особых неудобств - по TaskManager самая пиковая нагрузка на процессоры была 55%, средняя около 40%.

Скрипты создания структуры БД:
CREATE TABLE "DBA"."City" (
	"Id" smallint NOT NULL,
	"Name" varchar(255) NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."City" IS 'Города';

CREATE TABLE "DBA"."Crafttype" (
	"Id" smallint NOT NULL,
	"Description" varchar(255) NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."Crafttype" IS 'Типы самолетов';

CREATE TABLE "DBA"."Flight" (
	"Id" integer NOT NULL,
	"Description" varchar(255) NOT NULL,
	"Crafttype_id" smallint NOT NULL,
	"Startpoint_id" smallint NOT NULL,
	"Endpoint_id" smallint NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."Flight" IS 'Рейсы';

CREATE TABLE "DBA"."Item" (
	"Id" integer NOT NULL,
	"Flight_id" integer NOT NULL,
	"Day" date NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."Item" IS 'Расписание';

CREATE TABLE "DBA"."Person" (
	"Id" integer NOT NULL,
	"First_Name" varchar(255) NOT NULL,
	"Last_Name" varchar(255) NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."Person" IS 'Пассажиры';

CREATE TABLE "DBA"."Seat" (
	"Id" integer NOT NULL,
	"Crafttype_id" smallint NOT NULL,
	"Seat_Level" tinyint NOT NULL,
	"Seat_Number" smallint NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."Seat" IS 'Места по типам самолетов';

CREATE TABLE "DBA"."Ticket" (
	"Id" integer NOT NULL,
	"Seat_id" integer NOT NULL,
	"Item_id" integer NOT NULL,
	"Person_id" integer NOT NULL,
	"Cost" numeric(10,2) NOT NULL,
	PRIMARY KEY ( "Id" )
);
COMMENT ON TABLE "DBA"."Ticket" IS 'Билеты';

// Создание FK
ALTER TABLE "DBA"."Flight" ADD NOT NULL FOREIGN KEY "City_End" ( "Endpoint_id" ) 
  REFERENCES "DBA"."City" ( "Id" ) ON UPDATE CASCADE;
ALTER TABLE "DBA"."Flight" ADD NOT NULL FOREIGN KEY "City_Start" ( "Startpoint_id" ) 
  REFERENCES "DBA"."City" ( "Id" ) ON UPDATE CASCADE;
ALTER TABLE "DBA"."Flight" ADD NOT NULL FOREIGN KEY "Crafttype" ( "Crafttype_id" ) 
  REFERENCES "DBA"."Crafttype" ( "Id" ) ON UPDATE CASCADE;
ALTER TABLE "DBA"."Item" ADD NOT NULL FOREIGN KEY "Flight" ( "Flight_id" )
  REFERENCES "DBA"."Flight" ( "Id" ) ON UPDATE CASCADE;
ALTER TABLE "DBA"."Seat" ADD NOT NULL FOREIGN KEY "Crafttype" ( "Crafttype_id" ) 
  REFERENCES "DBA"."Crafttype" ( "Id" ) 
  ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE "DBA"."Ticket" ADD NOT NULL FOREIGN KEY "Item" ( "Item_id" )
  REFERENCES "DBA"."Item" ( "Id" ) ON UPDATE CASCADE;
ALTER TABLE "DBA"."Ticket" ADD NOT NULL FOREIGN KEY "Person" ( "Person_id" )
  REFERENCES "DBA"."Person" ( "Id" ) ON UPDATE CASCADE;
ALTER TABLE "DBA"."Ticket" ADD NOT NULL FOREIGN KEY "Seat" ( "Seat_id" ) 
  REFERENCES "DBA"."Seat" ( "Id" ) ON UPDATE CASCADE;

// Создание CHECK CONSTRAINT на поля
ALTER TABLE "DBA"."Ticket" ALTER "Cost" ADD CONSTRAINT "Cost" check(@ > 0);
ALTER TABLE "DBA"."Seat" ALTER "Seat_Level" 
  ADD CONSTRAINT "Seat_Level" check(@ between 1 and 2);

// Создание UNIQUE CONSTRAINT
ALTER TABLE "DBA"."Seat" 
  ADD CONSTRAINT "Unique_Number" UNIQUE ( "Crafttype_id", "Seat_Level", "Seat_Number" );
Как видно из скриптов, я кое где понизил размеры полей, ориентируясь по их логическому смыслу хранимых значений, честно навесил FK и взял на себя наглость еще в догонку навесить CHECK и UNIQUE CONSTRAINT по логическому смыслу, чтобы жизнь медом не казалась. Создание индексов в данном случае не нужно, так как ASA автоматом создает их на основе PK, FK и UNIQUE.

В следующем посте я приведу скрипт заполнения БД тестовыми данными ...
15 апр 05, 05:58    [1470320]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
// Начинаем заливку данных
BEGIN
  // Обьявляем промежуточные временные таблицы
  DECLARE LOCAL TEMPORARY TABLE #City (
  	"Id" smallint NOT NULL,
  	"Name" varchar(255) NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;
  
  DECLARE LOCAL TEMPORARY TABLE #Crafttype (
  	"Id" smallint NOT NULL,
  	"Description" varchar(255) NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;
  
  DECLARE LOCAL TEMPORARY TABLE #Flight (
  	"Id" integer NOT NULL,
  	"Description" varchar(255) NOT NULL,
  	"Crafttype_id" smallint NOT NULL,
  	"Startpoint_id" smallint NOT NULL,
  	"Endpoint_id" smallint NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;
  
  DECLARE LOCAL TEMPORARY TABLE #Item (
  	"Id" integer NOT NULL,
  	"Flight_id" integer NOT NULL,
  	"Day" date NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;
  
  DECLARE LOCAL TEMPORARY TABLE #Person (
  	"Id" integer NOT NULL,
  	"First_Name" varchar(255) NOT NULL,
  	"Last_Name" varchar(255) NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;
  
  DECLARE LOCAL TEMPORARY TABLE #Seat (
  	"Id" integer NOT NULL,
  	"Crafttype_id" smallint NOT NULL,
  	"Seat_Level" tinyint NOT NULL,
  	"Seat_Number" smallint NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;
  
  DECLARE LOCAL TEMPORARY TABLE #Ticket (
  	"Id" integer NOT NULL,
  	"Seat_id" integer NOT NULL,
  	"Item_id" integer NOT NULL,
  	"Person_id" integer NOT NULL,
  	"Cost" numeric(10,2) NOT NULL,
  	PRIMARY KEY ( "Id" )
  ) NOT TRANSACTIONAL;

  // Путь для выгрузки CSV и имя файла CSV
  DECLARE @CSVPath varchar(128);
  DECLARE @CSVName varchar(128);

  // Начало работы скрипта
  DECLARE @StartPoint timestamp;

  SET @StartPoint = Now();
  SET @CSVPath = 'F:\Garbage\Test_FO\Data\';

  MESSAGE 'Start time: ' || @StartPoint TO CLIENT;

  // Города (всего 200)
  INSERT INTO #City (Id,Name)
    SELECT Number(),Row_Num
    FROM sa_RowGenerator(1, 200);

  MESSAGE 'City generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Типы самолетов (всего 50)
  INSERT INTO #CraftType (Id, Description)
    SELECT Number(), 'Crafttype ' || Row_Num
    FROM sa_RowGenerator(1, 50);

  MESSAGE 'CraftType generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Места в типах самолетов (плавающее кол-во)
  INSERT INTO #Seat (Id, Crafttype_id, Seat_Level, Seat_Number)
    SELECT Number(), CraftType_id, Seat_Level, Seat_Number
    FROM (
      SELECT ct.CraftType_id, 1 AS Seat_Level, n.Seat_Number
      FROM ( -- Типы самолетов с кол-вом мест на первом уровне (от 30 до 230)
            SELECT Id AS CraftType_id, 
                   GREATER(LESSER(TRUNCNUM(RAND() * 300, 0), 230), 30) AS CountNum_on_Seat_1
            FROM #CraftType ) AS ct,
        LATERAL ( -- Места для первого уровня
          SELECT Row_Num AS Seat_Number
          FROM sa_RowGenerator(1, ct.CountNum_on_Seat_1)
        ) AS n
      UNION ALL
      SELECT ct.CraftType_id, 2 AS Seat_Level, n.Seat_Number
      FROM ( -- Типы самолетов с кол-вом мест на втором уровне (от 100 до 200)
            SELECT Id AS CraftType_id, 
                   GREATER(LESSER(TRUNCNUM(RAND() * 300, 0), 200), 100) AS CountNum_on_Seat_2
            FROM #CraftType ) AS ct,
        LATERAL ( -- Места для второго уровня
          SELECT Row_Num AS Seat_Number
          FROM sa_RowGenerator(1, ct.CountNum_on_Seat_2)
        ) AS n
    ) AS x;

  MESSAGE 'Seat generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Рейсы (всего 2000, на каждый тип самолета по 40 рейсов)
  INSERT INTO #Flight (Id, Crafttype_id, Description, Startpoint_id, Endpoint_id)
    SELECT Number(), ct.Crafttype_id, StartCity.Name || ' - ' || EndCity.Name, 
           ct.StartPoint_id, ct.EndPoint_id
    FROM (-- Типы самолетов и кода городов вылета и прилета
          SELECT Id AS Crafttype_id,
                 GREATER(LESSER(TRUNCNUM(RAND() * 200, 0), 200), 1) AS StartPoint_id,
                 GREATER(LESSER(TRUNCNUM(RAND() * 200, 0), 200), 1) AS EndPoint_id
          FROM #Crafttype, sa_RowGenerator(1, 40) x) AS ct
      INNER JOIN #City AS StartCity ON StartCity.Id = ct.StartPoint_id
      INNER JOIN #City AS EndCity ON EndCity.Id = ct.EndPoint_id;

  MESSAGE 'Flight generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Персоны (всего 2000000)
  INSERT INTO #Person (Id, First_Name, Last_Name)
    SELECT Number(), Row_Num, Row_Num
    FROM sa_RowGenerator(1, 2000000);

  MESSAGE 'Person generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Расписание (всего 130000, с 2004-10-30 по 2005-01-02, т.е. на каждые из 65 указанных дней по 2000)
  INSERT INTO #Item (Id, Flight_id, Day)
    SELECT Number(), GREATER(LESSER(TRUNCNUM(RAND() * 2000, 0), 2000), 1) AS Flight_id, 
           CONVERT(date, '2004-10-29') + r.Row_Num AS Day
    FROM sa_RowGenerator(1, 65) r, sa_RowGenerator(1, 2000) x;

  MESSAGE 'Item generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Проданные пассажирам билеты по расписанию
  // (плавающее кол-во на каждую строку расписания в зависимости от кол-ва мест в самолете
  //  с примерным раскладом, что не продано каждое 5-ое место)
  INSERT INTO #Ticket (Id, Seat_id, Item_id, Person_id, Cost)
    SELECT Number(), t.Seat_id, t.Item_id, t.Person_id, t.Cost
    FROM (
      SELECT i.Id AS Item_id, s.Id AS Seat_id,
             GREATER(LESSER(TRUNCNUM(RAND() * 2000000, 0), 2000000), 1) AS Person_id,
             GREATER(LESSER(TRUNCNUM(RAND() * 10000, 0), 10000), 300) AS Cost,
             CONVERT(smallint, TRUNCNUM(RAND() * 1000, 0)) AS Chanse
      FROM #Item i
        INNER JOIN #Flight f ON f.Id = i.Flight_id
        INNER JOIN #Seat s ON s.Crafttype_id = f.Crafttype_id
    ) AS t
    WHERE Truncnum(t.Chanse / 5, 0) <> t.Chanse / 5.00;

  COMMIT;
  MESSAGE 'Ticker generation complete: ' || Now() || '(' || @@ROWCOUNT || ' rows)' TO CLIENT;

  // Выгружаем данные в CSV
  SET @CSVName = @CSVPath  || 'City.dat';
  UNLOAD TABLE #City TO @CSVName ORDER OFF;
  MESSAGE 'City unload complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Crafttype.dat';
  UNLOAD TABLE #Crafttype TO @CSVName ORDER OFF;
  MESSAGE 'Crafttype unload complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Flight.dat';
  UNLOAD TABLE #Flight TO @CSVName ORDER OFF;
  MESSAGE 'Flight unload complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Item.dat';
  UNLOAD TABLE #Item TO @CSVName ORDER OFF;
  MESSAGE 'Item unload complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Person.dat';
  UNLOAD TABLE #Person TO @CSVName ORDER OFF;
  MESSAGE 'Person unload complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Seat.dat';
  UNLOAD TABLE #Seat TO @CSVName ORDER OFF;
  MESSAGE 'Seat unload complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Ticket.dat';
  UNLOAD TABLE #Ticket TO @CSVName ORDER OFF;
  MESSAGE 'Ticket unload complete: ' || Now() TO CLIENT;

  COMMIT;
  MESSAGE 'Unload to CSV complete: ' || Now() TO CLIENT;

  // Загружаем данные с CSV в физические таблицы БД
  SET @CSVName = @CSVPath  || 'City.dat';
  LOAD TABLE City FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'City load complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Crafttype.dat';
  LOAD TABLE Crafttype FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'Crafttype load complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Flight.dat';
  LOAD TABLE Flight FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'Flight load complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Item.dat';
  LOAD TABLE Item FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'Item load complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Person.dat';
  LOAD TABLE Person FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'Person load complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Seat.dat';
  LOAD TABLE Seat FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'Seat load complete: ' || Now() TO CLIENT;

  SET @CSVName = @CSVPath  || 'Ticket.dat';
  LOAD TABLE Ticket FROM @CSVName ORDER OFF WITH CHECKPOINT ON;
  MESSAGE 'Ticket load complete: ' || Now() TO CLIENT;

  COMMIT;
  MESSAGE 'Load from complete: ' || Now() TO CLIENT;

  MESSAGE 'Finish time in total minute: ' || MINUTES(@StartPoint, Now()) || ', total hours:' || HOURS(@StartPoint, Now()) TO CLIENT;
END;
Небольшие пояснения по коду для специалистов других РСУБД, чтобы они быстрее его восприняли:

Number() - местный IDENTITY в пределах используемого запроса.

sa_RowGenerator() - системная ХП, которая возвращает указанное кол-во записей в параметрах с полем Row_Num, которое будет в пределах от Параметра1 по Параметр2 ХП.

Соединение LATERAL - позволяет в подзапросе, расположенном во FROM обращаться к полям главного запроса в отличие от JOIN, где чтобы нам соединить подзапрос с запросом нужно поля соединения выводить в нем наружу в SELECT.

TRUNCNUM - аналог ROUND, только не округляет, а отбрасывает.

UNLOAD TABLE - выгружает указанную таблицу или запрос в текстовый файл с разделителями (CSV). В коде использовалась опция ORDER OFF, говорящая ASA, что при выгрузке данных их не нужно сортировать по кластерному или первичному ключу.

LOAD TABLE - загружает в указанную таблицу с текстового файла с разделителями. В коде использовалась опция ORDER OFF, говорящая ASA, что при загрузке данных их не нужно сортировать по кластерному или первичному ключу. Несмотря на то, что этот оператор проводит массовую загрузку данных, во время загрузки в штатном порядке проверяются все CONSTRAINT (CHECK, UNIQUE, FK) и автоматически рассчитывается статистика для полей таблицы.

MESSAGE TO CLIENT - оператор посылки сообщения клиенту, в данном случае мы через него организовали трассировку хода работ, чтобы видеть когда и что закончилось и сколько времени это занимало.

В следующем сообщении я приведу этот трайс ...
15 апр 05, 06:13    [1470327]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
А я в аксесе один-в-один пример Алексея прогнал (ну, на VB конечно перевел )
Никаких временных таблиц, отключений констрейнтов и прочих массовых импортов из всяких разных CSV не применялось.

Правда я не стал дожидатся когда оно отработает, домой пошел, но где-то за полтора часа деревянный аксес мне примерно четверть данных навставлял.
Приду на работу - скажу точно, за какое время оно полностью отпахало. Если конечно размер базы не зашкалит за 2Гб (ограничение аксеса)

С файл-серверным аксесом конечно на таких задачах тяжело тягаться, но, мыслю я, что ежели деревянный аксес на ссылочной целостности не заткнулся, то и его старшие братья справятся при соответствующей настройке. Хотя они и находятся в менее выгодной позиции, т.к. изначально расчитаны на совсем другое использование, нежели в качестве локальной однопользовательской базы

З.Ы. Почему то я был абсолютно уверен, что первым отреагируют именно ASCRUS


-----------------

2 Alexey Rovdo
Тут уже неоднократно говорилось, что это все несерьезные тесты. Они не показывают ровным счетом ничего.
Я не так давно гонял MS SQL и аксес на предмет сотен тысяч примитивных апдейтов. Сначала аксес у меня примерно вровень со скулем шел, потом я чуть-чуть над поизмывался над способом апдейтов в аксесе, и получил разницу в скорости больше чем в сто раз. Т.е. аксес стал быстрее и сиквела, и самого себя на два порядка. Ну и хрен с того?
15 апр 05, 06:17    [1470329]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
2 ASCRUS
Пока жду трейса, позволю себе немного погундосить

Все-таки вставка миллионов записей - это немного не то же самое, что миллионы вставок по одной записи :)
Кажется Alexey Rovdo пытаетсяпоказать преимущество Versant'а именно на куче мелких операций. А вы решаете немного другую задачу.
15 апр 05, 06:27    [1470333]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Лог сообщений просто скопирован с ISQL, в котором и выполнялся скрипт генерации и загрузки данных:
Start time: 2005-04-14 18:36:50.957
City generation complete: 2005-04-14 18:36:50.972(200 rows)
CraftType generation complete: 2005-04-14 18:36:50.988(50 rows)
Seat generation complete: 2005-04-14 18:36:51.160(8600 rows)
Flight generation complete: 2005-04-14 18:36:51.207(2000 rows)
Person generation complete: 2005-04-14 18:37:26.628(2000000 rows)
Item generation complete: 2005-04-14 18:37:28.847(130000 rows)
Ticker generation complete: 2005-04-14 18:49:55.003(22360000 rows)
City unload complete: 2005-04-14 18:49:55.082
Crafttype unload complete: 2005-04-14 18:49:55.128
Flight unload complete: 2005-04-14 18:49:55.316
Item unload complete: 2005-04-14 18:49:57.003
Person unload complete: 2005-04-14 18:50:05.050
Seat unload complete: 2005-04-14 18:50:05.113
Ticket unload complete: 2005-04-14 18:51:55.285
Unload to CSV complete: 2005-04-14 18:51:55.300
City load complete: 2005-04-14 18:51:56.347
Crafttype load complete: 2005-04-14 18:51:56.519
Flight load complete: 2005-04-14 18:51:56.957
Item load complete: 2005-04-14 18:52:13.503
Person load complete: 2005-04-14 18:53:14.894
Seat load complete: 2005-04-14 18:53:16.175
Ticket load complete: 2005-04-14 19:42:25.425
Load from complete: 2005-04-14 19:42:25.441
Finish time in total minute: 66, total hours:1
На выходе после выполнения мы получили:
Файл базы данных, размером 1714 MB. Файлы с разделителями, общим размером 793 MB.

Честно говоря я и сам не ожидал, что все так получится быстро. Собственно говоря я и запустил этот тест вечером, думаю что приду этим утром на работу и посмотрю что получилось. Однако ASA справилась до моего ухода с работы, чем даже меня удивила, все таки залить и проверить 22 миллиона записей по связанным 3 таблицам, одна из которых содержит 132 тысячи, а вторая 2 миллиона записей это не самая легкая работа, имея под кэш всего 700 мб и Windows XP, который постоянно пытался увести кэш ASA в свап, чтобы освободить память под другие процессы в силу того, что использовался не выделенный сервер.

Выводы для Алексея:
1. Ничего РСУБД не тормозят, в т.ч. на констрейнтах, если знать особенности каждой конкретной СУБД
2. Язык хранимых процедур может быть и медленнее Java, а вот SQL быстрее. Я сгенерил те же обьемы данных в темповые таблицы вообще за детское время (c 18:36 по 18:49)
3. В Вашем коде не все смогли разобраться, только те, кто знал Java. Я более чем уверен, что мои приведенные скрипты поймут все РСУБД-шники, не смотря на то, что они писанны на диалекте WatcomSQL, который имеет свои различия по сравнению с другими диалектами.
4. ASA 5-7 версий считалась СУБД реального времени и поддерживала платформу QNX. До сих пор она крутится во многих местах и снимает показания с счетчиков (в России например на буровых вышках). Начиная с 8-ой версии ее уже нельзя считать СУБД реального времени - нет поддержки QNX, полностью переписана архитектура ядра с переориентацией на работу с большими обьемами данных. Однако как Вы видите и последняя 9-ая версия довольно шустро проводит операции вставок и изменений.

Выводы для специалистов Оракла, думающих, что темповые таблицы это зло:
Обратите внимание, насколько шустро они работают. 2 миллиона записей в Person было вставлено примерно за полминуты: 18:36:51-18:37:26. По моему это хорошее подтверждение, почему иногда программисты блокировочников предпочитают для разруливания тормозов сложных запросов использовать времянки, или же как можно бороться с блокировками в длинных транзакциях.
15 апр 05, 06:32    [1470338]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Лох Позорный
2 ASCRUS
Пока жду трейса, позволю себе немного погундосить

Все-таки вставка миллионов записей - это немного не то же самое, что миллионы вставок по одной записи :)
Кажется Alexey Rovdo пытаетсяпоказать преимущество Versant'а именно на куче мелких операций. А вы решаете немного другую задачу.

Вот именно - по другому. Однако никто не мешает Алексею сгенерить все данные в CSV/XML/DBF файлы и выдать их со структурой таблиц на всеобщее пользование. Я более чем уверен что все РСУБД по времени проведения операции массовой загрузки этих записей не отстанут от ООСУБД, а многие обгонят.
15 апр 05, 06:35    [1470339]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
ASCRUS
Вот именно - по другому.

Не по-другому, а другую.

Одна задача - миллион вставок по одной записи.
Вторая задача - одна вставка миллиона записей.

Я вполне понимаю, что первую задачу можно решить через вторую, и получить на этом выигрыш. Но это при условии, если у нас уже есть (или мы можем сгенерить) этот миллион записей сразу.
Если же у нас нет миллиона записей сразу, вместо этого записи поступают по одной - то или вставляем по одной, или вынуждены пользоваться промежуточным хранилищем (для последующей массовой заливки)

Мне лично интереснее посмотреть на процесс вставки по одной записи. Чисто из спортивного интереса. А заодно нагрузить сервак не только вставкой новых, но и чтением уже существующих данных. Потому как если нет параллельной обработки уже имеющихся данных, то и нет смысла отказываться от промежуточного CSV, или временных таблиц, или чего угодно оптимизирующего.
15 апр 05, 06:47    [1470345]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Лох Позорный
Мне лично интереснее посмотреть на процесс вставки по одной записи. Чисто из спортивного интереса. А заодно нагрузить сервак не только вставкой новых, но и чтением уже существующих данных. Потому как если нет параллельной обработки уже имеющихся данных, то и нет смысла отказываться от промежуточного CSV, или временных таблиц, или чего угодно оптимизирующего.

А что интересного то в вставке по одной записи ? Если это делать в пределах одной транзакции, то любая РСУБД в конце концов умрет. Если после каждой вставки делать COMMIT, то та же ASA покажет очень приличное время - я где то пару месяцев назад делал примерно такой тест, когда тестировал режимы работы различных уровней изоляции ASA. Особенно меня интересовала вставка на уровне serializable, когда шла непрерывная вставка записей с пары сессий, а другая пара сессий в это время на serializable запросы гоняла по существующим данным. Тест я правда проводил не с целью выявления скорости вставки, а больше с целью разобраться с блокировками и основными приемами работ при таких ситуациях, но что помню точно, что никаких проблем по скоросте со вставкой записей я особо не наблюдал.
15 апр 05, 06:54    [1470347]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Вдогонку - Алексей жал именно на то, что РСУБД проигрывают не по вставке по одной записи, а на констрейнтах и могут догнать ООСУБД только, если их отключать. Я же как раз тестом показал, что они могут не только догнать, но и перегнать даже с включенными констрейнтами.

Кстати не надо думать, что LOAD TABLE так сильно ускоряет процесс загрузки данных по сравнению с позаписной вставкой. Единственное, где есть реальное ускорение - это то, что вставляемые записи не пишутся в лог-файл. Все остальное - проверки констрейнтов, построение индексов (которых было на той таблице целых 3), накладывание shared-блокировок на записи в родительских таблицах (данные грузятся порциями и соотвествующе блокировки тоже идут порциями, чтобы на момент длинной загрузки не возникло ситуации, что все родительские таблицы полностью и надолго блокированы) - в общем все в штатном режиме.
15 апр 05, 07:04    [1470349]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
ASCRUS
А что интересного то в вставке по одной записи ?

Да в общем-то ничего ничего интересного. Я же говорю - шпортивный интерес :).

ASCRUS
Если это делать в пределах одной транзакции, то любая РСУБД в конце концов умрет

BTW, у Алексея именно в одной транзакции на всю таблицу, если я правильно понял. Только что обратил на это внимание.

Собственно вопрос к Алексею Ровдо - а на х*я оно у вас так? Если вы делаете коммит только после вставки всех данных в таблицу - то вставляйте сразу все данные. Импортом.

ASCRUS
Если после каждой вставки делать COMMIT, то та же ASA покажет очень приличное время

Верю. Но хочу увидеть "очень приличное время" выраженное в часах и минутах.

ASCRUS
Особенно меня интересовала вставка на уровне serializable, когда шла непрерывная вставка записей с пары сессий, а другая пара сессий в это время на serializable запросы гоняла по существующим данным.

Как я уже сказал - меня это тоже интересует. Как с этим будут обстоять дела у FastObject?
15 апр 05, 07:09    [1470351]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
ASCRUS
Вдогонку - Алексей жал именно на то, что РСУБД проигрывают не по вставке по одной записи, а на констрейнтах и могут догнать ООСУБД только, если их отключать.

Именно по вставке по одной записи, при том условии, что каждая такая вставка влечет за собой необходимость проверки констрейнтов. Если я правильно понял.

Ща поеду на работу и погляжу, как там мой аксес констрейнты миллион раз проверяет. Специально ничего не модифицировал по сравнению с Алексеем (ну разве что в транзакцию не обернул вставку в каждую таблицу).
15 апр 05, 07:13    [1470357]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Alexey Rovdo
[quot vadiminfo]
2. Почему вы решили что моя конфигурация Oracle плоха настолько, что быстродействие на "вставке" падает более чем на порядок?
5. Почему вы решили, что моя конфигурация Версанта так хороша, что ее нельзя улучшить?


Двух этих пунктов достаточно, чтобы поставить под сомнение результаты Ваших тестов. Что с чем Вы сравниваете ??? Почему Вы решили, что достаточно привести параметры init.ora, чтобы отпали ВСЕ вопросы по настройке ? Почему Вы решили, что Ваш код (довольно неряшливый) является образцом программирования в Oracle ? Что Вы доказали ??? Что констрейнты замедляют массовую заливку ? Но это и без Вас все прекрасно знали. Задачи массовой заливки решаются принципиально другими способами.

И последний вопрос - НАФИГА мне тратить свое время, чтобы разбираться в Ваших тестах, которые ЗАВЕДОМО ничего не доказывают, в чем-то Вас убеждать ?

Повторюсь: отсутствует мотивация
15 апр 05, 07:56    [1470386]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Лох Позорный
ASCRUS
Вдогонку - Алексей жал именно на то, что РСУБД проигрывают не по вставке по одной записи, а на констрейнтах и могут догнать ООСУБД только, если их отключать.

Именно по вставке по одной записи, при том условии, что каждая такая вставка влечет за собой необходимость проверки констрейнтов. Если я правильно понял.

Ща поеду на работу и погляжу, как там мой аксес констрейнты миллион раз проверяет. Специально ничего не модифицировал по сравнению с Алексеем (ну разве что в транзакцию не обернул вставку в каждую таблицу).

Ладно, пока я завтракал, набросал быстрый тестик для демонстрации скорости позаписной вставки:
небольшая структурка с 2-х табличек:
CREATE TABLE "DBA"."MainTable" (
	"Id" integer NOT NULL,
	"Name" varchar(50) NOT NULL,
	PRIMARY KEY ( "Id" )
);

CREATE TABLE "DBA"."ChildTable" (
	"Id" integer NOT NULL,
	"Name" varchar(50) NOT NULL,
	"Main_id" integer NOT NULL,
	PRIMARY KEY ( "Id", "Main_id" )
);

ALTER TABLE "DBA"."ChildTable" 
  ADD NOT NULL FOREIGN KEY "MainTable" ( "Main_id" ) 
  REFERENCES "DBA"."MainTable" ( "Id" ) 
  ON UPDATE CASCADE ON DELETE CASCADE;

Вставка в MainTable курсором миллиона записей и
вложенным курсором на каждую из них по 10 записей
в таблице ChildTable:
BEGIN
  MESSAGE 'Start: ' || Now() TO CLIENT;

  // Цикл на вставку в главную таблицу 1 миллиона записей
  FOR lMain AS cMain NO SCROLL CURSOR FOR
    SELECT Row_Num AS @Main_id
    FROM sa_RowGenerator(1, 1000000)
  DO
    INSERT INTO MainTable (Id, Name)
    VALUES( @Main_id, 'Rec: ' || @Main_id);

    // Цикл на вставку в дочернюю таблицу 10 миллионов записей
    // (по 10 записей на каждую из главной)
    FOR lChild AS cChild NO SCROLL CURSOR FOR
      SELECT Row_Num AS @Child_id
      FROM sa_RowGenerator(1, 10)
    DO
      INSERT INTO ChildTable (Id, Name, Main_id)
      VALUES (@Child_id, 'Rec: ' || @Child_id, @Main_id);
    END FOR;

    // Зафиксировать после каждой вставки главной-дочерних
    COMMIT;
  END FOR;

  MESSAGE 'Finish: ' || Now() TO CLIENT;
EXCEPTION
  WHEN OTHERS THEN
    MESSAGE ErrorMsg() TO CLIENT;
    ROLLBACK;
END;
Трайс:
Start: 2005-04-15 07:23:24.609
Finish: 2005-04-15 07:54:23.796
Execution time: 1859.203 seconds

Смотрим сколько записей теперь в таблицах:
SELECT 'Main' AS TableName, Count(*) AS Count
FROM MainTable
UNION ALL
SELECT 'Child' AS TableName, Count(*) AS Count
FROM ChildTable
TableNameCount
'Main'1000000
'Child'10000000
15 апр 05, 08:02    [1470395]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
2 Gluk (Kazan)
Повторюсь: отсутствует мотивация

Так и запишем - не шпортшмен :)

2 ASCRUS
Ладно, пока я завтракал, набросал быстрый тестик для демонстрации скорости позаписной вставки:

Ну и отлично.
Если Alexey Rovdo утверждает, что РСУБД проигрывают на порядки при вставке одиночных записей со включенными констрейнтами - то у него в аналогичном тесте должно получится время не больше 18 секунд.
З.Ы. А аксес все равно быстрее вставляет, чем ASA
15 апр 05, 09:38    [1470523]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Лох Позорный
З.Ы. А аксес все равно быстрее вставляет, чем ASA

Ухто бы сомневался :) В основном вся нагрузка в ASA идет если на то пошло, не на констрейнты, а на лог-файл, в который довольно много информации пишется не только по проводимым операциям, откатам и чекпойнтам, но и немалый обьем информации для механизма репликацией, чтобы он мог полноценно работать. Например, в комплете с ASA идет утилита трансляции лога, которая может с лог-файла за указанный период времени, по указанным юзерам вытаскивать в SQL скрипты весь ход их работы с БД (что делает и сама репликация). Так что, например, по логу всегда можно посмотреть, какой же ... (юзер) грохнул все записи в таблице :) Ну а чекпойнты, которые пишутся и в лог и в саму БД это вообще отдельная песня (механизм, чем то по принципам немного смахивающий на версионность страниц/блоков) - например, использовав для загрузки данных LOAD TABLE и указав опцию CHECKPOINT ON, я сказал ASA, что если сервер остановится, т.е. операция будет критически прервана, то при запуске БД при проведении отката, не должно оказаться всех записей, которые успели вставиться из CSV файла. Если же я бы указал CHECKPOINT OFF, то это бы означало, что ASA при старте сервере нашла бы снова этот файл и повторила бы его загрузку.
15 апр 05, 10:20    [1470637]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
ASCRUS

1. Ничего РСУБД не тормозят, в т.ч. на констрейнтах, если знать особенности каждой конкретной СУБД


А мне пока кажется, что тормозят. И полагаю ваш нижеследующий тест на двух таблицах это в какой-то мере демонстрирует (подробнее об этом в следующем посте).

ASCRUS

2. Язык хранимых процедур может быть и медленнее Java, а вот SQL быстрее. Я сгенерил те же обьемы данных в темповые таблицы вообще за детское время (c 18:36 по 18:49)


SQL быстрее, но вы генерили ваши данные не так, как я, поэтому и такое время. Похоже вам уже пояснили в чем разница.

ASCRUS

3. В Вашем коде не все смогли разобраться, только те, кто знал Java. Я более чем уверен, что мои приведенные скрипты поймут все РСУБД-шники, не смотря на то, что они писанны на диалекте WatcomSQL, который имеет свои различия по сравнению с другими диалектами.


Я уже писал, что мне неохота делать разные программы для FO и РСУБД. Имея Java-код для FO, я просто переделал его побыстрому. Неужели Java так трудно читаем? Я могу перейти на C++ или C#, если есть какие-то принципиальные возражения против Java.

ASCRUS

4. ASA 5-7 версий считалась СУБД реального времени и поддерживала платформу QNX. До сих пор она крутится во многих местах и снимает показания с счетчиков (в России например на буровых вышках). Начиная с 8-ой версии ее уже нельзя считать СУБД реального времени - нет поддержки QNX, полностью переписана архитектура ядра с переориентацией на работу с большими обьемами данных. Однако как Вы видите и последняя 9-ая версия довольно шустро проводит операции вставок и изменений.


FastObjects t7 фактически и есть система реального времени (Windows, Windows CE, Linux, Solaris, HP-UX, AIX, WxWorks ... ). Как я уже говорил, эта ООСУБД применяется как встраиваемая в составе разнообразного телекоммуникационного оборудования.
15 апр 05, 10:54    [1470745]     Ответить | Цитировать Сообщить модератору
 Re: Объектные СУБД от Versant Corporation (FastObjects .NET, FastObjects t7, Developer Suite)  [new]
Alexey Rovdo
Member

Откуда: Москва
Сообщений: 913
Лох Позорный

Кажется Alexey Rovdo пытаетсяпоказать преимущество Versant'а именно на куче мелких операций. А вы решаете немного другую задачу.


Именно так. Заливка больших объемов заранее подготовленных данных неинтересна - это чисто административная задача. Разумеется, DBA как раз такими задачами на практике и занимаются, поэтому им кажется, что это очень важно. Но я практически не встречал ситуаций, когда было важно быстродействие при типовой массовой заливке (впрочем не исключаю, что и такое может иметь место). Обычно данные операции выполняются однократно и проще подождать, чем придумывать способы ускорения процесса. Совсем другое дело - куча мелких операций - это действительно может быть обусловлено самой предметной областью и система вынуждена работать именно в таком (и никаком другом) режиме. Пример - встраиваемые базы данных разнообразного оборудования.
15 апр 05, 11:01    [1470771]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 23 24 25 26 27 [28] 29 30 31 32 .. 34   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить