Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Сравнение различных SQL-серверов  [new]
DimaR
Member

Откуда:
Сообщений: 1570
to Paul Atreidies:
Например в Oracle в тврем конкретном примере, не надо так извращаться, просто Oracle поддерживает иерархические запросы в SQL.
А так же в SQL есть аналитические функции которые обладают очень большими возможностями.

Принцип работы аналитических функций можно представить примерно следующим образом.

Допустим, что у нас есть результирующий набор данных, полученный в результате некоторой выборки. Этот набор данных может быть еще не отсортирован предложением ORDER BY, но все соединения и все условия WHERE, GROUP BY, HAVING уже выполнены. На каждую запись в этом наборе накладывается "рамка", размеры и положение которой определяются в соответствии с некоторым аналитическим условием. Через эту рамку мы как бы видим не только саму текущую запись, но и некоторые соседние с ней, т.е. целую группу записей. (Впрочем, рамка может быть наложена таким образом, что в нее попадают не соседние, а другие записи, и даже сама текущая запись не обязана попадать в рамку). Эта рамка называется "окном" (window) текущей записи. Аналитическая функция для текущей записи вычисляет агрегированное значение над группой "видимых через окно" записей. По мере "продвижения" по курсору изменяется текущая запись, для каждой из них определяется свое окно. При этом размер и положение окна могут меняться. Поэтому говорят, что окно является "скользящим" (sliding window). Размер окна может зависеть как от физического количества строк, так и логического интервала, такого, например, как время.

еще тут
http://www.interface.ru/oracle/anal-itiv.htm
16 апр 03, 21:01    [176973]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
c127
Guest
Paul Atreidies > Поддерживает ли сервер рекурсию (хоть какую) в операторе SELECT?.

Оракл - Да
Оракл поддерживает рекурсивные запросы с версии 8, а может раньше.

Вопрос:
Поддерживается ли операция MINUS над множествами (т.е. в запросах, по аналогии с UNION)?

Оракл, ДБ2, postgreSQL (по-моему) - да.
17 апр 03, 01:01    [177030]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
> Зеркалирование транзакционного лога: MS SQL - Нет. А зачем этим заниматься серверу базы данных ?

Например нет денег на аппаратный RAID. Встречается сплошь и рядом на Оракловых серверах в нашей "богатой" стране. Думаю на МSSQL-инсталляциях этот процент еще выше.

Или в MS не страшно потерять лог?
17 апр 03, 01:44    [177037]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
SiDen
Member

Откуда:
Сообщений: 518
Ту х:
Согласованность по чтению на уровне транзакций есть у MSSQL без мультиверсионности?
Пример. Два прользователя.
Момент времени 1. Первый пользователь открывает транзакцию, что-то делает.
Второй делает апдейт таблицы2.
Момент времени 2. Второй читает из таблицы2. Второй еще что-то делает.
Оракл дает гарантию, что в момент времени 2 первый пользователь получит данные из таблицы 1 на момент времени 1.
MSSQL не дает такой гарантии имхо. Поправьте, если я не прав.

ЗЫ: вообще-то я работаю с сиквелом, с ораклом только начинаю знакомиться, и различия достаточно хорошо видны.

По поводу зеркалирования лога: мелочь, а приятно. Отказоустойчивость повышается избыточностью в данном случае.
17 апр 03, 08:51    [177112]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
x
Guest
2 SiDen

Согласованность по чтению на уровне транзакций есть у MSSQL без мультиверсионности?
Пример. Два прользователя.
Момент времени 1. Первый пользователь открывает транзакцию, что-то делает.
Второй делает апдейт таблицы2.
Момент времени 2. Второй читает из таблицы2. Второй еще что-то делает.
Оракл дает гарантию, что в момент времени 2 первый пользователь получит данные из таблицы 1 на момент времени 1.
MSSQL не дает такой гарантии имхо. Поправьте, если я не прав.


Да есть (а иначе как бы работали на MS SQL). Но достигается другим способом - блокировками. (Мне тоже значительно больше нравится вариант с многоверсионностью)

По поводу зеркалирования лога: мелочь, а приятно. Отказоустойчивость повышается избыточностью в данном случае.

Это просто рудимент позавчерашнего дня. Зеркалирование давным давно встроено в операционные системы, а теперь и в большинство материнских плат (если уж не хватило денег на нормальный RAID).
17 апр 03, 09:54    [177177]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6904

По поводу зеркалирования лога: мелочь, а приятно. Отказоустойчивость повышается избыточностью в данном случае.

Это просто рудимент позавчерашнего дня. Зеркалирование давным давно встроено в операционные системы, а теперь и в большинство материнских плат (если уж не хватило денег на нормальный RAID).


Зеркалирование в данном случае защищает ещё и от ошибки обслуживающего персонала.
17 апр 03, 10:05    [177190]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
>Это просто рудимент позавчерашнего дня. Зеркалирование давным давно встроено в операционные системы, а теперь и в большинство материнских плат (если уж не хватило денег на нормальный RAID).

Это не рудимент, а просто гибкость продукта. RAID не защитит от программного сбоя, ошибки сервера. Дублирование лога от части ошибок может защитить. По крайней мере в Oracle. Имел как-то разговор с одним забугорным админом. Для них самый важный критерий при построении системы была надежность. Так вот логи у него дублировались, каждая копия шла на отдельный RAID.
17 апр 03, 10:15    [177207]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
x
Guest
2 killed & Scott Tiger

Зеркалирование в данном случае защищает ещё и от ошибки обслуживающего персонала.

RAID не защитит от программного сбоя, ошибки сервера. Дублирование лога от части ошибок может защитить


Поясните, не въезжаю. От каких таких ошибок программное зеркалирование защищает лучше аппаратного.
17 апр 03, 10:22    [177212]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
ну самый простейший вариант - это ошибка файловой системы.
RAID кстати тоже небезупречен. Ну например может отказать батарея кэша в самый неподходящий момент. Я понимаю, что вероятность отказа современных RAID-контроллеров не так уж и велика. Хотя если речь об интегрированных в мать поделках ...
17 апр 03, 10:55    [177255]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
SiDen
Member

Откуда:
Сообщений: 518
Ту х:
Вы имеете в виду ручное блокирование? Т.е. в приведенном примере после открытия транзакции я должен залочить все используемые таблицы для селектов? Что бы никто ничего не изменил до того, как в транзакции я дойду до того места что бы выбрать оттуда данные. Хотя я конечно согласен, что реализовать это можно. По условиям топикатора все проходит, согласен.
17 апр 03, 11:03    [177269]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
x
Guest
2 SiDen

Вы имеете в виду ручное блокирование? Т.е. в приведенном примере после открытия транзакции я должен залочить все используемые таблицы для селектов? Что бы никто ничего не изменил до того, как в транзакции я дойду до того места что бы выбрать оттуда данные. Хотя я конечно согласен, что реализовать это можно. По условиям топикатора

Ну вы уж совсем не уважаете Microsoft :)
Нет, конечно, не ручное - автоматическое.

Кстати это не такая уж редкость. Также у Sybase, также было у Watcom.
17 апр 03, 12:12    [177350]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
Paul Atreidies
Member

Откуда:
Сообщений: 35
2 DimaR, c127

Например в Oracle в твoем конкретном примере, не надо так извращаться, просто Oracle поддерживает иерархические запросы в SQL.

Реализацию можно? Просто интересно посмотреть. С кратким комментарием, если используются особенности реализации SQL.
17 апр 03, 12:42    [177403]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
DimaR
Member

Откуда:
Сообщений: 1570
Самый простой пример из доки
The following statement returns all employees in hierarchical order. 

The root row is defined to be the employee whose job is 'PRESIDENT'.
The child rows of a parent row are defined to be those who have the
employee number of the parent row as their manager number.

SELECT LPAD(' ',2*(LEVEL-1)) || ename org_chart,
empno, mgr, job
FROM emp
START WITH job = 'PRESIDENT'
CONNECT BY PRIOR empno = mgr;
ORG_CHART EMPNO MGR JOB
------------ ---------- ---------- ---------

KING 7839 PRESIDENT
JONES 7566 7839 MANAGER
SCOTT 7788 7566 ANALYST
ADAMS 7876 7788 CLERK
FORD 7902 7566 ANALYST
SMITH 7369 7902 CLERK
BLAKE 7698 7839 MANAGER
ALLEN 7499 7698 SALESMAN
WARD 7521 7698 SALESMAN
MARTIN 7654 7698 SALESMAN
TURNER 7844 7698 SALESMAN
JAMES 7900 7698 CLERK
CLARK 7782 7839 MANAGER
MILLER 7934 7782 CLERK
17 апр 03, 13:09    [177445]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
Paul Atreidies
Member

Откуда:
Сообщений: 35
2 DimaR
Спасибо. Кратко и наглядно :)
17 апр 03, 13:16    [177456]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
SiDen
Member

Откуда:
Сообщений: 518
Ту х:
Да я не такого уж и плохого мнения о МС :)
Берем QA
Открываем два окна, в одном:

begin tran
insert into a
select *
from Distributors with (nolock)
commit;

begin tran
select count(*) from a
waitfor delay '000:00:10'
select count(*) from a
commit;


Во втором:

begin transaction t2
delete from a
commit tran t2


Запускаем первое, пока идет ожидание 10 секунд - запускаем второе.
В результате получаем - второй селект в первом окне выдаст - 0.
Т.е. без явной залочки на мсскле не обойтись. Поправьте, если я не прав.
17 апр 03, 14:17    [177592]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
x
Guest
2 SiDen

Запускаем первое, пока идет ожидание 10 секунд - запускаем второе.
В результате получаем - второй селект в первом окне выдаст - 0.
Т.е. без явной залочки на мсскле не обойтись. Поправьте, если я не прав.


В MS SQL это зависит от установленного уровня изоляции. При установке уровня REPEATABLE READ или SERIALIZABLE второе окно будет ждать окончания транзакции первого.
17 апр 03, 15:01    [177655]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
SiDen
Member

Откуда:
Сообщений: 518
Ок, согласен.
Только REPEATABLE READ в 2000 уже тю-тю. Только SERIALIZABLE.
Here is a summary of phantom protection for both SQL Server versions 6.5 and SQL Server 2000 using SET TRANSACTION ISOLATION LEVEL.
Phantom protection SQL Server 6.5 SQL Server 2000
REPEATABLE READ Yes No
SERIALIZABLE Yes Yes
17 апр 03, 15:08    [177669]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
x
Guest
2 SiDen

Только REPEATABLE READ в 2000 уже тю-тю. Только SERIALIZABLE.

Не понял. Куда тю-тю?
Если в смысле нет его - так это неверно.
Если в смысле работает не так как я сказал - это врядли, я перед ответом честно проверил именно на 2000.
17 апр 03, 15:23    [177696]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
SiDen
Member

Откуда:
Сообщений: 518
Работает именно так, как Вы сказали, я тож проверял :).
Меня смутила выдержка из БОЛа, которую я привел выше
17 апр 03, 15:41    [177730]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
c127
Guest
Paul Atreidies > Поддерживает ли сервер рекурсию (хоть какую) в операторе SELECT?.

MSSQL - нет.

Можно попытаться реализовать через UDF, возвращающих рекорд сет, если рекурсия в этом случае отработает. Но по-моему не отработает. Поправьте, кто в курсе.
18 апр 03, 01:48    [178295]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
Дед Маздай
Member

Откуда:
Сообщений: 655
Что-то мы здесь все в одну кучу намешали. Предлагаю разделить обсуждения по отдельным дискуссиям.
18 апр 03, 12:05    [178458]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
Paul Atreidies
Member

Откуда:
Сообщений: 35
2 c127
Вопрос:
Поддерживается ли операция MINUS над множествами (т.е. в запросах, по аналогии с UNION)?


дб2 - есть объединение, разность и пересечение. Кстати, интересно, есть ли разница в планах если пересечение/разность строить вложенным запросом? Есть смутное подозрение что торой вариант может быть и предпочтительнее в некоторых случаях.

2 All
В дб2 есть возможность связать с индексом подмножество столбцов таблицы. Т.е. для построения индекса они использоваться не будут, но при выборке по этим полям с использованием данного индекса результат будет строится только сканированием индекса.
Что у других?
19 апр 03, 15:51    [179474]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
DimaR
Member

Откуда:
Сообщений: 1570
В дб2 есть возможность связать с индексом подмножество столбцов таблицы
В Oracle тоже
"Эtable is created as an index-organized table. In an index-organized table, the data rows are held in an index defined on the primary key for the table."
19 апр 03, 16:29    [179482]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
Paul Atreidies
Member

Откуда:
Сообщений: 35
2DimaR
Извини, не совсем понял - это определенный вид таблиц, свойство только PK, или есть такая возможность организации для любого/всех индексов? При этом все поля сохраняются с индексом или можно указать какие?
19 апр 03, 18:38    [179498]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение различных SQL-серверов  [new]
killed
Member

Откуда: Moscow
Сообщений: 3526
Это по сути таблица, но данные хранятся в сразу в древовидной структуре. Если обычный индекс не имеет смысла без таблицы (в листьевых блоках индекса прописаны указатели на строки таблицы), то здесь вместо указателей хранятся сами данные). Пример использования: небольшие справочные таблицы. В IOTs можно вывести часть столбцов в отдельный сегмент хранения. Пример: допустим в IOT три поля. ID (NUMBER), CUSTOMER_NAME (VARCHAR2(30)) и DESCRIPTION (VARCHAR2(4000). В последнем поле хранится какая-то описательная информация, к которой обращаются редко, но сама она занимает много места. Поэтому для быстроты нахождения имени пользователя по его ID в данном случае выгодно сохранить индексное дерево компактым, "убрав" вторичную информацию.
19 апр 03, 21:13    [179511]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить