C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сравнение серверов БД
AVC
Отправлено: 17.06.2004, 10:41


Ветеран

Группа: Модератор
Сообщений: 1583



Вот выполнял для руководства. Может кого заинтересуют результаты:
CODE

Тестирование скорости выполнения запросов на разных СУБД

Для проведения эксперимента были выбраны таблицы и запросы из реально действующей системы . Запросы реализуют рабочий цикл по выборке абонентов, которым нужно по телефону напомнить об имеющейся у них задолженности (обзвонка).

1. Delete удаляет остатки прошлого задания из рабочей таблицы.
2. Insert формирует в рабочей таблице новое задание.
3. Select 1 то же самое что и Insert только без вставки записей но с обрамляющей сортировкой для извлечения всех записей (для оценки времени выборки и времени добавления записей).
4. Select 2 выборка из рабочей таблицы нового задания для экспорта в dbf файл.

Celeron 1.8/256/IDE Windows 2000

СУБД      Oracle_8i  Sybase_Asa6   MaxDB_7508   FB_1.5
Место     476M        408M              795M               378M
Время выполнения (попытка 1 / попытка 2)
Delete     0.5/0.3     4                     2                     таких
Insert      28 / 14     233                457                  запросов
Select1   10 / 10      210               465                   не
Select2   1   /  1       12                 17                     выполняет

Xeon 2*2.8/2Gb/Raid(1 и 1+0) Linux SLES 8

СУБД      Oracle_8i  Oracle_9
Delete     0.3/0.1     0.18/0.14
Insert      13 / 7       18/18
Select1    4  / 4        16/15
Select2    0.15         0.17


Полный текст отчета можно взять здесь
AVC
Отправлено: 17.06.2004, 10:47


Ветеран

Группа: Модератор
Сообщений: 1583



Потерялся прикрепленный файл

User Attached Image Скачать файл
TestDB.doc


Deem
Отправлено: 21.06.2004, 09:38


Мастер участка

Группа: Участник
Сообщений: 327



А цены на продукты? А юзер Оракле сможет администрить? А на 128 Оракле будет работать? А на 64? А на 32? biggrin.gif
И запросы FB поддерживает: в ХП,с небольшими изменениями. cool.gif

Первый Delete и Select 2 так вобще самые обычные. Как же FB их не выполняет?
А эта фигня хитрая, конечно:
Select t5.*
From
(Select
Null as PAObzvonID ...

Выбираем из таблицы с именем Null ??? Для демлнстрации хитровыкрученности некоторых серверов может и подходит, но для дела?

Так как FB был снят с соревнований из-за предвзятого отношения, считаю их результаты недействительными.


Отредактировано Deem — 21/06/2004, 11:11
olegenty
Отправлено: 21.06.2004, 10:27


Ветеран

Группа: Модератор
Сообщений: 2412



присоединяюсь к Deem. будет свободное время — сделаю на FB.
AVC
Отправлено: 21.06.2004, 10:37


Ветеран

Группа: Модератор
Сообщений: 1583



Я никого не агитирую ни за какую СУБД. Каждый решает сам. Информация была для ознакомления
Итак по порядку:
1.
QUOTE
А цены на продукты? А юзер Оракле сможет администрить? А на 128 Оракле будет работать? А на 64? А на 32?

Цены и вопросы администрирования выходят за пределы данной темы. Насколько я знаю на сегодня
Oracle в режиме ознакомления бесплатен. Min поставка (5user) 750$. 2x-проц. сервер с неогранниченным числом пользователей 5000$
MaxDB сервер с неогранниченным числом пользователей 1500$
Реальный клиент Oracle вместе с нашим приложением стоит на 133/Win95/16Mb

2.
QUOTE
Первый Delete и Select 2 так вобще самые обычные. Как же FB их не выполняет?

Delete конечно выполняется. Конечно, при помощи ХП можно много, но хотелось бы сделать на обычном SQL так как известно (по крайней мере мне) что самый сложный Select работает быстрее чем открыть курсор и обработать его по строкам.

3.
QUOTE
Выбираем из таблицы с именем Null ???

Если присмотреться, то можно заметить что это не таблица с именем Null а добавление в результирующий запрос поля со значением Null

4.
QUOTE
Для демлнстрации хитровыкрученности некоторых серверов может и подходит, но для дела?

Могу повторить, то что сказано в начале: Запросы реализуют РЕАЛЬНО ДЕЙСТВУБЩИЙ рабочий цикл ИЗ РАБОТАЙЩЕЙ ПРОГРАММЫ по выборке ...

5.
QUOTE
Так как FB был снят с соревнований из-за предвзятого отношения, считаю их результаты недействительными.

У вас есть три пути.
а. Оставить все как есть.
б. Переписать запросы на FB и отправить мне. Я их включу в тест. Я не стал писать SP как только понял что Select From Select не работает.
в. Я могу выложить вам данные, а вы сделаете по ним выборки у себя.
Deem
Отправлено: 24.06.2004, 09:45


Мастер участка

Группа: Участник
Сообщений: 327



Не..... Не хочу сервер за $5000! А на триале сами работайте. smile.gif

В наше тревожное время .... короче, когда дофига клиентов и данных, может и оракле сгодится. Но если FB (он же IB модернизированный wink.gif ) вполне подходит "Абрамсу" (с перезагрузкой после каждого выстрела и мех/водителем в роли админа), значит и нам он подойдет.
А запрос из запроса — так это один запрос с нормальными условиями отбора. smile.gif Ну если очень хочется такой многоступенчатости, то можно наделать View (что и есть результатом запроса) и выбирать запросом уже из них.

А что касается 32МБ, так это я не про клиента, а про сервер.

AVC
Отправлено: 24.06.2004, 13:56


Ветеран

Группа: Модератор
Сообщений: 1583



Не хотите и не надо. Ваше право. Однако дешовое не значит хорошее а стоимости серъезных серверов БД почти одинаковы (поэтому MsSql не был включен в испытания). Oracle в режиме ознакомления это не trial а полнофункциональный сервер (где кончается режим ознакомления я толком не знаю, наверное при начале коммерческого использования)
QUOTE
А что касается 32МБ, так это я не про клиента, а про сервер

Для абсолютно любой программы можно создать условия в которых она работать не сможет.

Select на Select это не прихоть а удобства, наследуемые от стандарта SQL92, который FireBird повидимому не соблюдает
CODE

Оператор SELECT имеет в стандарте SQL92 следующее формальное описание:
SELECT [DISTINCT]
{ {function_agregate | expr [AS new_field_name] } .,:
| specification.*
| *
[INTO list_variable]
FROM {{ имя_таблицы [AS] [table_alias] [(field .,:)]}
| {subquery [AS] subquery_alas [(field .,:)]}
| union_table
| constructor_of_table_value
| {TABLE имя_таблицы [AS] alias [(field .,:)]}
} .,:
[WHERE condition]
[GROUP BY {{ имя_таблицы | alias }.field} .,: {COLLATE name]]
[HAVING condition]
[{ UNION | INTERSECT | EXCEPT } [ALL]
[CORRESPONDING [BY (field.,:)]]
SELECT_operator | {TABLE имя_таблицы} | constructor_of_table_value [ORDER BY] {{field_result [ASC|DESC]}.,:}
|{{ integer [ASC|DESC]}.,:};


У серьезного сервера БД select может стоять везде, где используется константа или выражение, лишь бы он не противоречил правилам (как имя переменнй в C)

Речь идет не о принципиальной невозможности сделать что либо а об уровне удобст, надежности и скорости ответа.

Выбор сервера должен зависить не только от стоимости и от уровня знакомства с ним исполнителя а от потребностей поставленнй задачи. Поэтому то что хорошо для танка не катит для банка (простите за невольный каламбур).

Отредактировано AVC — 24/06/2004, 14:44
Deem
Отправлено: 25.06.2004, 09:26


Мастер участка

Группа: Участник
Сообщений: 327



Так о танках и банках: банки вобще все — гнилые конторы. Пообчался. И сервера за $5000 они только и могут купить. В основном же, маленькие и средние конторы, из которых состоит "бизнес" на 90%, больше смахивают на танки с любой стороны. А мы, девелоперы, и с MSSQL могем, и с Оракле, и с клиппером, и с фоксом, и с ехелем и ехесом. Все определяет естественный отбор. Заказчики берут не то, что круче smile.gif, а то, что могут взять, и то, с чем потом будут иметь меньше всего проблем.
Я вобще против глобализации и корпораций всяких. biggrin.gif
Я бы от винды отказался (и еще сравнилово ОС-ов всяких привел), однако юзер сидит на винде, значит и мне — туда же. sad.gif

ЗЫ: а все ж запрос из запроса — глупость. Делаешь один запрос, а условия двух объединяешь AND.
А на крутой тачке, навроде ораклевского сервера, и FB будет летать.
Delphi компилит намного быстрее Builder-а, однако я люблю С++.
VC компилит лучше Buildera-а, но я люблю Borland.
Oracle работает быстрее IB/FB, однако в IB впервые появились события и многоверсионность. Сравнвать надо блокировки и торомоза при одновременном редактировании таблиц.


Отредактировано Deem — 25/06/2004, 10:56
AVC
Отправлено: 25.06.2004, 10:35


Ветеран

Группа: Модератор
Сообщений: 1583



Правильно, для каждой проблемы — своя самая подходящая СУБД. И вопрос не только в том "на чем могем" а в том "как мы на этом могем". InertBase он же FireBird для моей конторы (не банка) самое худшее решение, а тесты проводились для поиска варианта замены Oracle.

По зы:
В тесте приведены параметры "тачек". Целью теста и было "кто как будет летать".
QUOTE

запрос из запроса — глупость

Не глупость а свобода. Так можно сказать что и классы в C++ глупость, так как все можно сделать на обычном C при помощи структур, функций и адресов.
QUOTE

условия двух объединяешь AND

Перепишите Select 1 из примера и я с радостью включу FireBird в тест. Мне тоже хочется иметь картину соростей выполнения.
QUOTE

Сравнвать надо блокировки и торомоза при одновременном редактировании таблиц.

Давайте напишем совместный тест. Я берусь запустить его на Oracle, Subase, MaxDB. Тест предпочтительно иметь на языке SQL.
Deem
Отправлено: 29.06.2004, 11:21


Мастер участка

Группа: Участник
Сообщений: 327



Ой, неохота мне тесты писать.
А насчет свободы, так это если кто другой запрос написал, а тя можешь из него свои данные выбрать — это свобода. А когда приходится оба запроса писать самому — это самообман. А первый вариант реализуется при помощи view.
А С++ — это шаг в будущее. Он конкретно помагает писать большие проги. Сам знаю, как приходилось дофига функций сосздовать, делающих пости одно и тоже, только оперировать разными данными. Одних имен не напосешся. А для объентов все одинаковые функции (методы) одинаково называться могут, а еще сами объекты им передевать не надо. Так что С++ — это таки да, свобода. smile.gif

Отредактировано Deem — 29/06/2004, 12:28
AVC
Отправлено: 29.06.2004, 12:40


Ветеран

Группа: Модератор
Сообщений: 1583



Если вы понимаете свободу выражения в C++, то почему же вы запрещаете такую свободу в языке SQL. На все случаи жизни wiev'ов не напасешся (и даже не хочу к этому стремиться). А вам не приходилось использвать Select, возвращающий одно значение, в качестве аргумента функции или вместо выбираемого поля? Это тоже свобода выражения. Хорошо спроектированный Select заменяет большой кусок кода на языке приложения и позволяет добиться большей универсальности.
Deem
Отправлено: 22.07.2004, 10:53


Мастер участка

Группа: Участник
Сообщений: 327



Про свободу: за нее платить приходится. Кто платит дополнительными временем на дебаг, кто — дополнительными глюками. Работающие с С++ платят за всвободу временем компиляции (паскаль быстрее раз в 2-10). Так это ж после компиляции все быстро работает. А SQL — сервачек за свободу отбирает время на каждом запросе. Т.е. свобода разработчика отъедает свободу юзера. smile.gif А это уже не просто свобода, а нарушение чьих-то прав.

Вернуться в Работа с базами данных в C++Builder