MongoDB Academy · Pelajaran

Mencipta Koleksi Siri Masa

Pelajar akan mencipta koleksi siri masa dengan menentukan pilihan timeField, metaField dan kegranularan.

Pelajaran 1 daripada 413 langkah

Mencipta Koleksi Siri Masa ialah pelajaran MongoDB Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran MongoDB Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.

Pengenalan kepada Time Series Collections

MongoDB 5.0 memperkenalkan native time series collections — jenis collection khusus yang dioptimumkan untuk menyimpan dan membuat pertanyaan terhadap ukuran yang berubah mengikut masa. Kes penggunaan umum termasuk bacaan sensor IoT, metrik aplikasi, tick kewangan dan data pemantauan pelayan. Berbeza daripada collection biasa, time series collections menggunakan format storan berasaskan lajur secara dalaman, sekali gus mengurangkan ruang storan dengan ketara dan meningkatkan prestasi pertanyaan bagi penapis julat masa.

Medan Utama: timeField, metaField, granularity

Setiap time series collection memerlukan tiga pilihan utama apabila dicipta. timeField ialah medan dokumen yang menyimpan cap masa (mesti berupa BSON Date). metaField mengenal pasti siri tersebut — contohnya, ID sensor atau nama peranti. Petunjuk granularity ('seconds', 'minutes' atau 'hours') memberitahu MongoDB kekerapan ukuran diterima, lalu membolehkannya mengoptimumkan saiz baldi secara dalaman.

Mencipta Dengan Perintah createCollection

Gunakan db.createCollection() dengan objek pilihan timeseries untuk mencipta time series collection. Anda tidak boleh menukar collection biasa yang sedia ada kepada time series — Anda mesti menciptanya sebagai collection baharu. Collection tersebut akan muncul dalam show collections dengan penunjuk jenis khas timeseries.

db.createCollection('sensorReadings', {
  timeseries: {
    timeField: 'timestamp',
    metaField: 'sensorId',
    granularity: 'seconds'
  }
})

Granularity Mempengaruhi Saiz Baldi

Pilihan granularity mengawal cara MongoDB mengumpulkan ukuran ke dalam dokumen baldi dalaman. Dengan 'seconds', baldi meliputi satu jam (3,600 ukuran bagi setiap baldi). Dengan 'minutes', baldi meliputi 24 jam. Dengan 'hours', baldi meliputi 30 hari. Pemilihan granularity yang salah menyebabkan lebih banyak dokumen baldi dan pemampatan yang lebih lemah — sentiasa padankan granularity dengan kadar ketibaan data sebenar Anda.

// Sensor sends data every second — use 'seconds'
db.createCollection('iotData', {
  timeseries: {
    timeField: 'ts',
    metaField: 'device',
    granularity: 'seconds'
  }
})

// Aggregated hourly metric — use 'hours'
db.createCollection('hourlyMetrics', {
  timeseries: {
    timeField: 'ts',
    metaField: 'service',
    granularity: 'hours'
  }
})

Bentuk Dokumen untuk Sisipan Time Series

Dokumen yang disisipkan ke dalam time series collection mesti menyertakan timeField sebagai BSON Date yang sah. Nilai metaField mengenal pasti siri yang menjadi milik ukuran tersebut (contohnya, ID peranti). Semua medan lain dipanggil medan ukuran dan boleh menyimpan sebarang nilai BSON. MongoDB akan menolak dokumen yang tidak mempunyai timeField atau timeField yang bukan Date.

// Valid time series document
{
  timestamp: new Date(),   // timeField — must be a Date
  sensorId: 'sensor-42',  // metaField — identifies the series
  temperature: 23.7,       // measurement field
  humidity: 55.2,          // measurement field
  pressure: 1013.4         // measurement field
}

Menyisipkan Satu dan Berbilang Ukuran

Sisipkan data ke dalam time series collection sama seperti Anda menyisipkannya ke dalam collection biasa — menggunakan insertOne() atau insertMany(). MongoDB mengendalikan pembentukan baldi dalaman secara automatik. Amalan terbaik ialah mengumpulkan sisipan secara kelompok dengan insertMany() apabila memuatkan data sejarah, kerana cara ini mengagihkan kos pembentukan baldi kepada banyak ukuran.

// Insert a single measurement
db.sensorReadings.insertOne({
  timestamp: new Date('2024-06-01T10:00:00Z'),
  sensorId: 'sensor-42',
  temperature: 22.5,
  humidity: 60.1
})

// Bulk insert historical data
db.sensorReadings.insertMany([
  { timestamp: new Date('2024-06-01T10:01:00Z'), sensorId: 'sensor-42', temperature: 22.6, humidity: 60.0 },
  { timestamp: new Date('2024-06-01T10:02:00Z'), sensorId: 'sensor-42', temperature: 22.4, humidity: 60.3 }
])

Menambah Tamat Tempoh Automatik Dengan expireAfterSeconds

Time series collections menyokong tamat tempoh data secara automatik melalui pilihan expireAfterSeconds. Setelah ditetapkan, rangkaian TTL latar belakang MongoDB memadamkan seluruh baldi apabila semua ukuran dalam baldi itu lebih lama daripada ambang yang ditetapkan. Kaedah ini lebih cekap berbanding indeks TTL biasa kerana seluruh dokumen baldi dalaman dibuang serentak, bukannya dokumen ukuran satu demi satu.

// Create with 90-day TTL
db.createCollection('sensorReadings', {
  timeseries: {
    timeField: 'timestamp',
    metaField: 'sensorId',
    granularity: 'minutes'
  },
  expireAfterSeconds: 60 * 60 * 24 * 90  // 90 days
})

Membuat Pertanyaan terhadap Time Series Collections

Pertanyaan pada time series collections kelihatan sama seperti pertanyaan find() biasa. MongoDB menggunakan struktur baldi dalaman secara automatik untuk melangkau baldi yang tidak berkaitan apabila menapis berdasarkan julat masa. Penapisan pada metaField juga sangat cekap. Elakkan membuat pertanyaan hanya pada medan ukuran tanpa penapis masa atau meta, kerana ini memaksa imbasan penuh collection merentas semua baldi.

// Query last 24 hours for a specific sensor
const since = new Date(Date.now() - 24 * 60 * 60 * 1000)

db.sensorReadings.find({
  sensorId: 'sensor-42',
  timestamp: { $gte: since }
}).sort({ timestamp: 1 })

Mengemas Kini Granularity Selepas Penciptaan

Anda boleh meningkatkan granularity time series collection sedia ada (contohnya, daripada 'seconds' kepada 'minutes') menggunakan perintah collMod. Walau bagaimanapun, Anda tidak boleh mengurangkannya — MongoDB akan mengembalikan ralat jika Anda cuba beralih daripada 'minutes' kembali kepada 'seconds'. Anda juga boleh mengemas kini tetapan expireAfterSeconds melalui collMod tanpa mencipta semula collection.

// Increase granularity from seconds to minutes
db.runCommand({
  collMod: 'sensorReadings',
  timeseries: { granularity: 'minutes' }
})

// Update expireAfterSeconds to 30 days
db.runCommand({
  collMod: 'sensorReadings',
  expireAfterSeconds: 60 * 60 * 24 * 30
})

Had dan Sekatan

Time series collections mempunyai beberapa sekatan penting berbanding collection biasa. Anda tidak boleh melakukan sharding pada time series collection menggunakan timeField sahaja — komponen metaField bercincang diperlukan. Kemas kini dan pemadaman adalah terhad: sebelum MongoDB 5.1, hanya pemadaman berdasarkan metaField atau julat masa yang disokong. Selain itu, time series collections tidak menyokong indeks unik, indeks jarang atau collection berkapsyen.

Mengesahkan Jenis dan Pilihan Collection

Selepas mencipta time series collection, periksanya menggunakan db.getCollectionInfos() untuk mengesahkan bahawa pilihan timeseries disimpan dengan betul. Anda juga boleh menjalankan db.sensorReadings.stats() untuk melihat statistik storan, termasuk bilangan dokumen baldi dalaman yang diselenggarakan oleh MongoDB di sebalik tabir.

// Inspect time series collection metadata
db.getCollectionInfos({ name: 'sensorReadings' })

// Check storage stats
db.sensorReadings.stats()

Semakan Pantas

Uji pemahaman Anda tentang konsep MongoDB & pangkalan data NoSQL daripada pelajaran ini.

Imbas Kembali Pelajaran

Dalam pelajaran ini, Anda telah mempelajari bahawa: time series collections menggunakan format baldi berasaskan lajur untuk beban kerja yang memerlukan pemampatan tinggi dan banyak operasi tambah, tiga pilihan utama (timeField, metaField, granularity) mengawal cara ukuran disusun dan dimasukkan ke dalam baldi, dan expireAfterSeconds membolehkan penghapusan automatik data lama dengan cekap pada peringkat baldi. Seterusnya, kita akan meneroka penyisipan dan pertanyaan data time series dengan lebih mendalam.

Percuma untuk bermula

Pelajari JavaScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Mencipta Koleksi Siri Masa” percuma?

Ya — teks penuh “Mencipta Koleksi Siri Masa” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus MongoDB Academy, tingkat taraf kepada CoddyKit PRO. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mencipta Koleksi Siri Masa”?

Pelajar akan mencipta koleksi siri masa dengan menentukan pilihan timeField, metaField dan kegranularan. Anda berlatih MongoDB Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan MongoDB Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran MongoDB Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Mencipta Koleksi Siri Masa” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran MongoDB Academy ini?

Ya. Setiap pelajaran MongoDB Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mencipta Koleksi Siri Masa
  2. Menyisip dan Membuat Pertanyaan pada Data Siri Masa
  3. Agregasi Bertetingkap pada Siri Masa
  4. Luput Data Automatik Dengan expireAfterSeconds
← Kembali ke MongoDB Academy