如何将50GB的XML数据导入MySQL数据库?

时间:2015-03-07 20:03:05

标签: php mysql xml

我有一个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百万次。

0 个答案:

没有答案