MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB като база данни за времеви серии

Очевидно това е стар въпрос, но попаднах на него, когато проучвах MongoDB за данни от времеви серии. Мислех, че може да си струва да споделя следния подход за предварително разпределяне на пълни документи и извършване на операции за актуализиране, за разлика от новите операции за вмъкване. Имайте предвид, че този подход е документиран тук и тук.

Представете си, че съхранявате данни всяка минута. Помислете за следната структура на документа:

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

Това е сравнимо със стандартен релационен подход. В този случай създавате един документ на записана стойност, което причинява много операции за вмъкване. Можем по-добре. Помислете за следното:

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

Сега можем да напишем един документ и да извършим 59 актуализации. Това е много по-добре, защото актуализациите са атомарни, отделните записи са по-малки и има други предимства за производителност и едновременност. Но какво ще стане, ако искаме да съхраняваме целия ден, а не само целите часове, в един документ. Това ще изисква от нас да преминем покрай 1440 записа, за да получим последната стойност. За да подобрим това, можем да разширим допълнително до следното:

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

Използвайки този вложен подход, сега трябва само да вървим, максимум, 24 + 60, за да получим последната стойност за деня.

Ако изградим документите с всички стойности, попълнени с допълване предварително, можем да сме сигурни, че документът няма да промени размера и следователно няма да бъде преместен.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 3 начина да изберете реда с максимална стойност в SQL

  2. MongoDB:Рамка за агрегиране:Вземете документ с последна дата за идентификатор на групиране

  3. Начини за внедряване на версии на данни в MongoDB

  4. MongoDB заявки с нулева стойност

  5. пролетни данни - Mongodb - метод findBy за вложени обекти