3.3 KiB
3.3 KiB
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
requestsmodule - 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
- Pre-check — Nextcloud bereikbaarheid en schijfruimte controleren
- Teamfolders — 50 teamfolders aanmaken via Groupfolders API
- Metadata velden — 100 velddefinities aanmaken en toewijzen via MetaVox API
- Bestanden — 500K
.txtbestanden direct op filesystem schrijven - DB registratie — Bestanden registreren in
oc_filecachevia MySQL - Mappenstructuur — Submappen aanmaken en bestanden verdelen
- Drop indexes — 7 redundante indexes verwijderen van
oc_metavox_file_gf_meta - Metadata records — ~43M records invoegen in
oc_metavox_file_gf_metaenoc_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 |