(la version en français figure un peu plus bas)
We often get question about the storage needs for a Panoramax instance.
It is difficult to give precise numbers because the nature of the picture can have a lot of variation (classic or 360, low end camera or high-end or professional ones, etc), but here are some statistics coming from the actual 100 million of pictures hosted on 10 instance (most of them on OSMFR and IGN instance).
| Camera | Mpx | Avg size | bits/pixel | pics per TB |
|---|---|---|---|---|
| Gopro Max | 16 | 3 MB | 1.6 | 150k |
| Gopro Max2 | 30 | 4 MB | 1.1 | 125k |
| Qoocam 3 Ultra photo | 96 | 18 MB | 1.6 | 26k |
| Qoocam 3 Ultra timelapse JPEG | 30 | 2.6 MB | 0.73 | 185k |
| Ladybug 5 | 32 | 2 - 5 MB | 0.5 - 1.25 | 230k - 92k |
| Ladybug 6 | 72 | 9.2 MB | 1.0 | 52k |
| imajbox 360 HD | 72 | 8.6 MB | 0.95 | 55k |
| Pulsar | 57 | 4 MB | 0.6 | 120k |
| iPhone 16 Pro | 23 | 6 MB | 2.0 | 150k |
| iPhone 16 Pro | 11 | 2.8 MB | 1.9 | 330k |
| iPhone 14/15 Pro | 11 | 4 MB | 2.75 | 230k |
| Gopro Hero 13 | 26 | 4 MB | 1.2 | 230k |
| Gopro Hero 12 | 26 | 5 MB | 1.5 | 185k |
*italic = non 360
As you can see, the storage needs can vary a lot depending on the camera
If you know which type of camera will be mostly used to contribute to your instance, you can use the above to pre-compute the storage need.
For example 1 million pictures shot using the imajbox 360 HD gives around 9TB for the originals.
Originals + derivates…
For all pictures, Panoramax is also generating derivates like thumbnails (500 pixels wide) and low resolution versions (2048 pixel wide). This is not using much additional storage space, something like 10%.
For 360° pictures, Panoramax is also generating a tiled version for faster display by the viewer. It allows to download only the visible part, usually 1/4 of the total. The tiled version for 360° pictures is more or less doubling the storage need.
In our example above with imajbox 72 Mpx 360°, this means we have around 18TB used by both the originals and the derivates.
Redundancy, backups and additional storage
The above storage is a raw storage needed for the pictures. You don’t need fast (SSD) storage for the pictures, HDD are enough, but SSD it is much better for the postgresql database unless you have enough RAM cache.
The database itself is roughly 4GB for million of pictures. Some maintenance process may temporarily need twice this space.
Disks can fail and redundancy is the way to avoid the consequences of failures.
We cannot give specific advice on this, only share what we do.
On OSM-FR instance, we use ZFS to take care of all storage:
- RAIDZ2 is used on picture storage with 2 redundancy disks in each group of 6 disks (called vdev in ZFS world)
- mirroring is used on the SSD where we have the databases and all our container storage
- a remote backup of the containers/databases and the original pictures is also done daily using ZFS differential snapshots
ZFS also allows to increase the storage gradually, by replacing disks with larger ones or add more groups of new disks. With ZFS, we also benefit of data compression on the databases, checksums everywhere that allows to detect bad data (monthly scrubs) and fix them, etc…
Future storage optimization
As storage is the main challenge for any Panoramax instance, we are planning to work on some optimizations, mainly on the doubling caused by the tiled version of 360 pictures, but this is another topic !
En français !!!
On nous pose souvent des questions sur les besoins en stockage d’une instance Panoramax.
Il est difficile de donner des chiffres précis, car la nature des images peut varier considérablement (photos classiques ou à 360°, appareils photo d’entrée de gamme, haut de gamme ou professionnels, etc.), mais voici quelques statistiques issues des 100 millions d’images actuellement hébergées sur 10 instances (la plupart sur les instances OSMFR et IGN).
| Camera | Mpx | Taille moyenne | bits/pixel | images par To |
|---|---|---|---|---|
| Gopro Max | 16 | 3 MB | 1.6 | 150k |
| Gopro Max2 | 30 | 4 MB | 1.1 | 125k |
| Qoocam 3 Ultra photo | 96 | 18 MB | 1.6 | 26k |
| Qoocam 3 Ultra timelapse JPEG | 30 | 2.6 MB | 0.73 | 185k |
| Ladybug 5 | 32 | 2 - 5 MB | 0.5 - 1.25 | 230k - 92k |
| Ladybug 6 | 72 | 9.2 MB | 1.0 | 52k |
| imajbox 360 HD | 72 | 8.6 MB | 0.95 | 55k |
| Pulsar | 57 | 4 MB | 0.6 | 120k |
| iPhone 16 Pro | 23 | 6 MB | 2.0 | 150k |
| iPhone 16 Pro | 11 | 2.8 MB | 1.9 | 330k |
| iPhone 14/15 Pro | 11 | 4 MB | 2.75 | 230k |
| Gopro Hero 13 | 26 | 4 MB | 1.2 | 230k |
| Gopro Hero 12 | 26 | 5 MB | 1.5 | 185k |
*italic = non 360
Comme vous pouvez le constater, les besoins en stockage peuvent varier considérablement selon la caméra utilisée.
Si vous savez quel type d’appareil photo sera principalement utilisé pour alimenter votre instance, vous pouvez vous servir des informations ci-dessus pour estimer à l’avance les besoins en stockage.
Par exemple, 1 million de photos prises avec l’imajbox 360 HD représentent environ 9 To pour les fichiers originaux.
Fichiers originaux + dérivés…
Pour toutes les photos, Panoramax génère également des versions dérivés tels que des vignettes (500 pixels de large) et des versions basse résolution (2048 pixels de large). Cela ne nécessite pas beaucoup d’espace de stockage supplémentaire, environ 10 %.
Pour les photos à 360°, Panoramax génère également une version en mosaïque afin d’accélérer l’affichage par la visionneuse. Cela permet de ne télécharger que la partie visible, généralement 1/4 du total. La version en mosaïque des images à 360° double plus ou moins les besoins en stockage.
Dans notre exemple ci-dessus avec l’imajbox 72 Mpx 360°, cela signifie que nous avons environ 18 To utilisés par les originaux et les dérivés.
Redondance, sauvegardes et stockage supplémentaire
L’espace de stockage mentionné ci-dessus correspond à l’espace brut nécessaire pour les images. Vous n’avez pas besoin d’un stockage rapide (SSD) pour les images ; un disque dur (HDD) suffit. En revanche, un SSD est nettement préférable pour la base de données PostgreSQL, à moins que vous ne disposiez d’une mémoire cache RAM suffisante.
La base de données elle-même occupe environ 4 Go pour un million d’images. Certaines opérations de maintenance peuvent temporairement nécessiter le double de cet espace.
Les disques peuvent tomber en panne et la redondance est le moyen d’éviter les conséquences de ces pannes.
Nous ne pouvons pas donner de conseils spécifiques à ce sujet, seulement partager ce que nous faisons.
Sur l’instance OSM-FR, nous utilisons ZFS pour gérer l’ensemble du stockage :
- RAIDZ2 est utilisé pour le stockage des images avec 2 disques de redondance dans chaque groupe de 6 disques (appelés vdev dans l’univers ZFS)
- la mise en miroir est utilisée sur les SSD où se trouvent les bases de données et tout notre stockage de conteneurs
- une sauvegarde à distance des conteneurs/bases de données et des images originales est également effectuée quotidiennement à l’aide de snapshots différentiels ZFS
ZFS permet également d’augmenter progressivement le stockage, en remplaçant les disques par des disques plus grands ou en ajoutant de nouveaux groupes de disques. Avec ZFS, nous bénéficions également de la compression des données sur les bases de données, de sommes de contrôle partout qui permettent de détecter les données corrompues (vérifications mensuelles) et de les corriger, etc.
Optimisation future du stockage
Le stockage étant le principal défi pour toute instance Panoramax, nous prévoyons de travailler sur certaines optimisations, principalement sur le doublement de volume causé par la version en mosaïque des images à 360°, mais c’est un autre sujet !