What architecture is best to store a large 3 dimensional array in MySQL?
Deltas

The data you are "snapshotting" -- how often does it change?

I suggest looking into storing only the "deltas".  When some piece of the snapshot does not change at all, the delta is empty, and you can store nothing.

For reconstructing a snapshot at some point in the past, the processing is costly -- you need to walk through the versions, applying the deltas as you go.

There are two ways to run the deltas -- forward or backward.  Going 'forward', you would start with the original (complete) snapshot, then apply deltas until the desired time.  Going 'backward' has the advantage that the most recent snapshot is complete.  The going backward 'subtracts' off the changes.

Since you say "for years", it is probably wise to take complete snapshots every, say, day.  Then finding a particular 30-second second snapshot won't involve more than 2880 deltas.  This obviously leads to a speed/space tradeoff -- full snapshots are bulky, but infrequent snapshots leads to long 'reconstruction' times.

Trigger

Rather than "snapshotting", use a TRIGGER to build an "audit trail".  This is similar the "deltas" I mentioned, but it is better in that it is continuous, not "every 30 seconds".  The case I remember had over a billion rows in the audit trail; each row had (approximately) the timestamp, table name, PRIMARY KEY, and a compressed JSON blob of all the columns for that rows.  Your needs may be better served by some variant of that.

Schema

Until I see the actual queries, I will advise against PARTITIONing since it is usually of no performance benefit.

The link about table size limits is missing one number:  64TB is the limit for one non-partitioned InnoDB table.