Saya baru mengenal DynamoDB. Saya ingin membuat tabel yang menggunakan DeviceID sebagai kunci hash, Stempel waktu sebagai kunci jangkauan saya dan beberapa data.
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
Di SQL, kita bisa menggunakan tipe datetime untuk Timestamp, tetapi di DynamoDB tidak ada.
Untuk tipe data yang dipilih, format stempel waktu seperti apa yang harus saya tulis? Format ISO (misalnya: 2016-11-11T17: 21: 07.5272333Z) atau waktu epoch (misalnya: 1478943038816)?
Saya perlu mencari melalui tabel melalui rentang waktu, misalnya: 1/1/2015 10:00:00 hingga 31/12/2016 11:00:00
Jawaban:
The String tipe data harus digunakan untuk Tanggal atau Timestamp.
Jenis Data DynamoDB untuk Tanggal atau Stempel Waktu
Ya, kueri Rentang didukung saat tanggal disimpan sebagai String. The ANTARA dapat digunakan pada FilterExpresssion. Saya sudah mendapatkan item dalam hasil menggunakan ekspresi filter di bawah ini.
FilterExpression tanpa waktu: -
FilterExpression dengan waktu: -
Nilai Database: -
Format 1 - dengan zona waktu:
Format 2 - tanpa zona waktu: -
sumber
Jenis data tergantung pada kebutuhan Anda.
Anda dapat menggunakan String menggunakan format ISO atau Angka menggunakan format epoch.
Keuntungan dari format ISO (String) adalah keterbacaan manusia namun DynamoDB tidak mendukung Time To Live (TTL) untuk format ini. Semua filter bekerja seperti 'antara' dan 'rentang' seperti yang dijelaskan oleh notionquest.
Keuntungan menggunakan format epoch (Number) adalah Anda dapat menggunakan fitur TTL dan semua filter.
TLDR;
Format Epoch (Tipe angka) - Dapat menggunakan
format Time To Live ISO (tipe string) - Tidak dapat menggunakan Time To Live tetapi lebih dapat dibaca manusia
sumber
Tipe data Angka ATAU tipe data String
dapat digunakan untuk Tanggal atau Stempel Waktu - tidak hanya String sebagai Jawaban yang Diterima pada Pertanyaan ini salah memilih sambil mengabaikan Nomor.
Jenis Data DynamoDB untuk Tanggal atau Stempel Waktu
sumber
bagi saya untuk dapat memfilter hasil saat mengirim permintaan kueri, saya menggunakan format epoch untuk DateTime, ini lebih efisien daripada menggunakan string.
bayangkan skenario ini: 31 hari terakhir, 24 jam terakhir, ... sekali lagi semua dimungkinkan menggunakan format string karena ini juga memiliki operator begin_with ( lihat contoh ke-3 di tautan di bawah di dokumen AWS ) tetapi nilai numerik jauh lebih efisien dalam hal kinerja saat menyortir (membandingkan) & perhitungan.
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions
mudah untuk mengubah format tanggal-waktu ke masa
Javascript:
var date = new Date(); var epoch = date.getTime(); // converting back to date-time var initial_date = new Date(epoch);
C #
var date = DateTime.UtcNow; var epoch = new DateTimeOffset(date).ToUnixTimeSeconds(); // converting back to date-time var initial_date = DateTimeOffset.FromUnixTimeSeconds(epoch);
Python
import time epoch = time.time() # converting back to date-time initial_date = time.gmtime(epoch )
sumber