sql >> Databasteknik >  >> NoSQL >> MongoDB

Minska minnet som används för att ladda enorma pandordataramar från MongoDB

Vad som finns i en CSV och vad som finns i en dataram är två väldigt olika saker. Till exempel 9.9 och 9.99999999999999 i en CSV tar samma mängd utrymme i en dataram.

Som sagt, data i en dataram tar upp mycket mindre utrymme än data i en lista. Att konstruera en lista är dyrt i minnet; och att lägga till en dataram kräver pandor att göra en ny (större) dataram, kopiera allt och sedan lämna den ursprungliga dataramen för att samlas in.

Du skulle förmodligen klara dig mycket bättre om du förallokerade en dataram med 60 000 rader (eller hur många rader du har totalt); t.ex.:

data = pd.DataFrame(np.empty((60000,), dtype=[
    ('x', np.uint8),
    ('y', np.float64)
]))

och sedan infogade data för varje rad för den raden, utan att förlita sig på dataset lista:

data.values[count,:] = rowdata_at_count

Detta är inte typsäkert, men det är ganska snabbt (eftersom inga tilldelningar sker), så se till att rowdata_at_count är en lista vars element motsvarar kolumntyper.

REDIGERA

Ja, att lägga till 100 rader är, tror jag, som 100 konkatter av en rad (eftersom varje tillägg måste omfördela och kopiera tabellen, precis som konkat). Förallokering undviker både append och concat:tabellstorleken ändras inte, ingen omallokering och kopiering behöver göras.



  1. Mongo db inte lika med query fungerar inte

  2. SCUMM:Den agentbaserade databasövervakningsinfrastrukturen i ClusterControl

  3. Hur man använder MongoDB Stitch i Android-appar

  4. Modellera undersamlingar i MongoDB Realm Sync