Files
metavox-loadtest/README.md
2026-03-16 16:58:41 +01:00

3.3 KiB
Raw Permalink Blame History

MetaVox Load Test

Ansible playbook voor het opzetten van een MetaVox loadtest omgeving op een Nextcloud server.

Wat doet het?

  • 50 teamfolders aanmaken via de Groupfolders API
  • 500.000 bestanden (10.000 per teamfolder) direct op het filesystem
  • 3-niveau mappenstructuur (10 hoofdmappen × 3 submappen = 30 leaf folders)
  • 100 metadata velddefinities (10 teamfolder + 90 file-level) via MetaVox OCS API
  • ~43 miljoen metadata records direct via MySQL
  • 7 redundante database indexes droppen voor performance en diskruimte

Waarom direct filesystem + MySQL?

Methode Snelheid 500K bestanden
WebDAV upload ~1.8 files/s ~3 dagen
occ files:scan ~2 files/s ~3 dagen
Direct filesystem + MySQL ~200 files/s ~40 minuten
Methode Snelheid 43M metadata records
MetaVox API ~0.5 req/s (timeouts) weken
Direct MySQL insert ~6.000 rows/s ~2 uur

Vereisten

  • Nextcloud server met MetaVox en Groupfolders app geïnstalleerd
  • Ansible (lokaal op de server, ansible_connection: local)
  • Python 3 met requests module
  • MySQL/MariaDB root toegang (zonder wachtwoord, via unix socket)
  • Minimaal 15GB vrije schijfruimte

Gebruik

Deployen

# Clone op de Nextcloud server
git clone https://gitea.rikdekker.nl/Samkey/metavox-loadtest.git
cd metavox-loadtest

# Pas server URL en credentials aan
vi group_vars/all.yml

# Draai het playbook
ansible-playbook -i inventory/hosts.yml site.yml

Specifieke fases draaien

# Alleen teamfolders aanmaken
ansible-playbook -i inventory/hosts.yml site.yml --tags teamfolders

# Alleen bestanden + DB registratie
ansible-playbook -i inventory/hosts.yml site.yml --tags files,db-register

# Alleen metadata records invoegen
ansible-playbook -i inventory/hosts.yml site.yml --tags metadata-records

Opruimen

ansible-playbook -i inventory/hosts.yml cleanup.yml

Fases

  1. Pre-check — Nextcloud bereikbaarheid en schijfruimte controleren
  2. Teamfolders — 50 teamfolders aanmaken via Groupfolders API
  3. Metadata velden — 100 velddefinities aanmaken en toewijzen via MetaVox API
  4. Bestanden — 500K .txt bestanden direct op filesystem schrijven
  5. DB registratie — Bestanden registreren in oc_filecache via MySQL
  6. Mappenstructuur — Submappen aanmaken en bestanden verdelen
  7. Drop indexes — 7 redundante indexes verwijderen van oc_metavox_file_gf_meta
  8. Metadata records — ~43M records invoegen in oc_metavox_file_gf_meta en oc_metavox_gf_metadata

Database indexes

Na het droppen van 7 redundante indexes blijven er 4 over op oc_metavox_file_gf_meta:

Index Kolommen
PRIMARY id
mf_file_gf_meta_unique file_id, groupfolder_id, field_name
idx_file_gf_gf_lookup groupfolder_id, field_name, field_value
idx_gf_file_meta_filter field_name, field_value, groupfolder_id

Configuratie

Alle instellingen staan in group_vars/all.yml:

Variabele Default Beschrijving
num_teamfolders 50 Aantal teamfolders
files_per_teamfolder 10000 Bestanden per teamfolder
sql_batch_size 2000 Rijen per INSERT statement
folder_structure 10×3 Mappenstructuur definitie