01 The route
Thousands of artists. Measured every week.
MID, the database an HEC Montréal research team uses to study the music industry, designed and run by Witify. Every week, measurements for thousands of artists come in, each one dated.
- Client
-
- Sector
- Academic research
- Services
- Technologies
- Laravel, MySQL, Amazon S3
Six figures, and where they come from
-
More than 1.9billion
dated measurements Each row carries the date of the delivery that brought it.
-
3
tables of more than half a billion rows Track statistics, track indicators and album indicators.
-
More than 275GB
of data Indexes included.
-
More than 6,500
artists tracked With their 1.4 million albums and 3.8 million tracks.
-
21
files per delivery Imported in 18 steps, always in the same order.
-
170
deliveries recorded One a week since August 2023.
Volumes read in the production database on November 13, 2026, and rounded. The last two numbers come from the import’s code and its journal.
A list of artists, and nowhere to keep their history
From 21 files to the database, without losing a week
02 Receive
21 files expected. Not 20.
03 Import
18 steps, always in the same order
04 Resume
One unreadable row stops everything. On purpose.
05 Close
Every week leaves a record
The artist at the centre. A date on every measurement.
A research question becomes a file
Format
One row per track and per date
The database’s narrow rows are gathered: one column per measurement.
Scope
Narrow it down before exporting
A request that is too broad takes weeks to export. We narrow it with the researchers, then the large table is read in slices.
Three choices so the series holds, week after week
-
Files, not millions of calls.
- The risk
- Querying the supplier artist by artist, track by track: millions of calls every week.
- Our choice
- One complete delivery a week, dropped in one go by the supplier into a storage space, and kept as it came.
- The gain
- A consistent snapshot of the whole catalogue every week, with the original files kept.
-
Stop rather than leave a gap.
- The risk
- A week loaded halfway, or loaded before the previous one: a skewed series nobody notices until an analysis.
- Our choice
- One delivery at a time, in date order. At the slightest error, the import stops, alerts us and waits; it then resumes from the row where it stopped.
- The gain
- Every week is whole, or clearly marked as skipped in the journal: never in between.
-
Narrow tables built to last.
- The risk
- Tables swelling by several million rows a week until they slow down the import, then the researchers’ queries.
- Our choice
- Where the volume is huge, a few typed columns and nothing more; the supplier’s raw detail is kept only where it is rare. One of the two variants of the track statistics was dropped to lighten the largest table.
- The gain
- Since August 2023, the database has grown every week without changing shape.
What the database is made of
- Application
- Laravel, PHP, scheduled commands; the import runs without a screen
- Data
- MySQL, tuned for heavy writes; a connection reserved for reading serves the extracts
- Storage
- Amazon S3, compressed CSV files, one dated folder per delivery
- Import
- Custom orchestrator, 18 steps, streamed reading, batched writes, resume from the row
- Monitoring
- Sentry, health checks, disk, database and scheduler; an email on every failure
- Backups
- Monthly snapshots
Key milestones
- August 2023 Weekly import The first delivery loaded, the database validated with the team.
- September 2023 Data dictionary Every table and every field described for the researchers.
- January 2024 First extracts Files prepared at the researchers’ request.
- September 2024 Backups and checks Monthly snapshots, monitoring of the disk, the database and the scheduler.
- March 2025 Hardened import Artists, albums and tracks carry a unique key: loading them again no longer creates duplicates. An incomplete delivery no longer blocks the next one.
- April 2026 Large extract The largest tables read in slices.
Is your data arriving faster than you can file it?
Thirty minutes to follow one of your files from its source to your database.
Names and figures shown in the interfaces are examples.