我有一个XML文件(50GB,约900M行),我希望收集一些数据。我已经计算出XML文件中的这些900M行将导致大约8M行存储在数据库中。我的方法应该如何?
首先,我想过使用PHP脚本。这个脚本应该使用XMLReader遍历整个文件,收集数组中一行的数据,将数据从该数组插入数据库,删除该数组(从而释放内存)等等(带有数据的新数组,插入在数据库中,删除数组等。)
然后我被告知这是一个好主意 - 但是非常愚蠢。这将需要年龄,我会有一些限制。相反,我应该考虑将XML文件直接导入MySQL,然后使用SQL脚本删除不需要的数据。这是最佳方法吗?如果是这样,有人可以详细说明应如何做到这一点?
还是有其他/更好的方法吗?
编辑(XML文件中的示例):
<?xml version="1.0" encoding="UTF-8"?>
<ns:ESStatistikListeModtag_I xmlns:ns="">
<ns:StatistikSamling>
<ns:Statistik>
<ns:KoeretoejIdent>1026503230510888</ns:KoeretoejIdent>
<ns:KoeretoejArtNummer>3</ns:KoeretoejArtNummer>
<ns:KoeretoejArtNavn>Varebil</ns:KoeretoejArtNavn>
<ns:KoeretoejAnvendelseStruktur>
<ns:KoeretoejAnvendelseNummer>40</ns:KoeretoejAnvendelseNummer>
<ns:KoeretoejAnvendelseNavn>Godstransport erhverv</ns:KoeretoejAnvendelseNavn>
</ns:KoeretoejAnvendelseStruktur>
<ns:RegistreringNummerNummer>TX90281</ns:RegistreringNummerNummer>
<ns:RegistreringNummerUdloebDato>2010-11-19+01:00</ns:RegistreringNummerUdloebDato>
<ns:KoeretoejOplysningGrundStruktur>
<ns:KoeretoejOplysningOprettetUdFra>Typeattest</ns:KoeretoejOplysningOprettetUdFra>
<ns:KoeretoejOplysningStatus>Eksporteret</ns:KoeretoejOplysningStatus>
<ns:KoeretoejOplysningStatusDato>2011-04-06T00:00:00.000+02:00</ns:KoeretoejOplysningStatusDato>
<ns:KoeretoejOplysningFoersteRegistreringDato>2005-11-04+01:00</ns:KoeretoejOplysningFoersteRegistreringDato>
<ns:KoeretoejOplysningStelNummer>JTDKC283800028896</ns:KoeretoejOplysningStelNummer>
<ns:KoeretoejOplysningTotalVaegt>1525</ns:KoeretoejOplysningTotalVaegt>
<ns:KoeretoejOplysningEgenVaegt>1025</ns:KoeretoejOplysningEgenVaegt>
<ns:KoeretoejOplysningTekniskTotalVaegt>1525</ns:KoeretoejOplysningTekniskTotalVaegt>
<ns:KoeretoejOplysningAkselAntal>2</ns:KoeretoejOplysningAkselAntal>
<ns:KoeretoejOplysningStoersteAkselTryk>825</ns:KoeretoejOplysningStoersteAkselTryk>
<ns:KoeretoejOplysningTilkoblingMulighed>false</ns:KoeretoejOplysningTilkoblingMulighed>
<ns:KoeretoejOplysningBlokering>false</ns:KoeretoejOplysningBlokering>
<ns:KoeretoejOplysningTypeAnmeldelseNummer>A10253</ns:KoeretoejOplysningTypeAnmeldelseNummer>
<ns:KoeretoejOplysningKommentar>DMR Konvertering</ns:KoeretoejOplysningKommentar>
<ns:KoeretoejOplysningAntalGear>5</ns:KoeretoejOplysningAntalGear>
<ns:KoeretoejBetegnelseStruktur>
<ns:KoeretoejMaerkeTypeNummer>10265</ns:KoeretoejMaerkeTypeNummer>
<ns:KoeretoejMaerkeTypeNavn>TOYOTA</ns:KoeretoejMaerkeTypeNavn>
<ns:Model>
<ns:KoeretoejModelTypeNummer>10265030</ns:KoeretoejModelTypeNummer>
<ns:KoeretoejModelTypeNavn>YARIS</ns:KoeretoejModelTypeNavn>
</ns:Model>
<ns:Variant>
<ns:KoeretoejVariantTypeNummer>1026503013</ns:KoeretoejVariantTypeNummer>
<ns:KoeretoejVariantTypeNavn>1,4 VERSO TD</ns:KoeretoejVariantTypeNavn>
</ns:Variant>
<ns:Type>
<ns:KoeretoejTypeTypeNummer>10265030130000001</ns:KoeretoejTypeTypeNummer>
<ns:KoeretoejTypeTypeNavn>UOPLYST</ns:KoeretoejTypeTypeNavn>
</ns:Type>
</ns:KoeretoejBetegnelseStruktur>
<ns:KoeretoejFarveStruktur>
<ns:FarveTypeStruktur>
<ns:FarveTypeNummer>1</ns:FarveTypeNummer>
<ns:FarveTypeNavn>Ukendt</ns:FarveTypeNavn>
</ns:FarveTypeStruktur>
</ns:KoeretoejFarveStruktur>
<ns:KarrosseriTypeStruktur/>
<ns:KoeretoejSupplerendeKarrosseriSamlingStruktur>
<ns:KoeretoejSupplerendeKarrosseriSamling>
<ns:KoeretoejSupplerendeKarrosseriTypeStruktur>
<ns:SupplerendeKarrosseriTypeNummer>61</ns:SupplerendeKarrosseriTypeNummer>
<ns:SupplerendeKarrosseriTypeNavn>Lukket kasse</ns:SupplerendeKarrosseriTypeNavn>
</ns:KoeretoejSupplerendeKarrosseriTypeStruktur>
</ns:KoeretoejSupplerendeKarrosseriSamling>
</ns:KoeretoejSupplerendeKarrosseriSamlingStruktur>
<ns:KoeretoejNormStruktur>
<ns:NormTypeStruktur>
<ns:NormTypeNummer>24</ns:NormTypeNummer>
<ns:NormTypeNavn>År 2000 miljønorm</ns:NormTypeNavn>
</ns:NormTypeStruktur>
</ns:KoeretoejNormStruktur>
<ns:KoeretoejMiljoeOplysningStruktur>
<ns:KoeretoejMiljoeOplysningPartikelFilter>false</ns:KoeretoejMiljoeOplysningPartikelFilter>
</ns:KoeretoejMiljoeOplysningStruktur>
<ns:KoeretoejMotorStruktur>
<ns:KoeretoejMotorCylinderAntal>4</ns:KoeretoejMotorCylinderAntal>
<ns:KoeretoejMotorSlagVolumen>1364.0</ns:KoeretoejMotorSlagVolumen>
<ns:KoeretoejMotorStoersteEffekt>102.0</ns:KoeretoejMotorStoersteEffekt>
<ns:DrivkraftTypeStruktur>
<ns:DrivkraftTypeNummer>2</ns:DrivkraftTypeNummer>
<ns:DrivkraftTypeNavn>Diesel</ns:DrivkraftTypeNavn>
</ns:DrivkraftTypeStruktur>
</ns:KoeretoejMotorStruktur>
</ns:KoeretoejOplysningGrundStruktur>
<ns:EjerBrugerSamling>
<ns:EjerBruger>
<ns:EjerBrugerForholdGrundStruktur>
<ns:EjerBrugerForholdForhold>Bruger</ns:EjerBrugerForholdForhold>
<ns:EjerBrugerForholdPrimaer>false</ns:EjerBrugerForholdPrimaer>
</ns:EjerBrugerForholdGrundStruktur>
<ns:PersonKoen>3</ns:PersonKoen>
</ns:EjerBruger>
<ns:EjerBruger>
<ns:EjerBrugerForholdGrundStruktur>
<ns:EjerBrugerForholdForhold>Ejer</ns:EjerBrugerForholdForhold>
<ns:EjerBrugerForholdPrimaer>false</ns:EjerBrugerForholdPrimaer>
</ns:EjerBrugerForholdGrundStruktur>
<ns:PersonKoen>3</ns:PersonKoen>
</ns:EjerBruger>
</ns:EjerBrugerSamling>
<ns:SynResultatStruktur>
<ns:SynResultatSynsType>RegistreringsSyn</ns:SynResultatSynsType>
<ns:SynResultatSynsDato>2011-02-25+01:00</ns:SynResultatSynsDato>
<ns:SynResultatSynsResultat>Godkendt</ns:SynResultatSynsResultat>
<ns:SynResultatSynStatus>Aktiv</ns:SynResultatSynStatus>
<ns:SynResultatSynStatusDato>2011-02-25+01:00</ns:SynResultatSynStatusDato>
</ns:SynResultatStruktur>
<ns:KoeretoejRegistreringStatus>Afmeldt</ns:KoeretoejRegistreringStatus>
<ns:KoeretoejRegistreringStatusDato>2010-11-19T00:00:00.000+01:00</ns:KoeretoejRegistreringStatusDato>
</ns:Statistik>
</ns:StatistikSamling>
</ns:ESStatistikListeModtag_I>
ns:Statistik 包含一行的数据。 ns:Statistik应该在文档中出现6-8百万次。