leestijd
5 min

Privacy en prestatie-update

Een jaar geleden introduceerden we videostatistieken op mave.io. Sindsdien hebben we miljoenen weergaven verwerkt. We maakten de software open source om onze belofte over de privacy van je klanten aantoonbaar waar te maken. Het systeem draait op het Elixir-framework Phoenix en PostgreSQL met TimescaleDB: een uitstekende combinatie voor een eenvoudig pakket waarmee je weergaven en geaggregeerde gebruiksgegevens van video’s meet. Elixir en Phoenix verwerken grote aantallen gelijktijdige verbindingen bijzonder goed. Met gemultiplexte websockets kunnen we gegevens van meerdere video’s op je site verwerken, terwijl PostgreSQL met TimescaleDB ideaal is voor tijdreeksdata. Maar het was tijd voor een update.

Het probleem

TimescaleDB beheerde niet alle gegevens in ons product voor videostatistieken. Voor veel gegevens die geen tijdreeks vormden, gebruikten we PostgreSQL. In het begin werkte dat prima, maar naarmate we groeiden ontstonden prestatieproblemen. Ook sloegen we veel ongebruikte data op die de prestaties onnodig belastte. Om query’s sneller te maken, moesten we de gegevens beter structureren en comprimeren en onze database verkleinen.

Daarnaast hadden we geen efficiënte manier om op te vragen welke seconden mensen van een video bekeken. Inzicht in betrokkenheid onderscheidt videostatistieken van andere meetinstrumenten. We moesten deze gegevens dus beter opslaan en opvragen.

Ook merkten we dat sommige klanten de statistieken volledig wilden uitschakelen. Zij hechten nog sterker aan de privacy van hun klanten en willen werkelijk niets meten. Omdat wij die privacy willen waarborgen, geven we je graag de mogelijkheid om nog een stap verder te gaan. We hadden dus een manier nodig om statistieken helemaal uit te zetten.

De oplossing

Het is technisch en behoorlijk veel, dus in deze lijst zetten we overzichtelijk uiteen wat we tot nu toe hebben gedaan:

  • Voor iedere video die je bekijkt, of waarvoor je statistieken start, maken we een Phoenix Channel. Dat vertegenwoordigt een sessie en bevat genormaliseerde gegevens over browser en apparaat, zonder dat daarmee een fingerprint kan worden gemaakt. We hebben hiervan een hypertable in TimescaleDB gemaakt, zodat de gegevens na verloop van tijd worden gecomprimeerd.
  • Per sessie registreren we afspeel- en pauzegebeurtenissen. Ook als de verbinding wordt verbroken, bijvoorbeeld doordat je het tabblad sluit, ontstaat op de server een pauzegebeurtenis. Dat is de belangrijkste reden waarom we websockets gebruiken.
  • Een GenServer in Elixir verwerkt alle gebeurtenissen in batches. Hij analyseert en valideert de gegevens voordat ze aan de database worden toegevoegd. Elixir kan veel gebeurtenissen gelijktijdig verwerken; de database niet.
  • Tijdens dit proces maken we een concept met de naam Durations. Dit vertegenwoordigt hoe lang iemand naar een video keek, inclusief het bereik aan bekeken seconden. Best mooi! PostgreSQL kan dit eenvoudig opslaan als type int4range.
  • Op basis van dat bereik bepalen we ook of de sessie al een duration heeft die het bereik geheel of gedeeltelijk omvat. Zo kunnen we de uniekheid van de duration vaststellen.

Op mave.io tonen we geaggregeerde gegevens per space en uiteraard ook per video. Die eenvoudige weergave van alle gebeurtenissen geeft je beter inzicht in de manier waarop mensen je video bekijken. Daarnaast tonen we browsers, apparaten en de URL’s waarop je de video hebt ingesloten.

Integratie van videostatistieken in mave.io met weergaven, betrokkenheid en apparaatgegevens.
↳ Integratie van videostatistieken in mave.io met weergaven, betrokkenheid en apparaatgegevens.

Maar kun je ook een eigen metrics-server draaien, zelf aggregaties bouwen en die met mave.io combineren? Jazeker. In onze componentenbibliotheek kun je nu videostatistieken en andere algemene instellingen configureren:

<script crossorigin type="module">
  import {
    Player,
    setConfig,
  } from "//cdn.video-dns.com/npm/@maveio/components/+esm";

  setConfig({
    metrics: { enabled: true, socket: "wss://your_own_metrics_instance" },
  });
</script>

Zoals je ziet, kun je videostatistieken ook voor alle mave-elementen op je site volledig uitschakelen. De gegevens komen dan niet op mave.io terecht, zodat de statistieken daar leeg blijven. Je kunt wel een eigen server starten en precies opvragen wat je wilt zien. Voor het gebruik van metrics heb je mave.io zelfs helemaal niet nodig:

Metrics
maveio/metrics op GitHub

We brachten de server en client bovendien samen in één monorepo. Zo is meteen duidelijk wat je nodig hebt als je het geheel zelf wilt draaien. Heb je vragen of wil je een eigen metrics-server gebruiken? Neem dan contact op met onze support of praat mee op onze Discord.

Gepubliceerd op 19 maart 2024
werkt met
Ontwikkelaar?
Onze documentatie begeleidt je bij het embedden van video: van eenvoudige eerste stappen tot handmatige configuraties voor ervaren gebruikers. Je vindt er meerdere hostingopties, waaronder ons standaard-CDN, en uitleg over populaire webframeworks.
script
react
vue
1
2
3
4
5
🍪 Klik op ‘Accepteren’ om te bevestigen dat je het ermee eens bent dat we geen cookies gebruiken. Ja, deze banner is puur voor de show!
Accepteren