De kunst van grote (3GPP) XML files verwerken

Grote 3GPP XML files verwerken lijkt in eerste instantie een hoop gedoe. Ontdek de kunst van het verwerken van deze bestanden door onze blog te lezen!

XML-geformatteerde Configuration Management (CM) gegevensbestanden gepubliceerd door 2G, 3G, 4G en 5G mobiele netwerken via de Northbound Interface (NBI) van de OSS zijn heel gebruikelijk. De bijbehorende normen en hun specificaties worden ontwikkeld door 3GPP.

Het verwerken van deze XML-bestanden kan een gedoe zijn vanwege de grootte van deze bestanden: tientallen gigabytes zijn gebruikelijk voor landelijke configuratiebestanden. Wanneer dergelijke bestanden worden verwerkt, kunnen servers langer dan een uur worden geblokkeerd.

Gewoon een grote lijst met netwerkelementen

In principe zijn XML-bestanden met netwerkgerelateerde CM-gegevens (ook topologiebestanden genoemd) een grote lijst van alle netwerkelementen en hun configuratie. Een topologiebestand ziet er meestal ongeveer zo uit:

...
  <fileHeader ... />
  <configData ...>
    <element name=ElementName1>
      element1_config
    </element>
    <element name=ElementName2>
      element2_config
    </element>
    ...
    <element name=ElementNameN>
      elementN_config
    </element>
  </configData>
  <fileFooter ... />
...

XML File grootte

Topologiebestanden variëren in grootte, natuurlijk afhankelijk van het aantal netwerkelementen. Bestandsgroottes variëren van enkele honderden megabytes voor kleine netwerken tot tientallen gigabytes (voor netwerken met miljoenen elementen).

DOM en event streaming parsing

Over het algemeen zijn er twee manieren om XML te parseren;

  1. Document Object Model ofwel DOM
  2. Event streaming parsing

DOM laadt het volledigeXML-bestand in het geheugen waar een volledige boomweergave van de gegevens wordt gemaakt. De volledige hiërarchie is beschikbaar in het geheugen tijdens de verwerking van de data.

Event streaming parsing is event-based; XML bestanden worden serieel gelezen (er wordt geen volledige boomstructuur in het geheugen opgeslagen) en events zoals XMLEvent::StartElement enXMLEvent::EndElement moeten tijdens de verwerking worden behandeld.

Het is duidelijk dat, om te voorkomen dat servers worden geblokkeerd vanwege het gebruik van overmatige hoeveelheden geheugen, event streaming moet worden toegepast bij het parseren van enorme XML-bestanden.

Verdeel en heers

Een groot XML-geformatteerd topologiebestand is in feite een grote lijst met configuraties van netwerkelementen. Om het XML-geformatteerde topologiebestand met goede prestaties te parseren en geen servers te blokkeren, kan het bestand worden opgesplitst in kleinere bestanden.

Splitsen van groot CM XML-bestand met configuratie van N-netwerkelementen in N 1-element configuratiebestanden, klaar voor parallelle verwerking en opslag in datawarehouse.
Splitsen van een groot CM XML-bestand met de configuratie van N-netwerkelementen in N 1-element configuratiebestanden, klaar voor parallelle verwerking en opslag in een datawarehouse.

Een run met een streaming parser die een groot XML-bestand met de configuratie van N-elementen splitst in N kleine bestanden met de configuratie van 1 element is niet zo resource intensief en heeft een minimale impact op de algehele systeemprestaties.

De uitvoer kan op een gecontroleerde en geplande manier en zelfs parallel worden verwerkt, met behulp van een cluster van nodes. Op deze manier wordt het blokkeren van servers voorkomen en kan de verwerking veel sneller gebeuren.

Een ander voordeel van het splitsen van een groot bestand in kleinere bestanden is dat in het geval van een element dat onjuist opgemaakte data teruggeeft, de andere configuraties nog steeds kunnen worden verwerkt. Met deze aanpak is de XML-verwerking minder foutgevoelig.

Implementatie

De meeste programmeertalen ondersteunen DOM en het parseren van XML voor het streamen van gebeurtenissen standaard of hebben een de facto standaardbibliotheek.

Voor de meeste object georiënteerde programmeertalen als Python, C++, enJava, is er een SAX (Simple API for XML) library beschikbaar. Dit is een gestandaardiseerde event gestuurde API voor het streaming parsing proces.

Er zijn op gebeurtenissen gebaseerde XML-parseringsbibliotheken beschikbaar voor niet-objectgeoriënteerde moderne talen zoals Rusten Haskell.

Zie hier een voorbeeld van een XML splitter die in Rust geschreven is.

Neem contact met ons op

Neem gerust contact met ons op als je meer wilt weten over het verwerken van grote XML-bestanden of het Rust-voorbeeld. Wij verwerken dit soort data dagelijks.

Aarzel niet om contact met ons op te nemen voor meer informatie over 1OPTIC, onze dataverwerkingsoplossing die zich kenmerkt dankzij onder meer volgende features; high-performance, multi-vendor, cross-domain en het verwerken van grote XML files (die bijvoorbeeld configuration data bevatten).