Évidemment, c'est une vieille question, mais je l'ai rencontrée lorsque je faisais des recherches sur MongoDB pour les données de séries temporelles. J'ai pensé qu'il pourrait être utile de partager l'approche suivante pour allouer des documents complets à l'avance et effectuer des opérations de mise à jour, par opposition aux nouvelles opérations d'insertion. Notez que cette approche a été documentée ici et ici.
Imaginez que vous stockez des données chaque minute. Considérez la structure de document suivante :
{
timestamp: ISODate("2013-10-10T23:06:37.000Z"),
type: ”spot_EURUSD”,
value: 1.2345
},
{
timestamp: ISODate("2013-10-10T23:06:38.000Z"),
type: ”spot_EURUSD”,
value: 1.2346
}
Ceci est comparable à une approche relationnelle standard. Dans ce cas, vous produisez un document par valeur enregistrée, ce qui occasionne de nombreuses opérations d'insertion. Nous pouvons faire mieux. Considérez ce qui suit :
{
timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
type: “spot_EURUSD”,
values: {
0: 1.2345,
…
37: 1.2346,
38: 1.2347,
…
59: 1.2343
}
}
Maintenant, nous pouvons écrire un document et effectuer 59 mises à jour. C'est bien mieux car les mises à jour sont atomiques, les écritures individuelles sont plus petites et il existe d'autres avantages en termes de performances et de simultanéité. Mais que se passerait-il si nous voulions stocker toute la journée, et pas seulement les heures entières, dans un seul document. Cela nous obligerait alors à parcourir 1440 entrées pour obtenir la dernière valeur. Pour améliorer cela, nous pouvons étendre davantage ce qui suit :
{
timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
type: “spot_EURUSD”,
values: {
0: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
1: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
…,
22: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
23: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343}
}
}
En utilisant cette approche imbriquée, nous n'avons plus qu'à marcher, au maximum, 24 + 60 pour obtenir la toute dernière valeur de la journée.
Si nous construisons les documents avec toutes les valeurs remplies à l'avance avec un rembourrage, nous pouvons être sûrs que le document ne changera pas de taille et ne sera donc pas déplacé.