Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Лучшая СУБД для научных проектов.   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2010-03-24 09:15) [40]

> PEAKTOP  (24.03.2010 04:47:39)  [39]

Которое лежит рядом с программой? Или как?


 
pasha_golub ©   (2010-03-24 09:49) [41]


> Паш, я знаю, что ты по Снонопотаму "зажигаешь", поэтому
> холиварить не будем :)

Да я ж никогда! :) Мир, дружба, жвачка!


> Но зато мы более лояльно относимся к "слабому" железу, я
> имею в виду производительность в целом, а не просто "взлетит-
> не взлетит".

На слабом железе можно собрать слона с нужными настройками. Но смысл?


> И Embedded у нас тоже есть - а значит можно не озадачивать
> юзера вопросом "что такое установка SQL-сервера".

Embedded"a не будет у слонов. Сей вопрос периодически всплывает, и вопрошающему тут же суют под нос тезис, что Слон - это для того. С одной стороны жаль, с другой разрываться на несколько направлений смысла действительно нет.


> В общем, давайте жить дружно =)

Давайте! :)


 
pasha_golub ©   (2010-03-24 09:51) [42]


> tesseract ©   (23.03.10 21:57) [38]
>
> И interbase может. А есть ли СМЫСЛ? Если нужны подобные
> расчеты - не проще ли не конопатиться и написать адекватную
> и намного более логичную двухзвенку ?

Тут вопрос как бы немного в другом. Например, триггеры на С явно быстрее, чем на хранимых языках. А триггер это часть серверной логики, как ни крути.

Аггрегатные функции тоже часть серверной логики. Всё упирается в планирование.


 
tesseract ©   (2010-03-24 18:42) [43]


> Например, триггеры на С явно быстрее, чем на хранимых языках.


На С  скомпилированных, или на С-Script? В принципе триггеры должны компилироваться и не терять в производительности. Хотя тут бабка натрое сказала - в логику работы БД  нужно смотреть.


 
pasha_golub ©   (2010-03-25 12:58) [44]


> tesseract ©   (24.03.10 18:42) [43]

Скомпилированные, конечно. Пример:
CREATE OR REPLACE FUNCTION euc_cn_to_utf8(integer, integer, cstring, internal, integer)
 RETURNS void AS
"$libdir/utf8_and_euc_cn", "euc_cn_to_utf8"
 LANGUAGE "c" VOLATILE STRICT
 COST 1;


$libdir/utf8_and_euc_cn - библиотека с функцией. В случае с Виндой utf8_and_euc_cn.dll, в случае с Линями utf8_and_euc_cn.so

euc_cn_to_utf8 - имя функции


 
Romkin ©   (2010-03-25 16:12) [45]

DECLARE EXTERNAL FUNCTION bin_xor
INTEGER, INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT "IB_UDF_bin_xor" MODULE_NAME "ib_udf";

А зачем триггер-то на С писать? ЧТо быстрее будет - так очень вряд ли.


 
PEAKTOP ©   (2010-03-25 16:52) [46]

pasha_golub ©   (25.03.10 12:58) [44]
> Скомпилированные, конечно. Пример:


А ты часом функции ни с чем не попутал ?

Внешние функции (UDF - User Defined Functions), которые подключаются из DLL/SO - это одно, это было реализовано еще даже не в Firebird, а в дедушке InterBase.
А вот хранимые процедуры/триггеры/PSQL-блоки на внешних языках - это совсем другое. Например, как у вас (Слоноводов) это сделано на Перловке или Питоне.

CREATE FUNCTION pymax (a integer, b integer)
 RETURNS integer
AS $$
 if (a is None) or (b is None):
   return None
 if a > b:
   return a
 return b
$$ LANGUAGE plpythonu;

или

CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
   if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
       return "SKIP";    # skip INSERT/UPDATE command
   } elsif ($_TD->{new}{v} ne "immortal") {
       $_TD->{new}{v} .= "(modified by trigger)";
       return "MODIFY";  # modify row and execute INSERT/UPDATE command
   } else {
       return;           # execute INSERT/UPDATE command
   }
$$ LANGUAGE plperl;


 
tesseract ©   (2010-03-25 17:45) [47]


> блоки на внешних языках - это совсем другое.


Фактически то-же самое. Какая разница как функция прилинкована -  динамически или статически - она всё равно функция.


 
pasha_golub ©   (2010-03-25 18:50) [48]


> PEAKTOP ©   (25.03.10 16:52) [46]


> А ты часом функции ни с чем не попутал ?

Не попутал. :) Функция есть функция. А вот триггер в контексте Постгреса - это событие, которое вызывает функцию-обработчик:

CREATE FUNCTION trigf() RETURNS trigger
   AS "filename"
   LANGUAGE C;

CREATE TRIGGER tbefore BEFORE INSERT OR UPDATE OR DELETE ON ttest
   FOR EACH ROW EXECUTE PROCEDURE trigf();


 
PEAKTOP ©   (2010-03-26 12:26) [49]

> А вот триггер в контексте Постгреса - это событие, которое вызывает функцию-обработчик:

А все, понял. Это просто произошла "подмена понятий" =)

у нас это блок (в данный момент писанный только на SQL), который будет выполнен при вставке/изменении/удалении строки. По сути, от ХП или PSQL-блока он ничем не отличается.


CREATE OR ALTER TRIGGER <TRIGGER_NAME> FOR <TABLE_NAME>
 [ACTIVE | INACTIVE]
 {BEFORE || AFTER}
 {INSERT | UPDATE | DELETE}
 [POSITION number]
AS
BEGIN
 <TRIGGER_CODE>...
END



Страницы: 1 2 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.153 c
2-1272958382
Пробегалец
2010-05-04 11:33
2010.08.27
Быстрый вывод графики на канву


2-1273031451
Серг
2010-05-05 07:50
2010.08.27
Работа с массивом


15-1273760942
Still Swamp
2010-05-13 18:29
2010.08.27
Windows 7 vs BDS 6.0


2-1268591153
NBAH1990
2010-03-14 21:25
2010.08.27
Программное выделение области мышью


2-1268672321
NBAH1990
2010-03-15 19:58
2010.08.27
IP сканер