Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Oracle & XML
Forum PHP.pl > Forum > XML, AJAX > XML
Seth
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)?
dragossani
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:
Seth
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 ?
dragossani
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?
Seth
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 ?
Seth
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.