Autor | Zpráva | ||
---|---|---|---|
IdemeNaHavaj Profil |
#1 · Zasláno: 21. 5. 2013, 19:13:20
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 |
#2 · Zasláno: 21. 5. 2013, 21:09:05
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 |
#4 · Zasláno: 22. 5. 2013, 07:14:11
IdemeNaHavaj:
Databáza MySQL akosi nie je určená a vhodná na uchovávanie „stromovitých“ dát. |
||
IdemeNaHavaj Profil |
#5 · Zasláno: 22. 5. 2013, 07:31:03
Aká DB sa na toto používa?
|
||
RockFire Profil |
#6 · Zasláno: 22. 5. 2013, 08:53:37
IdemeNaHavaj:
„Aká DB sa na toto používa?“ XML |
||
_es Profil |
#7 · Zasláno: 22. 5. 2013, 09:01:36
IdemeNaHavaj:
Ak chceš používať nejakú SQL databázu, tak si tie dáta nejako „preusporiadaj“, aby nemali stromovitú štruktúru. |
||
Kajman Profil |
#8 · Zasláno: 22. 5. 2013, 09:10:57
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 |
#10 · Zasláno: 22. 5. 2013, 22:36:15
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 |
#12 · Zasláno: 23. 5. 2013, 08:59:45
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 |
#13 · Zasláno: 23. 5. 2013, 09:09:49
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 | ProductImage prázdny, URL - iba jedna cesta k obrázku. |
||
Amunak Profil |
#14 · Zasláno: 23. 5. 2013, 09:54:31
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 |
#16 · Zasláno: 23. 5. 2013, 11:00:39
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 |
#17 · Zasláno: 23. 5. 2013, 11:15:51
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 |
#19 · Zasláno: 23. 5. 2013, 12:46:17
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 |
#21 · Zasláno: 23. 5. 2013, 21:03:49
IdemeNaHavaj:
Soubor nejdřív stahneš na serveru (třeba přes file_get_contents), pak ho zparsuješ a vložíš do databáze. |
||
IdemeNaHavaj Profil |
#22 · Zasláno: 23. 5. 2013, 21:20:13
Amunak:
Môžeš definovať "zparsovať"? |
||
Majkl578 Profil |
#23 · Zasláno: 23. 5. 2013, 21:32:02
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 |
#24 · Zasláno: 23. 5. 2013, 22:42:01
IdemeNaHavaj:
viz [#23] Majkl578. Nějak ten dokument načíst a zpracovat ty tagy, klíče a hodnoty. |
||
Časová prodleva: 11 let
|
0