Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Oracle & XML
Seth
post 16.04.2003, 18:36:55
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Jaka jest wydajnosc przeszukiwania pola typu SYS.XMLType przez zapytanie SQL - Czy jest roznica wzgledem normalnego przeszukiwania rekordow ?

Jezeli tak to czy jest bardziej wydajna metoda umieszczania XMLa w bazie (Moze w CLOB) ?

Jaka jest max ilosc danych, ktore mozna trzymac w tej kolumnie (sys.XMLType)?
Go to the top of the page
+Quote Post
dragossani
post 17.04.2003, 13:25:52
Post #2





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Przy wyszukiwaniu po polach typu XMLType, granicę wydajności wyznacza mechanizm XPath. Z tego co wiem, wydajność utrzymuje się na podobnym poziomie co np. proste zapytanie z użyciem wyrażenia regularnego (czyli nieźle). Nie jest to oczywiście ta sama wydajność co przy przeszukiwaniu prostego indeksu typu integer, ale nie ma się raczej co obawiać, że nie doczekamy się na wyniki.

O ile się orientuję, to XMLType jest rozszerzeniem typu CLOB i posiada te same ograniczenia (czyli chyba 4 GB).

Jest to chyba najwydajniejsza metoda przechowywania danych jako XML. Trzeba tylko dobrze dobrać poziom uogólnienia, poziżej którego dane są już strukturą XML wewnątrz 1 pola, a powyżej którego rozbijamy dane na tabele. Dane które są intensywnie przeszukiwane i wiązane relacjami - do tabel. Dane które są głównie odczywywane, a tylko niekiedy trzeba je przyciąć do podzbiorów - do wewnątrz pola typu XMLType.

BTW: Zaznaczam, że mam znikome doświadczenie w Oracle'u. Po postach widać jednak, że nie tylko ja. laugh.gif Fajnie, że chociaż Seth stawia sobie poprzeczkę wysoko. :wink:


--------------------
cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
Go to the top of the page
+Quote Post
Seth
post 17.04.2003, 14:08:17
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Tez myslalem, ze ten typ musi posiadac duza pamiec ale po probie wrzucenia prze TOADa do bazy xmla uzywajac:
Kod
INSERT INTO [...]  t_xml) VALUES ([...],sys.XMLType.createXML('<?xml version="1.0" encoding="utf-8" ?>[...]'))

wywalilo mi blad:
Cytat
string literal too long

tongue.gif
troche to dziwne bo xml wazyl zaledwie 20 KB... ciekaw jestem co moze byc nie tak ?
Go to the top of the page
+Quote Post
dragossani
post 17.04.2003, 15:06:27
Post #4





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Może to problem z obsłużeniem samego STRING'a z zapytaniem, przez któryś z elementów pośredniczących w przesyłaniu danych, a nie wina dopuszczalnej objętości pola?


--------------------
cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
Go to the top of the page
+Quote Post
Seth
post 18.04.2003, 12:29:39
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Hmm byc moze to przez TOADa. I tak i tak bede musial napisac prgram do wrzucania XMLa do bazki, wiec wtedy wszystko sie wyjasni.

I jeszcze mam takie pytanie. Procesy odpowiedzialne za obsluge XMLa sa po stronie servera i nie wymagany jest client Oracla 9i aby przetworzyc zapytanie moze byc wczesniejszy ?
Go to the top of the page
+Quote Post
Seth
post 4.05.2003, 15:19:12
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Troche pozno odpisuje ale moze komu sie to przyda.
Otoz proble 'literal to long' byl spowodowany tym, ze wstawiajac do zapytania xmla w ' ' (cudzyslowiach) automatycznie jest to uznawane za VARCHAR2, ktory ma tylko 4000 znakow do dyspozycji. Rozwiiazaniem jest stworzenie zmiennej typu CLOB (4GB pamieci).
Przyklad zastoswania (procedura PL/SQL):
Kod
CREATE or REPLACE PROCEDURE przykladXML IS

  xmlData CLOB;

BEGIN  

  xmlData := '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

  <cos>

    <inne nazwa="cvcvc" />

    <inne2>xcvxc</inne2>

    (...)

  </cos>';

  INSERT INTO jakas_tabela (kolumna) VALUES (XMLTYPE(xmlData));

END przykladXML;


Taki maly blad a jednak potrafi troche namieszac.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 04:11