Memantau pembaruan status perangkat di DynamoDB - Amazon DynamoDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memantau pembaruan status perangkat di DynamoDB

Kasus penggunaan ini membahas tentang penggunaan DynamoDB untuk memantau pembaruan status perangkat (atau perubahan status perangkat) di DynamoDB.

Kasus penggunaan

Dalam kasus penggunaan IoT (pabrik pintar misalnya), banyak perangkat yang perlu dipantau oleh operator dan perangkat tersebut secara berkala mengirim status atau log ke sistem pemantauan. Ketika ada masalah dengan sebuah perangkat, status perangkat tersebut berubah dari normal menjadi peringatan. Ada tingkat log atau status yang berbeda tergantung tingkat keparahan dan jenis perilaku abnormal pada perangkat. Sistem kemudian menugaskan operator untuk memeriksa perangkat dan mereka dapat mengeskalasikan masalah kepada supervisor jika diperlukan.

Beberapa pola akses tipikal untuk sistem ini meliputi:

  • Membuat entri log untuk sebuah perangkat

  • Mendapatkan semua log untuk status perangkat tertentu yang menampilkan log terbaru terlebih dahulu

  • Mendapatkan semua log untuk operator tertentu di antara dua tanggal

  • Mendapatkan semua log yang dieskalasi untuk supervisor tertentu

  • Mendapatkan semua log yang dieskalasi dengan status perangkat tertentu untuk supervisor tertentu

  • Mendapatkan semua log yang dieskalasi dengan status perangkat tertentu untuk supervisor tertentu pada tanggal tertentu

Diagram hubungan entitas

Ini adalah diagram hubungan entitas (ERD) yang akan kita gunakan untuk memantau pembaruan status perangkat.

ERDpembaruan status perangkat. Ini menunjukkan entitas: Perangkat dan Operator.

Pola akses

Ini adalah pola akses yang akan kita pertimbangkan untuk memantau pembaruan status perangkat.

  1. createLogEntryForSpecificDevice

  2. getLogsForSpecificDevice

  3. getWarningLogsForSpecificDevice

  4. getLogsForOperatorBetweenTwoDates

  5. getEscalatedLogsForSupervisor

  6. getEscalatedLogsWithSpecificStatusForSupervisor

  7. getEscalatedLogsWithSpecificStatusForSupervisorForDate

Evolusi desain skema

Langkah 1: Atasi pola akses 1 (createLogEntryForSpecificDevice) dan 2 (getLogsForSpecificDevice)

Unit penskalaan untuk sistem pelacakan perangkat adalah perangkat individual. Dalam sistem ini, deviceID mengidentifikasi perangkat secara unik. Ini menjadikan deviceID kandidat yang baik untuk kunci partisi. Setiap perangkat mengirim informasi ke sistem pelacakan secara berkala (misalnya, setiap lima menit atau lebih). Pengurutan ini menjadikan tanggal sebagai kriteria pengurutan logis dan oleh karena itu, menjadi kunci urutan. Data sampel dalam kasus ini akan terlihat seperti ini:

Tabel untuk menyimpan status beberapa perangkat. DeviceID adalah kunci utama dan pembaruan status Tanggal adalah kunci pengurutan.

Untuk mengambil entri log perangkat tertentu, kita dapat melakukan operasi kueri dengan kunci partisi DeviceID="d#12345".

Langkah 2: Atasi pola akses 3 (getWarningLogsForSpecificDevice)

Karena State merupakan atribut non-kunci, mengatasi pola akses 3 dengan skema saat ini akan memerlukan ekspresi filter. Di DynamoDB, ekspresi filter diterapkan setelah data dibaca menggunakan ekspresi kondisi kunci. Misalnya, jika kita mengambil log peringatan untuk d#12345, operasi kueri dengan kunci partisi DeviceID="d#12345" akan membaca empat item dari tabel di atas lalu menyaring satu item dengan status peringatan. Pendekatan ini tidak efisien dalam skala besar. Ekspresi filter dapat menjadi cara yang baik untuk mengecualikan item dalam kueri jika rasio item yang dikecualikan rendah atau kueri jarang dilakukan. Namun, untuk kasus dengan banyak item diambil dari tabel dan sebagian besar item disaring, kita dapat terus mengembangkan desain tabel agar berjalan lebih efisien.

Mari kita ubah cara menangani pola akses ini menggunakan kunci urutan komposit. Anda dapat mengimpor data sampel dari DeviceStateLog_3.json di mana kunci pengurutan diubah menjadi. State#Date Kunci urutan ini adalah komposisi atribut State, #, dan Date. Dalam contoh ini, # digunakan sebagai pembatas. Data sekarang terlihat seperti ini:

Data pembaruan status untuk perangkat, d #12345, diambil menggunakan kunci sortir komposit Status #Date.

Untuk mengambil log peringatan untuk perangkat saja, kueri menjadi lebih tertarget dengan skema ini. Kondisi kunci untuk kueri menggunakan kunci partisi DeviceID="d#12345" dan kunci urutan State#Date begins_with “WARNING”. Kueri ini hanya akan membaca tiga item yang relevan dengan status peringatan.

Langkah 3: Atasi pola akses 4 (getLogsForOperatorBetweenTwoDates)

Anda dapat mengimpor DeviceStateLog_4.json D di mana Operator atribut ditambahkan ke DeviceStateLog tabel dengan contoh data.

DeviceStateLog desain tabel dengan atribut Operator untuk mendapatkan log operator antara tanggal tertentu.

Karena Operator bukan kunci partisi, tidak ada cara untuk melakukan pencarian nilai kunci langsung pada tabel ini berdasarkan OperatorID. Kita perlu membuat koleksi item baru dengan indeks sekunder global aktif pada OperatorID. Pola akses memerlukan pencarian berdasarkan tanggal sehingga Tanggal adalah atribut kunci sortir untuk indeks sekunder global (GSI). Seperti inilah yang GSI sekarang terlihat:

GSIdesain dengan OperatorId dan Date sebagai kunci partisi dan kunci sortir untuk mendapatkan log untuk operator tertentu.

Untuk pola akses 4 (getLogsForOperatorBetweenTwoDates), Anda dapat menanyakan ini GSI dengan kunci partisi OperatorID=Liz dan kunci pengurutan Date antara 2020-04-11T05:58:00 dan2020-04-24T14:50:00.

Query GSI menggunakan OperatorId dan Date untuk mendapatkan log untuk operator antara dua tanggal.

Langkah 4: Tangani pola akses 5 (getEscalatedLogsForSupervisor), 6 (getEscalatedLogsWithSpecificStatusForSupervisor), dan 7 (getEscalatedLogsWithSpecificStatusForSupervisorForDate)

Kami akan menggunakan indeks jarang untuk mengatasi pola akses ini.

Indeks sekunder global secara default bersifat jarang, jadi hanya item dalam tabel dasar yang berisi atribut kunci primer indeks yang benar-benar akan muncul di indeks. Ini adalah cara lain untuk mengecualikan item yang tidak relevan untuk pola akses yang dimodelkan.

Anda dapat mengimpor DeviceStateLog_6.json di mana EscalatedTo atribut ditambahkan ke DeviceStateLog tabel dengan contoh data. Seperti disebutkan sebelumnya, tidak semua log akan dieskalasikan ke supervisor.

GSIdesain dengan EscalatedTo atribut untuk mendapatkan semua log yang ditingkatkan untuk supervisor.

Anda sekarang dapat membuat yang baru GSI di mana EscalatedTo adalah kunci partisi dan State#Date merupakan kunci sortir. Perhatikan bahwa hanya item yang memiliki atribut EscalatedTo dan State#Date yang muncul dalam indeks.

GSIdesain untuk mendapatkan semua item dengan atribut EscalatedTo dan State #Date.

Pola akses lainnya dirangkum sebagai berikut:

Semua pola akses dan bagaimana desain skema mengatasinya dirangkum dalam tabel di bawah ini:

Pola akses Tabel dasar//GSILSI Operasi Nilai kunci partisi Nilai kunci urutan Kondisi/filter lainnya
createLogEntryForSpecificDevice Tabel dasar PutItem DeviceID= deviceId State#Date=state#date
getLogsForSpecificDevice Tabel dasar Kueri DeviceID= deviceId State#Date begins_with "state1#" ScanIndexForward = Salah
getWarningLogsForSpecificDevice Tabel dasar Kueri DeviceID= deviceId Status #Date begins_with "” WARNING
getLogsForOperatorBetweenTwoDates GSI-1 Kueri Operator = operatorName Tanggal antara date1 dan date2
getEscalatedLogsForSupervisor GSI-2 Kueri EscalatedTo=supervisorName
getEscalatedLogsWithSpecificStatusForSupervisor GSI-2 Kueri EscalatedTo=supervisorName State#Date begins_with "state1#"
getEscalatedLogsWithSpecificStatusForSupervisorForDate GSI-2 Kueri EscalatedTo=supervisorName State#Date begins_with "state1#date1"

Skema akhir

Berikut adalah desain skema akhir. Untuk mengunduh desain skema ini sebagai JSON file, lihat Contoh DynamoDB di. GitHub

Tabel dasar

Desain tabel dasar dengan metadata status perangkat, seperti ID Perangkat, Status, dan Tanggal.

GSI-1

GSI-1 desain. Ini menunjukkan kunci utama dan atribut: deviceId, State #Date, dan State.

GSI-2

GSI-2 desain. Ini menunjukkan kunci utama dan atribut: DeviceId, Operator, Date, dan State.

Menggunakan No SQL Workbench dengan desain skema ini

Anda dapat mengimpor skema akhir ini ke No SQL Workbench, alat visual yang menyediakan pemodelan data, visualisasi data, dan fitur pengembangan kueri untuk DynamoDB, untuk mengeksplorasi lebih lanjut dan mengedit proyek baru Anda. Ikuti langkah-langkah berikut untuk memulai:

  1. Unduh No SQL Workbench. Untuk informasi selengkapnya, lihat Unduh No SQL Workbench untuk DynamoDB.

  2. Unduh file JSON skema yang tercantum di atas, yang sudah dalam format model No SQL Workbench.

  3. Impor file JSON skema ke No SQL Workbench. Untuk informasi selengkapnya, lihat Mengimpor model data yang ada.

  4. Setelah Anda mengimpor ke NOSQL Workbench, Anda dapat mengedit model data. Untuk informasi selengkapnya, lihat Mengedit model data yang ada.

  5. Untuk memvisualisasikan model data Anda, menambahkan data sampel, atau mengimpor data sampel dari CSV file, gunakan fitur Visualizer Data dari No Workbench. SQL