2016-04-15 4 views
5

मैं निम्नलिखित प्रौद्योगिकी ढेरजेडब्ल्यूटी टोकन को स्टोर करने के लिए सबसे अच्छा MYSQL या मारिया डीबी डेटा प्रकार क्या है?

  • Laravel 5.2
  • MySQL

उपयोग कर रहा हूँ और सुरक्षा के लिए मैं जेडब्ल्यूटी (JSON वेब टोकन) का उपयोग कर रहा

मैं सुरक्षित करने में सक्षम था जेडब्ल्यूटी का उपयोग कर मेरे आवेदन।

मैं mysql डेटाबेस में जेडब्ल्यूटी टोकन स्टोर करना चाहता हूं।

प्रश्न MySQL डीबी में जेडब्ल्यूटी टोकन को स्टोर करने के लिए निम्न में से कौन सा डेटा प्रकार सबसे अच्छा है?

  1. VARCHAR
  2. CLOB
  3. पाठ
  4. लंबा पाठ
+0

क्या जेडब्ल्यूटी का मुद्दा नहीं है कि इसे डेटाबेस में संग्रहीत करने की आवश्यकता नहीं है? – ceejayoz

+0

@ceejayoz ताज़ा टोकन स्वयं जेडब्ल्यूटी भी हो सकते हैं और मेरा मानना ​​है कि उन्हें डेटा स्टोर में स्टोर करने की आवश्यकता होगी। – georaldc

उत्तर

5

कुछ और के साथ के रूप में, जवाब है, "यह निर्भर करता है"।

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

यदि आप निर्णय लेते हैं कि जेडब्ल्यूटी को संग्रहीत करना सही तरीका है, तो हम आपके विकल्पों को देख सकते हैं।

टेक्स्ट और LONGTEXT केवल सीएलओबी के प्रकार हैं, इसलिए हम उसे अनदेखा कर सकते हैं।

टेक्स्ट और वर्चर दोनों की 64kb की सीमाएं हैं, इसलिए इसके ऊपर कुछ भी LONGTEXT (या MEDIUMTEXT, जिसे आपने उल्लेख नहीं किया है लेकिन एक विकल्प है) की आवश्यकता होगी।

टेक्स्ट और वचरर के बीच का अंतर यह है कि VARCHAR पंक्ति में संग्रहीत है लेकिन टेक्स्ट मूल रूप से एक सूचक है। यदि आप अक्सर जेडब्ल्यूटी को पढ़ रहे हैं तो वर्चर तेज होगा, लेकिन बड़े तारों से प्रत्येक व्यक्तिगत पंक्ति बड़ी हो जाएगी, जो एक प्रदर्शन हिट होगी।

जेडब्ल्यूटी के रूप में बड़े होने के साथ, मैं कहूंगा कि टेक्स्ट डेटाबेस में जेडब्ल्यूटी को स्टोर करने के लिए एक बहुत अच्छी पसंद है। यदि आप पूरी तरह से भरोसा रखते हैं कि जेडब्ल्यूटी बहुत कम रहेगा, तो एक वर्चर बेहतर पढ़ने के प्रदर्शन का उत्पादन कर सकता है, लेकिन आप सुनिश्चित करने के लिए असली दुनिया डेटा के साथ परीक्षण करना सबसे अच्छा होगा।

यदि आपको टेक्स्ट से बड़ा क्षेत्र प्रदान करने में सक्षम है, तो मैं एन्कोडेड जेडब्ल्यूटी को संग्रहीत करने से बचने के लिए अपनी सिफारिश दोहरा दूंगा, लेकिन LONGTEXT एक विकल्प है।

+0

मैंने माइकल की सलाह फिर से लेने का फैसला किया: दावा डेटा संग्रहित करना। ऐसा लगता है कि "jti" फ़ील्ड इसके लिए बनाया गया है - http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName – user2426679

1

उदाहरण के आधार पर, मैं एक 'इनकोडिंग' बेस 64 टोकन के लिए इस सुझाव है:

TEXT CHARACTER SET ascii COLLATE ascii_bin 

सामान्य में, JSON CHARACTER SET utf8 या utf8mb4 साथ TEXT या VARCHAR के कुछ आकार होना चाहिए। (COLLATION अप्रासंगिक होने की संभावना है।)

TEXT 64 केबी तक सीमित है; छोटे VARCHAR का उपयोग करने में बहुत अधिक लाभ नहीं है।

पुन: "TEXT सिर्फ एक सूचक है" - बिल्कुल सही नहीं है। इनो डीबी में ROW_FORMATs में, TEXT या VARCHAR पंक्ति के विस्तार के लिए एक सूचक हो सकता है। कार्रवाई अधिकतर ROW_FORMAT पर निर्भर करती है, डेटाटाइप नहीं।

संबंधित मुद्दे