sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB som en tidsseriedatabase

Dette er naturligvis et gammelt spørgsmål, men jeg stødte på det, da jeg undersøgte MongoDB for tidsseriedata. Jeg tænkte, at det kunne være værd at dele følgende tilgang til at allokere komplette dokumenter på forhånd og udføre opdateringsoperationer i modsætning til nye indsættelsesoperationer. Bemærk, denne tilgang blev dokumenteret her og her.

Forestil dig, at du gemmer data hvert minut. Overvej følgende dokumentstruktur:

{
  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
}

Dette kan sammenlignes med en standard relationel tilgang. I dette tilfælde producerer du et dokument pr. registreret værdi, hvilket forårsager mange indsættelsesoperationer. Vi kan gøre det bedre. Overvej følgende:

{
  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
  }
}

Nu kan vi skrive et dokument og udføre 59 opdateringer. Dette er meget bedre, fordi opdateringer er atomare, individuelle skrivninger er mindre, og der er andre ydeevne- og samtidighedsfordele. Men hvad nu hvis vi ville gemme hele dagen, og ikke kun hele timerne, i ét dokument. Dette ville så kræve, at vi går langs 1440 poster for at få den sidste værdi. For at forbedre dette kan vi udvide til følgende:

{
  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}
  }
}

Ved at bruge denne indlejrede tilgang skal vi nu kun gå maksimalt 24 + 60 for at få den allersidste værdi på dagen.

Hvis vi bygger dokumenterne med alle værdierne udfyldt med udfyldning på forhånd, kan vi være sikre på, at dokumentet ikke ændrer størrelse og derfor ikke flyttes.



  1. Lagring af nøgler med præfiks, der udløber i redis

  2. php-redis - Er der en måde at gemme PHP-objekt i Redis uden at serialisere det?

  3. Mongoose befolker vs objektnesting

  4. Mongodb find inde i sub-array