powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запутали! Как лучше автоматом формировать Primary Key?
25 сообщений из 28, страница 1 из 2
Запутали! Как лучше автоматом формировать Primary Key?
    #32111917
Ulba_2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня в форуме запутали. Я спросил:
"Есть много таблиц главные ключи которых формир-ся автоматом в тригере на инсерт с использ-ем секвенции. Как лучше (оптимальнее) - создать одну последовательность для всех этих таблиц (около 50 штук), или для каждой табл. создать свою секвенцию?"
а Oracle X-pert посоветовал ключ формировать так:
NVL(max(id),0) + 1 Into iterator from my_tab;
:NEW.ID := iterator;
Как все же лучше, правильнее ? Чем предложенный способ лучше (или хуже)?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111922
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафига заводишь новый топик? Делать нечего что-ли?

Сгруппируй таблицы по логическому признаку и выдели на каждую группу - по сиквенсу.
Например:
1) таблицы платёжных документов, таблицы остатков, таблицы счетов - 1 сиквенс
2) справочники: валют, курсов валют, справочник подразделений итд - 1 сиквенс
3) таблица основных средств, таблица материальных средств - 1 сиквенс


итд итп
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111923
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А про запрос я тебе написал в том топике:

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

В итоге производительность работы юзеров резко падает, кого будут после этого бить по голове - сам понимаешь.
"
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111934
Delerium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delaj normaljno - sequence dlja kazhdoi tabljici. Budjesh izpoljzovatj 1 seq dlja vseh tabljic, budet probljemi. Primer - eslji shto to sluchitsja s edinstvenoi seq, insert nebudet rabotatj na vsjeh tabljic.

Variant "select max(id) ..." njesovetuju:
1) chasto bivajut situaciji, kogda v insert triggere deajetsja insert v druguju tabljicu i tak dalje - poluchish kuchu "select max() " kogda hotjel tolkjo sdelatj insert. Zachem eto?
2) A jeslji takaja situacija:
insert -> max(id) = 1
insert -> max (id) = 2
..
insert -> max(id) = 230
delete some rows
insert -> max(id) = 118

?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111938
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softbuildery!!

Trigger rabotaet per row!
Poetomy vse , chto ty pisal - neverno!
Dlya Spravki:: Po takomy prinzipy rabotaet generaziya ID na site'www.cnn.com'
( ~ 10^9 zaprosov v sytki ) i ne padaet!
S seq takoi proizvoditel'nosti ne dostignut'
Bye.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111946
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Oracle X-pert:

Твой метод не похож на метод, котрый должен предлагать эксперт по Oracle.

Это больше похоже на совет от разработчика на FoxPro, Paradox и им подобным.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111965
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nu a MAX(ID) kakoe znachenie vernet? Eto ge ne count(id)......

A nachet Paradox or FoxPro...
"Windows" I "Mouse" toge ne izobretenie Microsoft...., odnako
esli vesh' poleznaya, to pocchemy - by ee ne ispol'zovat?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32111975
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы советовал подумать над вариантом с естественными ключами.
Во многих случаях это эффективнее.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32112363
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>> Trigger rabotaet per row!
>>> Dlya Spravki:: Po takomy prinzipy rabotaet generaziya ID na site'www.cnn.com'

1) Trigger deystvitelno per row NO V KONTEKSTE SESSII A NE V KONTEKSTE INSATNCE ILI DATABASE
eto est 3 bolshie raznicy

2) ... rabotaet generaziya ID na site'www.cnn.com' --> ne yavlyaetsya PRAVILNYM PRIMEROM
poskolku on rabotaet v APPLICATION SERVER okrugenii cherez 1 connect ili cherez 1 connection pool
( i connect i connection pool est POSLEDOVATELNOE FORMIROVANIE POTOKA ZAPROSOV K DB)
v Client-Server arhitekture principy connecta drugie -- PARRALELNOE FORMIROVANIE POTOKA ZAPROSOV K DB)
posemu stepen doveriya k dannomu primery nedysoka.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32112382
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predposylki pochti vernye.
Trigger i v etom sluchae dast unique number.

V primere on rabotaet protiv 5 Apache serverov, t.chto, kak min, 5 connection pools,
no ne padaet na exceptions.....
chto dumaesh po etomy povody?

A kak resume:: Oracle daet dostatochno vozmognostei, chtoby reshat' ety problemy v kagdom konkretnom sluchae.

Esli net ogranichenii na poryadok posledovatelnostei v seq, to , obychno, primenyaetsya sequence. Pro etom daetsya dostatochno bol'shoe keshirovanie, chtoby ne zamedlyat' transactions.
V sluchae, esli poriadok strogo reglamentiryetsya, naprimer pri sozdanii nomerov
form na denegnye operazii s ychetem vremeni ih postupleniya
{ dopystim, pri Billing systems na cellular phones } - to luche ispol'zovat' generaziu NE SEQUENCE number. Odnim iz sposobov pri etom i yavlaetsya trigger, a , kak
variant - Java engine.

Vybor, obychno, za postanovshikom zadach.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32112388
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>> V primere on rabotaet protiv 5 Apache serverov, t.chto, kak min, 5 connection pools,
>>> no ne padaet na exceptions.....
>>> chto dumaesh po etomy povody?

Ya dumau po etomu povodu ochen prosto:
Apache -- HTTP server (no ne application server)
Za Apache dolgen stoyat kakoy-libo (kakie-libo) application servera a-lya Tomcat, Jrun, ...
Za application serveramy mogut stoyat (a mogut i ne stoyat) EJB servera.

I connection pool formiruetsya na application/EJB servere (ne na Apache).
A vot skolko ih a v kakom regime ony obschautsya s database eto i est sut problemy
rasparallelivaniya potoka zaprosov.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113256
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владимир П.
А в том случае ежели по независящим от тебя причинам естественный ключ обязан быть продублирован?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113257
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владимир П.
А в том случае ежели по независящим от тебя причинам естественный ключ обязан быть продублирован?
"Кто дЭвушку ужинает -- тот ее и танцует!" (с) анекдот ...
ИМХО -- кто за целостность отвечает, тот и генерит PK
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113264
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ShgGena::
Apache/HTTP server NE obshaetsya s Application Server!
Request Formiruetsya samoi DB 9i ( Object with full interface ( sm Page's Source) was loaded into Oracle's kernel). Oracle 9i INCLUDE Apache/HTTP.
Connection pool formiruetsya Listenerom ( multi port ).
Sut' problemy::

Kak obespechit' vzaimodeistvie parallel'nyh potokov Data
pri yslovii STROGOGO cobludeniya ocherednosti po vremeni request.

Seq ne MOGET v prinzipe dat' polnoi posledovatel;nosti. naprimer, v sluchae
ROLLBACK schetchik nevozmogno cbrosit'.

Trigger ot etih nedostatkov svoboden.
Schema zaproca, povtoryau::
Client<->..<->Apache<->Listener<->Data Base

Pochemy-to NIKTO ne poprobovat eto konkretno v primere::
create table test
(
id number,
attrib_1 varchar2(100),
attrib_2 varchar2(100),
attrib_r varchar2(100)
)
pctfree 15
pctused 85
initrans 50
maxtrans 255
storage
(
initial 100M
next 100M
minextents 2
maxextents 1024
pctincrease 0
);
alter table test
add constraint pk_test_id primary key (ID);

create or replace trigger trg_test
before insert on test
for each row
declare
-- iterator Integer := 0;
begin
select NVL(max(id),0) + 1
Into :NEW.Id
From test;
exception
when Others Then
raise ....
end aa;

Zapustit' insert v neskol'kix sessiyah ! ( Obrashau vnimanie na parameter initrans 50)

To ge samou, s sequense!

Seq bystree vyletit na SEQUENCE_CASH_WAIT + share_pool_wait, chem poluchite RAISE DUP_ON_VALUE..i est' mnogo sistem, gde eto kritichnee ( rabotaushih 24X7)
------------
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113309
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Schema zaproca, povtoryau::
>> Client<->..<->Apache<->Listener<->Data Base
>>
>> Connection pool formiruetsya Listenerom ( multi port ).

Oracle X-Pert выдал совершенно новую архитектуру Oracle Net/HTTP сервисов.
Скорее всего даже в Oracle Corporation об етих возможностях никто ничего не знал.
----------------------------------------------------------------------------
А теперь по сути:
-- 1 - при обычном соединении или при обработке http сессии или при выполнении коннекта к XML DB (FTP протокол)
listener не занимается собственно обработкой запроса, а только :

а) в Dedicated server mode - образует новый серверный процесс + назначает ему
(для TCP) номер порта
а после того немедленно отваливается и ждет новых запросов НА КОННЕКТ по заданному (by default 1521) порту

б) в Shared server mode - ищет свободный диспетчер (если отсутствует и не превышен параметр MAX_DISPATCHERS то образует новый)
отдает ему параметры клиента + назначает ему номер порта
а после того немедленно отваливается и ждет новых запросов НА КОННЕКТ.
Диспетчер ставит запрос в очередь к разделяемым серверам для (собственно) обработки запросов.
и.т.д
----------------------------------------------------------------------------
Client<->..<->Apache<->Listener<->Data Base
Если-бы сервер работал таким образом то:

1 - листенер должен был бы отвечать за чтение физических блоков из файлов данных - КРУТО!!!
2 - иметь PGA / UGA для сессий, а в случае "( multi port )" - пул областей PGA / UGA для сессий -- ЕЩЕ КРУЧЕ!!!
----------------------------------------------------------------------------
Собственно возникае законный вопрос :
А уважаемый X-Pert представляет как oracle работает?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113310
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sm documentaziy k Oracle HTTP cartridge (OWA serial).
Tam i opisany technology of DB 9i.

Po krainei mere, y tebya ne vozniknet bolee voprosov tipa 'ESLI'.

King Regards!
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113311
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I potom, rebyata!

Pridergivaites' vse-taki mneniya: 'Ia znau, chto ya nichego ne znau".

Togda i ne bydete gluposti pisat'!
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113349
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> Sm documentaziy k Oracle HTTP cartridge (OWA serial).
>> Tam i opisany technology of DB 9i.
>> Togda i ne bydete gluposti pisat'!

Oracle HTTP cartridge и OWA (Oracle Web Agent), включая mod_plsql
являются частью ORACLE APPLICATION SERVER ( и к Oracle Database Sever не имеют никакого отношения)
Это два РАЗНЫХ продукта.

Далее, по этому повду можно немного уточнить:

-- OWA использует mod_plsql как свой кернел
-- для конфигурирования mod_plsql в части касающейся коннекта с базой данных
мы должны использовать файл --> dads.conf (Database Access Descriptor)
в котором в частности ОБЯЗАННЫ объявить :
--> PlsqlDatabaseConnectString - параметр в формате : host:port:sid

Вопрос - а чем это собственно отличается от объявления Entry в tnsnames.ora
или connection string для JDBC.

Ответ --> ничем

Oracle AIS для организации связи с базой действительно использует connection pool
но этот connection pool по своей суте и по принципам организации работы с базой практически ничем не отличается от, например, Dynamo или Тоmcat
(единственное существенное отличие - WEB Cache (но другие КОММЕРЧЕСКИЕ application сервера тоже как правило имет подобные решения)

Ввиду вышесказанного следует что:
схема Client<->..<->Apache<->Listener<->Data Base
является неполной и должна быть:

Client<->..<->Apache<->OAS9i(mod_plsql)<->Listener<->Data Base (ДЛЯ КОННЕКТА)

Client<->..<->Apache<->OAS9i(mod_plsql)<->севрерный процесс<->Data Base (ДЛЯ ЗАПРОСОВ)

о чем я собственно и писал выше!

ВЫВОД --> ">> Togda i ne bydete gluposti pisat'!" надо относить ко всем включая в первую очередь себя самого.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113366
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silver:
Я не понял, что значит "ключ обязан быть продублирован". Имеется в виду, что его значения могут быть неуникальными? Но тогда этот атрибут не является ключом (по определению). И если у сущности нет уникальных атрибутов, то нет и естественного ключа, и в этой ситуации без суррогатного ключа не обойтись.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113370
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tvoi predposylki absolutno verny dla OAS versii 4.xx. i tol'ko.
Obrati vnimanie, chto pri installyazii TOLKO DB, poyavlyautsya packages serii 'OWA' i 'HTTP'.
-----------
Nauka umeet mnogo gitik!
-----------
I na bydyshee, ya ne dymau, chto dalee imeet smysl pikirovat'sya s toboi, Gena.
Ne tot sluchai. Dla etogo protivniki dolgny byt' po krainei mere v odnoi vesovoi kategorii.
--------
Ya rad tvoim poznaniyam po predydyshim versiyam Oracle . Sam ya s nim rabotau s 5 versii. Po etomy mne legche videt' ego evoluziu. Chitaite bol'she{ i na English, estestvenno . Perevody takoi fuck! } o novom, yvagaemyi, treniruites'. Vozmognosti dlya etogo est'.
-------
I vse-taki, nikto ne skazal glavnogo: Kto-ge poluchil oshibky is trigger i zamedlenie v rabote?
Kto poluchil sostoyanie Sequense_wait?
Kto ne soglasen s tem chto ::
- Seq ne MOGET v prinzipe dat' polnoi posledovatel;nosti. naprimer, v sluchae
ROLLBACK schetchik nevozmogno cbrosit'.
Trigger ot etih nedostatkov svoboden.
-??
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113381
andsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример с www.cnn.com совершенно не показателен - записи добавляются редко, в основном идут одни селекты, поэтому генерацию ключа можно делать практически любым, в том числе и сильно тормознутым, способом. А вот в OLTP-системе под хорошей нагрузкой вариант с max() наверянка приведет к проблемам производительности.
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113382
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hey, anyware!

kak i vezde, kagdyi connect to internet site registriryetsya.
(Navernyaka) - eto ne otvet, soglasis'?

Kto nibyd' rabotaet v real time { phone, cell phone, airlines etc? }?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113670
Фотография MaxU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote]
I vse-taki, nikto ne skazal glavnogo: Kto-ge poluchil oshibky is trigger i zamedlenie v rabote?
Kto poluchil sostoyanie Sequense_wait?
Kto ne soglasen s tem chto ::
- Seq ne MOGET v prinzipe dat' polnoi posledovatel;nosti. naprimer, v sluchae
ROLLBACK schetchik nevozmogno cbrosit'.
Trigger ot etih nedostatkov svoboden.
-??
[/quote]


ну как тебе сказать....


если я правильно понял твою идею с тригером, то необходимо использовать автономные транзакции с мгновенным commit'ом после insert'a !
т.е. в этом случае есть "подобие гарантии" что номера будут последовательными (хотя автору топика этого как бы и не надо совсем...)
кроме того только в этом случае будет возможна хоть какая-то многопользовательская работа, т.е. все пользователи не будут ждать одного пока он соизволит сделать COMMIT !
НО в этом случае:
1. при откате теряются номера (хотя это и не важно для автора, но чистА принципиально...)
2. существует дополнительный overhead - writing to redo log, writing to rollback/undo, что ИМХО "дороже" чем использование внутренних LATCH's при работе с SEQUENCE.


в противном случае - когда ты не комитишь сразу же после получения нового ID у нас получается чудесное однопользовательское приложение !!!
т.е. если у нас N активных пользователей пытающихся получить номер твоим способом, то после того как один получил его (insert отработал) и до того момента пока он не сделает commit все остальные пользователи, пытающиеся получить номер, "курят и пьют кофе"... и INITRANS им ни разу не помогает...

итоги подведем:
я так и не увидел ни одного преимущества подхода с использованием таблицы как источника номеров.
кроме того, зачем умные дяди в Oracle Corp. ломали головы, придумывали SEQUENCEs, если можно чудно и главное оптимальнее обойтись без его использования...

удачи!
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113712
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izvini, ne ponial..
автономные транзакции с мгновенным commit'ом после insert'a !
A razve cherez trigger dannye popadayt ne posle vvedenia comandy commit?
...
Рейтинг: 0 / 0
Запутали! Как лучше автоматом формировать Primary Key?
    #32113718
Фотография MaxU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я имел в виду чуть более сложный вариант - когда из тригера вызывается процедура/функция созданная с использованием "PRAGMA AUTONOMOUS_TRANSACTION", в противном случае мы получаем "однопользовательское" приложение, объяснения смотри выше

сорри, что не объяснил сразу что я имел в виду под "автономные транзакции"...
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запутали! Как лучше автоматом формировать Primary Key?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]