sql >> Database >  >> RDS >> Mysql

Wat is de beste manier om producten te vergelijken / in te voegen / bij te werken in een MySQL db vanuit een .CSV-bestand

Wij hadden een soortgelijke situatie. Na veel pogingen om het script te verbeteren, besloten we dat we een andere aanpak nodig hadden om onze import te laten werken en niet ~10 uur te kosten.

Wat we deden was alle PHP-code dumpen en in plaats daarvan mysqlimport . gebruiken om de inhoud van het CSV-bestand rechtstreeks in een tabel te laden. Die tabel bevat nu alles wat we nodig hebben, maar niet in een vorm die voor ons nuttig is (geen structuur, sommige velden hebben wat verwerking nodig, enz.)

Omdat alles nu echter in de database staat, kunnen we alles doen wat we willen met een query. Als u bijvoorbeeld alle gegevens verwijdert die niet langer in het importbestand staan, is dat gewoon DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , het bijwerken van bestaande records is gewoon UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Het is duidelijk dat voor een complex importscript uw ​​queries complexer zullen zijn en dat u er meer van nodig zult hebben. Mogelijk moet u zelfs een aantal opgeslagen procedures invoeren om de verwerking op afzonderlijke velden uit te voeren. Maar als je dit soort aanpak kunt volgen, krijg je een proces dat veel gegevens aankan en zeer schaalbaar is.



  1. Hoe controleert Zend\Db in ZF2 transacties?

  2. Wat is database-sharding?

  3. Hoe kan ik kiezen uit de lijst met waarden in Oracle

  4. mysql - selecteer het uur in datetime en group