Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 25 26 27 28 29 [30] 31 32 33 34 .. 75   вперед  Ctrl
 Re: Выбор СУБД!  [new]
проходящий.
Guest
locky
СУБД, не имеющая стейтмента BEGIN TRAN - не имеет права на существование.

Просто кусочек хелпа:
Visual FoxPro 9.0 SP2  
BEGIN TRANSACTION Command
See Also Example

Begins a transaction.
2 фев 09, 20:01    [6769161]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
проходящий.
Guest
И еще небольшой добавчик:

Поддержка транзакций для свободных таблиц и курсоров
В предыдущих версиях Visual FoxPro, транзакции, использующие команду BEGIN TRANSACTION поддерживались только для таблиц, локальных и удаленных данных из баз данных. Транзакции, вовлекающие в процесс свободные таблицы и курсоры, теперь поддерживаются через использование фукнций MAKETRANSACTABLE() и ISTRANSACTABLE(). Для получения более подробной информации смотрите описание функций MAKETRANSACTABLE( ) и ISTRANSACTABLE( ).
2 фев 09, 20:08    [6769175]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Doomer
Member

Откуда:
Сообщений: 213
locky

чего "точно"?

Речь о другом: вместо того, чтобы хвалить фокс, им нужно было спровоцировать разборки MS SQL vs Oracle.
2 фев 09, 20:13    [6769180]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Сахават Юсифов
[quot lockyчего "точно"?
СУБД, не имеющая стейтмента BEGIN КАКОЙ TRAN - не имеет права на существование.

без красного не имеет смысла[/quot]
да нам хотя бы локальный тран....
до распределённого - еще жыть и жыть... да и не нужен он никому....
2 фев 09, 20:17    [6769184]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
проходящий.
locky
СУБД, не имеющая стейтмента BEGIN TRAN - не имеет права на существование.

Просто кусочек хелпа:
Visual FoxPro 9.0 SP2  
BEGIN TRANSACTION Command
See Also Example

Begins a transaction.

Я вам щаз приведу кусочек из хелпа, в котором написано, что существуют вложенные транзакции.
И что - вы тут-же поверите, что вложенные транзакции таки существуют?
(автономные - не вспоминать, они нифига не вложенные).
2 фев 09, 20:18    [6769188]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Doomer
locky

чего "точно"?

Речь о другом: вместо того, чтобы хвалить фокс, им нужно было спровоцировать разборки MS SQL vs Oracle.

а что, в оракле есть begin tran?
2 фев 09, 20:19    [6769191]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
locky
а что, в оракле есть begin tran?

Ну даете :)

begin

  insert ...
  update ...

  commit;

exception

when others thne
   rollback;
   raise_application_error(-20001,'...');
end;
2 фев 09, 20:40    [6769224]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
МСУ,

прочитал вниматель. begin tran - не увидел.
что я делаю не так? (С)
2 фев 09, 20:43    [6769230]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
locky
а что, в оракле есть begin tran?

Конечно, есть.

SQL> declare procedure tran is begin null; end;
  2  
  3  begin tran;
  4  
  5  end;
  6  /

PL/SQL procedure successfully completed
2 фев 09, 20:49    [6769238]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
locky
МСУ,

прочитал вниматель. begin tran - не увидел.
что я делаю не так? (С)


В оракле нет явного оператора, чтобы начать транзакцию и нет автоматического завершения транзакции. Транзакция автоматически начинается с первого оператора, который начал изменения, то есть установил блокировку TX. Заканчивается явным оператором окончания транзакции.
Сравнивать транзакционную модель с сиквелом глупо. Или Вам принципиально надо, чтоб был стейт begin transaction, не пойму я Вас?
2 фев 09, 20:50    [6769240]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Тяжелая артиллерия схитрила
2 фев 09, 20:51    [6769243]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Tapac
Member

Откуда: Альметьевск
Сообщений: 100
Eugenkru1
Короче сделал пока что DBF 160 милионов записей. Компутер AMD Turion 1,6 GHz.
Заполнил все записи уникальными текстовыми значениями. DBF получился 1,7GB
Проиндексировал получил CDX.
Далее берём любое существующее значение из 160 милионов записей этой таблицы: '_2KK2S86M9'.

Выходим и Foxpro для чистоты эксперимента, входим снова и набираем запрос SQL:
SELECT Фамилия from фамилии WHERE Фамилия='_2KK2S86M9' INTO CURSOR результат
Время выполнения запроса составляет 0,06 секунды!

Меняем выражение с целью найти больше записей
SELECT Фамилия from фамилии WHERE Фамилия='_2KK2S86M' INTO CURSOR результат
Время выполнения запроса составляет 0,09 секунды!
Специально для Оленеводов могу проверить на 1 милиарде записей!
Теперь понятно что такое Rushmore?


Предположим, что при выборе СУБД нас ничего не интересует, кроме поиска одной записи в большом объеме данных. Проверим.
Дано:
1. Sony Vaio VGN-AR41SR
2. Windows Vista SP1
3. Visual FoxPro 9.0
4. Oracle Database 10g Enterprise Edition Release 10.2.0.3.0

Создаем миллионную выборку в FoxPro:
SET SAFETY OFF
SET TALK OFF

CREATE TABLE C:\test.dbf ( ID I, Data C(10))
INDEX ON Data TAG Data OF C:\test.cdx

s0 = SECONDS()
n = 1000000
FOR i=1 TO n
	INSERT INTO C:\test.dbf VALUES( i, SYS(2015))
ENDFOR
s = SECONDS()

INSERT INTO C:\test.dbf VALUES( i, "test text")
? 'Время выполнения:' + LTRIM(STR(s-s0,7,3))

Создаем схему в Oracle
CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
GRANT "CONNECT" TO test;
GRANT "RESOURCE" TO test;

CREATE TABLE test.TEST
(
  ID    INTEGER,
  DATA  VARCHAR2(10 BYTE)
)
TABLESPACE USERS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;

CREATE UNIQUE INDEX test.TEST_PK ON test.TEST
(ID)
LOGGING
TABLESPACE USERS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;

CREATE INDEX test.TEST_IDX ON test.TEST
(DATA)
LOGGING
TABLESPACE USERS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


ALTER TABLE test.TEST ADD (
  CONSTRAINT TEST_PK
 PRIMARY KEY
 (ID)
    USING INDEX 
    TABLESPACE USERS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                MINEXTENTS       1
                MAXEXTENTS       2147483645
                PCTINCREASE      0
               ));

Заполняем таблицу в Oracle:
s0 = SECONDS()
n = 1000000
nh = SQLCONNECT( "test", "test", "test")
SQLPREPARE( nh, "INSERT INTO test VALUES(?nId,?cData)")

FOR i=1 TO n
	nId = i
	cData = SYS(2015)
	SQLEXEC(nh)
ENDFOR
s = SECONDS()
nId = i
cData = "test text"
? SQLEXEC(nh)

? 'Время выполнения:' + LTRIM(STR(s-s0,7,3))

Из FoxPro тестируем поиск в dbf:
SET SAFETY OFF
SET TALK OFF

CLEAR ALL
USE C:\test.dbf
n = 100

s0 = SECONDS()
FOR i=1 TO n
	SELECT ID FROM test WHERE data = "test text" INTO CURSOR tmp
ENDFOR
s = SECONDS()

? 'Общее время выполнения:' + LTRIM(STR(s-s0,7,5))
? 'Среднее время поиска:' + LTRIM(STR((s-s0)/n,7,5))

Из FoxPro тестируем поиск в Oracle:
SET SAFETY OFF
SET TALK OFF

n = 100
nh = SQLCONNECT( "test", "test", "test")
SQLPREPARE( nh, "SELECT ID FROM test WHERE data='test text'")

s0 = SECONDS()
FOR i=1 TO n
	SQLEXEC(nh)
ENDFOR
s = SECONDS()

? 'Общее время выполнения:' + LTRIM(STR(s-s0,7,5))
? 'Среднее время поиска:' + LTRIM(STR((s-s0)/n,7,5))

Итак, результаты поиска по таблицам с 1 млн.записей
Среднее время поиска в FoxPro: 0.00049
Среднее время поиска в Oracle: 0.00051

А теперь, наберемся терпения и проведем тот же тест на 100 млн.записей.
Среднее время поиска в FoxPro: 0.05579
Среднее время поиска в Oracle: 0.00053

Евгений, факты -- упрямая вещь.
Для чего я сделал этот тест? Только ...ради Вас.
Поставьте любую доступную серверную СУБД и проверьте сами.
Начать учиться никогда не поздно.

P.S. Хамить и ерничать мне бесполезно -- отвечу только знАчимую часть реплик.
2 фев 09, 20:56    [6769263]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Fox5631
Guest
Tapac,
ты подтверждаешь то, что я написал несколько страниц назад. Ты не читал весь топик.
2 фев 09, 21:09    [6769302]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Fox5631
Guest
skelet
ахах, славно вы тут отжигаете, был бы Евгений и его клон fox3214 (какие-то там цифры я хз) по умнее, так давно бы в этой темке mssql vs oracle развернули

А в качестве вечернего баша хороша-таки темка


Кому это будет интересно?!
2 фев 09, 21:13    [6769309]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
МСУ
Сравнивать транзакционную модель с сиквелом глупо. Или Вам принципиально надо, чтоб был стейт begin transaction, не пойму я Вас?

ну почему сразу "глупо"?
В том же недалёком и недоделанном сиквеле можно сделать SET IMPLICIT_TRANSACTIONS ON - и "транзакция начнётся с первым изменением".
правда, мы всегда могем знать - а она ваще есть, транзакция то? (слава те господи есть @@trancount).
И это завсегда и везде помогает нам реализовывать то, что разные "недоросли" обозвали (по недосмотру, йопть!) "вложенными транзакциями" (хотя это не они ни капельки).

А вот в орацле - каким штыном реализуются темплейты процедур, которые должны независимо или в совокупности обрабатывать транзакции?

т.е. есть процедура, скажем, Proc1.
Будучи вызвана самостоятельно она должа в случае успеха сделать коммит, в случае неудачи - роллбэк.
А вот будучи вызванной из, скажем, proc2 - proc1 должна отдать на откуп вызывающей процедуре руление транзакциями (proc2, в свою очередь - можеть быть вызвана как самостоятельно, так и из, скажем, proc3....).
Или, предположим, я решил заделать некое вот такое: посмотреть, подебагить....
begin tran
exec Proc1
rollback
все изменения, внесённые Proc1 - откачены.
а вот так
exec Proc1
все изменения, внесённые Proc1 - подтверждены.
и вот так:
begin tran
exec Proc1
commit
все изменения, внесённые Proc1 - подтверждены.
2 фев 09, 21:14    [6769312]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Fox5631
Tapac,
ты подтверждаешь то, что я написал несколько страниц назад. Ты не читал весь топик.

прасците, вы это вот писали?

автор

А теперь, наберемся терпения и проведем тот же тест на 100 млн.записей.
Среднее время поиска в FoxPro: 0.05579
Среднее время поиска в Oracle: 0.00053


Т.е. фокс по сравнению с ораклом дуплит на 2 порядка?
2 фев 09, 21:15    [6769314]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
locky
правда, мы всегда могем знать - а она ваще есть, транзакция то? (слава те господи есть @@trancount)

А что, в других СУБД с этим какие-то проблемы? Ответьте уж как специалист по переводу с одного на другое ;-)

locky
т.е. есть процедура, скажем, Proc1. Будучи вызвана самостоятельно она должа в случае успеха сделать коммит, в случае неудачи - роллбэк.

Кстати, говоря деликатно, я бы не назвал такой дизайн лучшим. Хотя понимаю, что в MSSQL иначе становится ещё хуже.

locky
Или, предположим, я решил заделать некое вот такое: посмотреть, подебагить....

Примеры неактуальные, но мне бы хотелось сначала дождаться от Вас категорического утверждения, что на Oracle штатными средствами этого не сделать
2 фев 09, 21:22    [6769328]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
softwarer
А что, в других СУБД с этим какие-то проблемы? Ответьте уж как специалист по переводу с одного на другое ;-)

В оракле, если честно - не знаю, как это сделать.


softwarer

locky
т.е. есть процедура, скажем, Proc1. Будучи вызвана самостоятельно она должа в случае успеха сделать коммит, в случае неудачи - роллбэк.

Кстати, говоря деликатно, я бы не назвал такой дизайн лучшим. Хотя понимаю, что в MSSQL иначе становится ещё хуже.

Уж какой есть.
Интересует, как это принято делать в орацле.


softwarer

locky
Или, предположим, я решил заделать некое вот такое: посмотреть, подебагить....

Примеры неактуальные, но мне бы хотелось сначала дождаться от Вас категорического утверждения, что на Oracle штатными средствами этого не сделать

Довольно таки актуальные пример. Или, как обычно - "в оракле ЭТОГО нет - значит, ЭТО - ненужно!"? ;)
И, если это можно сделать "штатными средствами" (желательно в том виде, в котором я представил, т.е. без дополнительных параметров, процедур-обвязок етк) - было бы интересно посмотреть.
2 фев 09, 21:27    [6769348]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
проходящий.
Guest
Tapac
Из FoxPro тестируем поиск в dbf:
SET SAFETY OFF
SET TALK OFF

CLEAR ALL
USE C:\test.dbf
n = 100

s0 = SECONDS()
FOR i=1 TO n
	SELECT ID FROM test WHERE data = "test text" INTO CURSOR tmp
ENDFOR
s = SECONDS()

? 'Общее время выполнения:' + LTRIM(STR(s-s0,7,5))
? 'Среднее время поиска:' + LTRIM(STR((s-s0)/n,7,5))

Из FoxPro тестируем поиск в Oracle:
[src]
SET SAFETY OFF
SET TALK OFF

n = 100
nh = SQLCONNECT( "test", "test", "test")
SQLPREPARE( nh, "SELECT ID FROM test WHERE data='test text'")

s0 = SECONDS()
FOR i=1 TO n
SQLEXEC(nh)
ENDFOR
s = SECONDS()

В общем-то, это не сравнение времени поиска, а сравнение скорости выполнения циклов в сочетании с использованием в одном из сравниваемых продуктов отсутвующей в другом продукте функциональности в виде предварительного "препарирования" запроса и построения плана его выполнения вне цикла. Итого - сравнение некорректное.
2 фев 09, 21:31    [6769358]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
проходящий.

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

Зато в фоксе есть рашмор!
2 фев 09, 21:33    [6769363]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
проходящий.
Guest
locky
проходящий.

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

Зато в фоксе есть рашмор!

То есть других аргументов нет? Слив засчитан.
2 фев 09, 21:36    [6769367]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
locky
Уж какой есть. Интересует, как это принято делать в орацле.

Это вопрос что-то типа "как в оракле принято создавать на лету временные таблицы". Говорят, тоже актуальный пример :)

locky
И, если это можно сделать "штатными средствами" (желательно в том виде, в котором я представил, т.е. без дополнительных параметров, процедур-обвязок етк) - было бы интересно посмотреть.

SQL> 
SQL> set null <null>
SQL> 
SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID                                                            
--------------------------------------------------------------------------------
<null>                                                                          

SQL> insert into xyz values (1);

1 row created.

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID                                                            
--------------------------------------------------------------------------------
4.28.9555                                                                       

SQL> commit;

Commit complete.

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID                                                            
--------------------------------------------------------------------------------
<null>                                                                          

SQL> set transaction read write;

Transaction set.

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID                                                            
--------------------------------------------------------------------------------
3.39.7582                                                                       

SQL> rollback;

Rollback complete.

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID                                                            
--------------------------------------------------------------------------------
<null>                                                                          
2 фев 09, 21:38    [6769375]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
locky
ну почему сразу "глупо"?

Потому что они по-другому устроены. Транзакция состоит из нескольких операторов DML и если один оператор дает сбой, то он откатывается => все операторы, которые раньше были выполнены, не откатываются автоматически – результаты их работы не пропадают. Вы можете дальше продолжать транзакцию. Затем её или зафиксировать, или откатить. Это потому, что оракуль каждый оператор транзакции помещает в неявные операторы Savepoint.

locky
В том же недалёком и недоделанном сиквеле можно сделать SET IMPLICIT_TRANSACTIONS ON - и "транзакция начнётся с первым изменением".
правда, мы всегда могем знать - а она ваще есть, транзакция то? (слава те господи есть @@trancount).
И это завсегда и везде помогает нам реализовывать то, что разные "недоросли" обозвали (по недосмотру, йопть!) "вложенными транзакциями" (хотя это не они ни капельки).

Почему недоделанный сиквел? Уважаемый, Вы сравниваете разные вещи - что лучше, православие или ислам? В древний индии был свод правил поведения как людям нужно себя вести - артхашастра (ныне - веда). У мусульман такая книженция называется - суна. Так какая из этих книг "недоделанная", не подскажете?

locky
А вот в орацле - каким штыном реализуются темплейты процедур, которые должны независимо или в совокупности обрабатывать транзакции?

Что такое темплейты процедур? Очередной плод Вашей фантазии?

P.S. Локи, RTFM.
2 фев 09, 21:43    [6769392]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
softwarer
Это вопрос что-то типа "как в оракле принято создавать на лету временные таблицы". Говорят, тоже актуальный пример :)

Довольно таки актуальный, если подумать.
разумеется, можно обойтись и global (или вообще без них, хотя глобальные временные таблицы - тоже можно было бы пристроить к делу), но это, согласитесь, несколько некошерно.

SQL> 
Пасиба, будем знать.
Хотя, судя по тому, что я о нём не сильно слышал - на практике такое встречается очччень редко.
2 фев 09, 21:45    [6769397]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Fox5631
Guest
locky
Fox5631
Tapac,
ты подтверждаешь то, что я написал несколько страниц назад. Ты не читал весь топик.

прасците, вы это вот писали?

автор

А теперь, наберемся терпения и проведем тот же тест на 100 млн.записей.
Среднее время поиска в FoxPro: 0.05579
Среднее время поиска в Oracle: 0.00053


Т.е. фокс по сравнению с ораклом дуплит на 2 порядка?


Я привел ссылку на статью, в которой написано, при каком объеме базы данных нужно переходить на сервер. И именно из-за замедления работы. Поскольку в реальной базе используются более сложные вопросы.
На средней БД Fox выигрывает в скорости.
2 фев 09, 21:48    [6769412]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 25 26 27 28 29 [30] 31 32 33 34 .. 75   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить