Autor Zpráva
IdemeNaHavaj
Profil
Mám problémy s importom velkého (cca 25MB) XML súboru do mysql.
Potrebujem naimportovať niekoľko tisíc produktov do e-shopu.
Ako toto riešite vy?
Jan Tvrdík
Profil
IdemeNaHavaj:
A kde je problém? Např. pomocí SimpleXml projdeš ten XML soubor a vždy třeba po sto záznamech bude přidávat vkládat produkty do databáze.
IdemeNaHavaj
Profil
Dakujem uz som to vyriesil cez jeden software. Môžeš mi ešte poradiť, ako má vyzerať v MySQL tabulka alebo stĺpce, ktoré XML obsahujú údaje do väčšej hĺbky pri jednom tagu?

    <ProducerCode>TOS</ProducerCode>
    <CategoryCode>2207</CategoryCode>
    <B2C>true</B2C>
    <B2FPrice>0</B2FPrice>
    <ImageList>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
    </ImageList>
    <ProductNavigatorDataList>

Myslím to
<ImageList>
<ProductImage>
- čo je tam viac krát pre každý obrázok. Takže ako má prosím vyzerať v mysql štruktúra tabulky?
_es
Profil
IdemeNaHavaj:
Databáza MySQL akosi nie je určená a vhodná na uchovávanie „stromovitých“ dát.
IdemeNaHavaj
Profil
Aká DB sa na toto používa?
RockFire
Profil
IdemeNaHavaj:
Aká DB sa na toto používa?
XML
_es
Profil
IdemeNaHavaj:
Ak chceš používať nejakú SQL databázu, tak si tie dáta nejako „preusporiadaj“, aby nemali stromovitú štruktúru.
Kajman
Profil
IdemeNaHavaj:

ako má vyzerať v MySQL tabulka alebo stĺpce, ktoré XML obsahujú údaje do väčšej hĺbky pri jednom tagu?

Uděláte jednoduše dvě tabulky (či ještě více) a při importu budete vkládat do obou.

produkty
id_produktu
ProducerCode
CategoryCode

obrazky
id_obrazku
id_produktu
URL

A kdyby mohl být jeden obrázek u více produktů, použijete navíc třetí vazební tabulku místo sloupce id_produktu v tabulce obrazkk.
IdemeNaHavaj
Profil
Kajman:
ID obrázku neexistuje. Iba URL. Takže by sa nedalo porovnať id obrázku = id produktu.

Potrebujem nejaký software na import. Okrem Pentaho a Database Master 5.
Sú to fajn programy ale neviem prečo celý deň mi nejde naimportovať do mysql tabulka xml.

Máte nejaké tipy na dobré softwary?
Tori
Profil
IdemeNaHavaj:
ID obrázku neexistuje. Iba URL.
No tak mu ho vyrobte, auto_increment sloupec. Na URL obrázku by měl být unikátní klíč. Jen pokud je tam vazba M:N (více produktů může mít tentýž obrázek a zároveň k jednomu produktu může být několik obrázků) a budete tedy potřebovat vazební tabulku, tak na vkládání dat k obrázkům budete potřebovat dva dotazy (jeden INSERT IGNORE na vložení obrázku, druhý INSERT + poddotaz se SELECT na vložení vazby).

Takže by sa nedalo porovnať id obrázku = id produktu.
A jaký by to mělo smysl?
IdemeNaHavaj
Profil
Tori:
Prepáč nie každý sme taký profíci ako ty. Mohol by si to trochu lepšie a pre slabšie vyvinutých "kóderov" vysvetliť?

A jaký by to mělo smysl?
No ja som myslel že pri načítavaní použijem WHERE `id_produktu`='id_obrazku' aby nebol obrázok telefónu na notebooku.
Kajman
Profil
IdemeNaHavaj:
pre slabšie vyvinutých "kóderov" vysvetliť?

Kódováním to nepřevedete. Možná přes xslt, ale to bude asi ještě složitější než naprogramování např. v php. Pokud tedy neumíte základy php a relačních databází, zbývá ještě možnost, nechat si to naprogramovat např. v Práce a zakázky

Nebo pokud máte již hotové ukládání bez obrázků, dejte sem funkční kód, ať můžete dostat konkrétní radu pro konkrétní skript.
IdemeNaHavaj
Profil
Kajman:
Ja som to do MySQL naimportoval cez program Navicat for MySQL ktorý ako jediný aj vytvoril tabulky/stĺpce podla toho XML súboru.
Vytvorilo to v mysql všetko čo treba, no ale

 <ImageList>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
        <URL>...</URL>
      </ProductImage>
      <ProductImage>
.
.
.

v mysql vytvorilo stĺpce
. . . | ImageList   |  ProductImage   |              URL           | . . . 
      |             |                 |     http cesta k obrázku   |
Imagelist prázdny,
ProductImage prázdny,
URL - iba jedna cesta k obrázku.
Amunak
Profil
XML a databáze nejsou primitivně kompatibilní formáty. Buď musíte XML prvně upravit tak, aby to nějaký importér pochopil (podívejte se třeba do jeho dokumentace), nebo to naimportujte jak umíte (Třeba přes ten Navicat) a pak si data dodatečně upravte v databázi. Prostě vyhodíte ty prázdné sloupce.

Nebo si ideálně v PHP napište program, který data z xml přeparsuje a nastrká do DB.
Kajman
Profil
IdemeNaHavaj:
Ja som to do MySQL naimportoval cez program Navicat for MySQL

Tak se zeptejte na podpoře toho programu, jak ho nakonfigurovat, aby to umělo dávat data z jednoho xml do více tabulek. Jestli to ten program neumí, nikdo z nás tady to nezmění.

Pokud to nechcete programovat, tak musíte hledat program, který umí z jednoho xml souboru vytvořit více mysql tabulek. Zběžným hledáním by to mohl zvládnout Exult za 195$. Ale žádné zkušenosti s ním nemám.
JardaB
Profil
IdemeNaHavaj:
Zpracovávám 40 MB soubory celkem jednoduchým php skriptíkem, který jsem si napsal. XML musí být ale validní, tedy jakmile se tam objeví co nemá, tak smůla...
Tori
Profil
IdemeNaHavaj:
Předpokládala jsem, že když ten importovací program není vhodný, tak že si to napíšete v PHP. Podle toho jsem radila. S programy na import XML do DB nemám zkušenost.

No ja som myslel že pri načítavaní použijem WHERE `id_produktu`='id_obrazku' aby nebol obrázok telefónu na notebooku.
No ale ID (čehokoli) musí být jedinečné. Takže pokud máte u jednoho produktu více obrázků, nemůžete mít u všech stejné ID. V [#8] by se porovnávalo ID produktu z tabulky produktů s ID produktu z tabulky obrázků.
IdemeNaHavaj
Profil
Kajman:
Ten program Exult je super, spravil všetko čo som chcel. Len škoda že do každej druhej tabulky dal "<<Trial Version of Exult Professional Edition for My".
Dúfam že sa mi podarí nájsť aj free software alebo aspoň lacnejší.


JardaB:
No ale ten 40MB .xml musíš nahrať na FTP, čo pri mojej rýchlosti uploadu by 40MB trvalo celý deň.
JardaB
Profil
IdemeNaHavaj:

pokud ten soubor je k dispozici někde na síti, tak stažení proběhne řádově do 1s, proč ho tahat k sobě a poté na přes ftp, když je možné přímo? Nebo pokud ten soubor máš v pc tak proces provedeš na lokále. Otázka kde data potřebuješ k dispozici..

Jen mi řekni kde ten soubor máš? Zda v pc a imortuješ přes ten soft na server, tak objem dat musí být stejný a tedy doba přenosu přes ftp podobná, závislá na tvém připojení.
IdemeNaHavaj
Profil
Ten súbor si vygenerujem u dodávatela produktov a potom sťahujem. Takže ak sa dá cez URL prekonvertovať XML súbor do SQL alebo rovno hodiť do DB, tak ako?
Tá URL je vzdialený server

DOMDocument?
Amunak
Profil
IdemeNaHavaj:
Soubor nejdřív stahneš na serveru (třeba přes file_get_contents), pak ho zparsuješ a vložíš do databáze.
IdemeNaHavaj
Profil
Amunak:
Môžeš definovať "zparsovať"?
Majkl578
Profil
DOMDocument není moc vhodný pro velké soubory, jelikož sestavuje celý strom v paměti. Na parsování velkých souborů raději použít např. XMLReader, který čte postupně.
Amunak
Profil
IdemeNaHavaj:
viz [#23] Majkl578. Nějak ten dokument načíst a zpracovat ty tagy, klíče a hodnoty.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: