MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB sebagai Basis Data Deret Waktu

Jelas ini adalah pertanyaan lama, tetapi saya menemukannya ketika saya sedang meneliti MongoDB untuk data deret waktu. Saya pikir mungkin ada baiknya berbagi pendekatan berikut untuk mengalokasikan dokumen lengkap terlebih dahulu dan melakukan operasi pembaruan, sebagai lawan dari operasi penyisipan baru. Perhatikan, pendekatan ini didokumentasikan di sini dan di sini.

Bayangkan Anda menyimpan data setiap menit. Perhatikan struktur dokumen berikut:

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

Ini sebanding dengan pendekatan relasional standar. Dalam hal ini, Anda menghasilkan satu dokumen per nilai yang direkam, yang menyebabkan banyak operasi penyisipan. Kita bisa melakukan yang lebih baik. Pertimbangkan hal berikut:

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

Sekarang, kita dapat menulis satu dokumen, dan melakukan 59 pembaruan. Ini jauh lebih baik karena pembaruan bersifat atomik, penulisan individual lebih kecil, dan ada manfaat kinerja dan konkurensi lainnya. Tetapi bagaimana jika kita ingin menyimpan sepanjang hari, dan bukan hanya seluruh jam, dalam satu dokumen. Ini kemudian akan mengharuskan kita untuk berjalan sepanjang 1440 entri untuk mendapatkan nilai terakhir. Untuk meningkatkan ini, kami dapat memperluas lebih jauh ke berikut:

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

Dengan menggunakan pendekatan bersarang ini, kita sekarang hanya perlu berjalan, maksimal, 24 + 60 untuk mendapatkan nilai terakhir di hari itu.

Jika kita membangun dokumen dengan semua nilai yang diisi dengan padding terlebih dahulu, kita dapat yakin bahwa dokumen tidak akan berubah ukuran dan karenanya tidak akan dipindahkan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Objek Tersemat MongoDB tidak memiliki ID (nilai nol)

  2. $project:Apakah mungkin untuk mengakses properti dari hasil ekspresi hanya dalam satu tahap?

  3. Dapatkan catatan terbaru dari koleksi mongodb

  4. Mongodb PHP - Integer dengan desimal

  5. Peta MongoDB()