डायनेमोबीडी में टाइमस्टैम्प के लिए किस डेटा प्रकार का उपयोग किया जाना चाहिए?


98

मैं डायनमोबी के लिए नया हूं। मैं एक तालिका बनाना चाहता हूं, जो हैश कुंजी के रूप में डिवाइसआईडी का उपयोग कर, मेरी रेंज कुंजी और कुछ डेटा के रूप में टाइमस्टैम्प।

{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }

एसक्यूएल में, हम टाइमस्टैम्प के लिए डेटाइम प्रकार का उपयोग कर सकते हैं, लेकिन डायनमोबी में कोई नहीं है।

  1. मुझे किस डेटा प्रकार का उपयोग करना चाहिए? स्ट्रिंग? संख्या?
    यहाँ छवि विवरण दर्ज करें

  2. चुने हुए डेटा प्रकार के लिए, मुझे किस प्रकार का टाइमस्टैम्प प्रारूप लिखना चाहिए? आईएसओ प्रारूप (उदाहरण: 2016-11-11T17: 21: 07.5272333Z) या युगांतर समय (उदाहरण: 1478943038816)?

  3. मुझे समय की एक सीमा के माध्यम से तालिका के माध्यम से खोज करने की आवश्यकता है, उदाहरण के लिए: १/१/२०१५ १०:०० पूर्वाह्न ३१/१२/२०११ पूर्वाह्न ११:०० बजे तक



2
हम समय / प्रारूप में एक संख्या का उपयोग करते हैं। हम इसका उपयोग रेंज खोजों के साथ-साथ मूल रूप से customer_id
जॉर्ज एम व्हिटकेकर

स्ट्रिंग और नंबर डेटा प्रकारों का उपयोग किया जा सकता है। स्ट्रिंग जब ISO8601 प्रारूप को संग्रहीत करता है, और नंबर जब एपोच समय को संग्रहीत करता है। यहां अधिक जानकारी: abhayachauhan.com/2017/12/…
Abhaya Chauhan

सरकारी दस्तावेज़ कहते हैं, "आपको वह दिनांक या एक टाइमस्टैम्प। एक आईएसओ 8601 तार का उपयोग करके जिस तरह से यह करने के लिए है प्रतिनिधित्व करने के लिए स्ट्रिंग डेटा प्रकार का उपयोग कर सकते हैं"।
हांगकांग

वह उत्तर जिसे आपने अपने स्क्रीनशॉट से कॉपी किया है ( stackoverflow.com/a/27894543/1357094 ), इस प्रश्न का उत्तर देता है - और यह प्रश्न वास्तव में डुप्लिकेट है जिसने कहा कि
उत्तरदाता

जवाबों:


83

स्ट्रिंग डेटा प्रकार की तारीख या समय-चिह्न के लिए इस्तेमाल किया जाना चाहिए।

आप किसी दिनांक या टाइमस्टैम्प का प्रतिनिधित्व करने के लिए स्ट्रिंग डेटा प्रकार का उपयोग कर सकते हैं। ऐसा करने का एक तरीका आईएसओ 8601 स्ट्रिंग्स का उपयोग करना है, जैसा कि इन उदाहरणों में दिखाया गया है:

2016/02/15

2015-12-21T17: 42: 34Z

20150311T122706Z

डायनेमोडी डेट या टाइमस्टैम्प के लिए डेटा प्रकार

हाँ, जब रेंज स्ट्रिंग के रूप में संग्रहीत होता है, तो रेंज क्वेरीज़ का समर्थन किया जाता है। बीच FilterExpresssion पर इस्तेमाल किया जा सकता है। नीचे दिए गए फ़िल्टर एक्सप्रेशंस का उपयोग करके मुझे आइटम मिले हैं।

समय के बिना FilterExpression: -

FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ":val1" : "2010-01-01",
        ":val2" : "2010-12-31"
    }

समय के साथ FilterExpression: -

FilterExpression : 'createdate between :val1 and :val2',
    ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ":val1" : "2010-01-01T00:00:00",
        ":val2" : "2010-12-31T00:00:00"
    }

डेटाबेस मान: -

प्रारूप 1 - समयक्षेत्र के साथ:

{"Item":{"createdate":{"S":"2010-12-21T17:42:34+00:00"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}

प्रारूप 2 - बिना समयक्षेत्र के: -

{"Item":{"createdate":{"S":"2010-12-21T17:42:34Z"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}

लेकिन क्या आप तिथि सीमा खोज कर सकते हैं जब उन्हें स्ट्रिंग मान के रूप में संग्रहीत किया जाता है?
मार्क बी

@notionquest ya, क्या आप स्ट्रिंग के साथ डेट और टाइम रेंज खोज सकते हैं?
डेनिस

54
मैं यह नहीं देखता कि आप "स्ट्रिंग डेटा प्रकार का उपयोग दिनांक या टाइमस्टैम्प के लिए कैसे किया जाना चाहिए "। डॉक्स का यह भी कहना है कि आप समय के साथ तारीखों के लिए संख्या डेटा प्रकार का भी उपयोग कर सकते हैं। आपको क्यों लगता है कि स्ट्रिंग को नंबर से अधिक उपयोग किया जाना चाहिए?
रोली

1
स्ट्रिंग और नंबर डेटा प्रकारों का उपयोग किया जा सकता है। स्ट्रिंग जब ISO8601 प्रारूप को संग्रहीत करता है, और नंबर जब एपोच समय को संग्रहीत करता है। अधिक जानकारी यहाँ: abhayachauhan.com/2017/12/…
अभय चौहान

1
@ केवल संख्या भी ठीक होनी चाहिए, लेकिन वे कम पठनीय हैं।
मैथ्यू बोनिग

22

डेटा प्रकार आपकी आवश्यकताओं पर निर्भर करता है।

आप आईएसओ प्रारूप या नंबर का उपयोग करके स्ट्रिंग का उपयोग कर सकते हैं।

आईएसओ प्रारूप (स्ट्रिंग) का लाभ मानव पठनीयता है हालांकि डायनामोडीबी इस प्रारूप के लिए टाइम टू लाइव (टीटीएल) का समर्थन नहीं करता है। सभी फिल्टर्स जैसे 'बीच ’और' रेंज’ जैसे नोटियनक्वेस्ट द्वारा समझाया गया है।

डायनेमोबडी के लिए टाइम टू लाइव (टीटीएल) आपको यह परिभाषित करने की अनुमति देता है कि टेबल में आइटम कब समाप्त होते हैं ताकि वे डेटाबेस से स्वचालित रूप से हटाए जा सकें।

युग प्रारूप (संख्या) का उपयोग करने का लाभ यह है कि आप टीटीएल सुविधा और सभी फिल्टर का उपयोग कर सकते हैं।

TLDR;

युग प्रारूप (संख्या प्रकार) -
आईएसओ के लिए समय का उपयोग कर सकते हैं प्रारूप (स्ट्रिंग प्रकार) - जीने के लिए समय का उपयोग नहीं कर सकते हैं लेकिन मानव जीवन के लिए उपयुक्त है


फ़िल्टर एक्सप्रेशन संख्याओं द्वारा समर्थित हो सकते हैं, लेकिन श्रेणी-आधारित मुख्य शर्तें केवल आईएसओ प्रारूप में तार के साथ समर्थित होंगी
राफेल अल्मीडा

@ राफेलअल्मीडा, आपका क्या मतलब है? और आपके स्रोत क्या हैं?
Zachary रयान स्मिथ

1
@ZacharyRyanSmith मैं गलत था - वास्तव में, संख्या विशेषताएँ फ़िल्टर में मुख्य कुंजी और कुंजी शर्तों के रूप में काम करती हैं।
राफेल अल्मेडा

2

संख्या डेटा प्रकार या स्ट्रिंग डेटा प्रकार

दिनांक या टाइमस्टैम्प के लिए उपयोग किया जा सकता है - न केवल स्ट्रिंग के रूप में इस प्रश्न पर स्वीकृत उत्तर संख्या की अनदेखी करते हुए गलत तरीके से एकल।

आप दिनांक या टाइमस्टैम्प का प्रतिनिधित्व करने के लिए संख्या डेटा प्रकार का उपयोग कर सकते हैं। ऐसा करने का एक तरीका यह है कि 1 जनवरी 1970 को 00:00:00 यूटीसी के बाद से सेकंड की समयावधि का उपयोग करके। उदाहरण के लिए, 1437136300 के युग का समय 17 जुलाई 2015 को 12:31:40 अपराह्न यूटीसी का प्रतिनिधित्व करता है।

अधिक जानकारी के लिए, http://en.wikipedia.org/wiki/Unix_time देखें ।

...

आप किसी दिनांक या टाइमस्टैम्प का प्रतिनिधित्व करने के लिए स्ट्रिंग डेटा प्रकार का उपयोग कर सकते हैं। ऐसा करने का एक तरीका आईएसओ 8601 स्ट्रिंग्स का उपयोग करना है, जैसा कि इन उदाहरणों में दिखाया गया है:

2016/02/15

2015-12-21T17: 42: 34Z

20150311T122706Z

अधिक जानकारी के लिए, http://en.wikipedia.org/wiki/ISO_8601 देखें ।

डायनेमोडी डेट या टाइमस्टैम्प के लिए डेटा प्रकार


1

मेरे लिए क्वेरी अनुरोध भेजते समय परिणामों को फ़िल्टर करने में सक्षम होने के लिए, मैंने DateTime के लिए युग प्रारूप का उपयोग किया, यह स्ट्रिंग का उपयोग करने की तुलना में अधिक कुशल है।

इन परिदृश्यों की कल्पना करें: पिछले 31 दिन, पिछले 24 घंटे, ... फिर से स्ट्रिंग प्रारूप का उपयोग करना संभव है, क्योंकि यह भी start_with ऑपरेटर है ( कृपया एडब्ल्यूएस डॉक्टर पर नीचे दिए गए लिंक में तीसरा उदाहरण देखें ) लेकिन संख्यात्मक मान के संदर्भ में बहुत अधिक कुशल हैं छँटाई (तुलना) और गणना करते समय प्रदर्शन का

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions

दिनांक-समय को युग प्रारूप में परिवर्तित करना आसान है

जावास्क्रिप्ट:

var date = new Date();
var epoch = date.getTime();

// converting back to date-time
var initial_date = new Date(epoch);

सी#

var date = DateTime.UtcNow;
var epoch = new DateTimeOffset(date).ToUnixTimeSeconds();

// converting back to date-time
var initial_date = DateTimeOffset.FromUnixTimeSeconds(epoch);

अजगर

import time
epoch = time.time()
 
# converting back to date-time
initial_date = time.gmtime(epoch )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.