WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   hjälp med STOOOOOR databas. (https://www.wn.se/forum/showthread.php?t=1066241)

naak2803 2016-01-25 14:24

hjälp med STOOOOOR databas.
 
Hej,
en kund till mig har ett problem som jag inte riktigt vet hur jag ska lösa..

så här är system uppbyggd (vilket fungerade bra i början med en liten db)

1. Kunden tankar ner ex excelfil från FTP. (excelfil innehöll MAX 100,000 rader)
2. Kunden laddar upp filen via ett adminsystem som konvererar excelfilen till en MSSQL databas.
(Konvertering gjordes så att för varje rad skapa den den in stor sträng som med en ända sql insert, inserta hela ändringen)
3. via admingränsnittet kan kunden nu köra SQL förfrågning direkt mot databasen.

Men nu är det så att leverantören som levererar denna excelfil har ändrats lite och innehåller nu bokstavligen 10,000,000 (10 miljoner!!) rader med ca 60-70 Kolumner per rad.

Bästa approachen för situationen letas... kom med förslag...

gregoff 2016-01-25 14:50

Försök att få leverantören att leverera en xml,json,csv så att du kan parsa den korrekt och scripta ihop en inmatning till databasen.

digiArt 2016-01-25 15:10

Prova Bulk Insert i sql server

Om du behöver jämföra med befintliga poster, stoppa in datat i separat tabell och testa med upsert-tekniken:

http://www.databasejournal.com/featu...erver-2008.htm

Clarence 2016-01-25 18:20

Vad får du för problem med den större filen?

Har du en OpenXML excelfil så spelar det inte så stor roll om de byter format. Förvisso är den väl lite mer verbose än ren data-xml men skillnaden lär inte bli stor.

Annars är det bara att se till att köra importen som ett bakgrundsjobb och köra bulk inserts programmatiskt (testa dig fram vilket antal rader per insert som blir snabbast, det varierar med data-strukturer, db-mjukvara och hårdvaran).

Ska datan in i en tom tabell så är det ofta också en rejäl boost att lägga på indexen i tabellen först efter datan lagts in. Men det förutsätter ju att du vet att datan inte ger någon konflikt med indexen.

Nerix 2016-01-25 18:34

Citat:

Ursprungligen postat av naak2803 (Inlägg 20515550)
Hej,
en kund till mig har ett problem som jag inte riktigt vet hur jag ska lösa..

så här är system uppbyggd (vilket fungerade bra i början med en liten db)

1. Kunden tankar ner ex excelfil från FTP. (excelfil innehöll MAX 100,000 rader)
2. Kunden laddar upp filen via ett adminsystem som konvererar excelfilen till en MSSQL databas.
(Konvertering gjordes så att för varje rad skapa den den in stor sträng som med en ända sql insert, inserta hela ändringen)
3. via admingränsnittet kan kunden nu köra SQL förfrågning direkt mot databasen.

Men nu är det så att leverantören som levererar denna excelfil har ändrats lite och innehåller nu bokstavligen 10,000,000 (10 miljoner!!) rader med ca 60-70 Kolumner per rad.

Bästa approachen för situationen letas... kom med förslag...


10M rader för en hemmaserver är inte jättemycket. Vill mycket till om du ska märka skillnad på 1M rader å 100M.

Citat:

Ursprungligen postat av naak2803 (Inlägg 20515550)
Men nu är det så att leverantören som levererar denna excelfil har ändrats lite och innehåller nu bokstavligen 10,000,000 (10 miljoner!!) rader med ca 60-70 Kolumner per rad.

I övrigt förstår ja inte ditt problem. Du skriver att din leverantör ändrats (?!), eller menar du att exelfilen nu innehåller 10M rader pga din leverantör? Varför skrev du isf fall att samma fil tidigare max innehöll 100k rader?

naak2803 2016-01-25 21:15

Citat:

Ursprungligen postat av Nerix (Inlägg 20515559)
10M rader för en hemmaserver är inte jättemycket. Vill mycket till om du ska märka skillnad på 1M rader å 100M.



I övrigt förstår ja inte ditt problem. Du skriver att din leverantör ändrats (?!), eller menar du att exelfilen nu innehåller 10M rader pga din leverantör? Varför skrev du isf fall att samma fil tidigare max innehöll 100k rader?

tidigare innehöll den 100,000 rader och nu 10M.
Kundens server timar ut.

Clarence 2016-01-25 21:54

Citat:

Ursprungligen postat av naak2803 (Inlägg 20515569)
tidigare innehöll den 100,000 rader och nu 10M.
Kundens server timar ut.

Var/vad timear ut? Kan du inte bara öka timeouten? Sker hela importen på klient-tråden? Det bör ske som ett bakgrundsjobb oavsett om det är 100k eller 100M rader som ska in.

Westman 2016-01-26 08:57

10 miljoner rader med usla index osv., ja då kan man få problem men annars så är 10 miljoner rader i sig inte så värst mycket. 60-70 kolumner i en tabell tycker jag tyder på dålig modellering.
Se över index, jag kan mycket väl tänka mig att du har en flaskhals här.
Vad är det för databasmotor?

lazat 2016-01-26 10:26

Hur ofta göra denna uppdatering??

Selects är säkert 10 ggr snabbare än inserts. Gör om så att bara rader som är förändrade läggs in. Alt be leverantören om en spara bara de poster som är uppdaterade.


Alla tider är GMT +2. Klockan är nu 06:43.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson