प्रश्न और नमूना कोड के संबंध में कुछ बिंदु।
-
पाइपलाइनिंग एक चांदी की गोली नहीं है - आपको इसका उपयोग करने से पहले यह समझना होगा कि यह क्या करता है। पाइपलाइनिंग क्या करता है बैच कई ऑपरेशन जो बल्क के रूप में भेजे जाते हैं, जैसा कि सर्वर से उनकी प्रतिक्रिया है। आप जो प्राप्त करते हैं वह यह है कि प्रत्येक ऑपरेशन के लिए नेटवर्क राउंड ट्रिप समय को बैच के द्वारा बदल दिया जाता है। लेकिन असीमित आकार के बैच संसाधन पर एक वास्तविक नाली हैं - आपको प्रभावी होने के लिए उनका आकार काफी छोटा रखना होगा। अंगूठे के नियम के रूप में मैं आमतौर पर प्रति पाइपलाइन 60 केबी का लक्ष्य रखने का प्रयास करता हूं और चूंकि प्रत्येक डेटा अलग होता है, इसलिए पाइपलाइन में वास्तविक संचालन की संख्या भी होती है। यह मानते हुए कि आपकी कुंजी और उसका मान ~1KB है, आपको
pipeline.execute()
पर कॉल करने की आवश्यकता है हर 60 ऑपरेशन या तो। -
जब तक मैं पूरी तरह से गलत नहीं समझता, यह कोड नहीं चलना चाहिए। आप
HMSET
. का उपयोग कर रहे हैं मानो यहSET
. है , इसलिए आप मूल रूप से फ़ील्ड-> हैश के मूल्य मानचित्रण को याद कर रहे हैं। हैश (HMSET
) और स्ट्रिंग्स (SET
) विभिन्न डेटा प्रकार हैं और इसलिए उन्हें तदनुसार उपयोग किया जाना चाहिए। -
ऐसा प्रतीत होता है जैसे यह एक छोटा लूप पूरे "अरब डेटा" का प्रभारी है - यदि ऐसा है, तो न केवल आपका सर्वर कोड चलाने वाला पागलों की तरह अदला-बदली करेगा, जब तक कि इसमें शब्दकोश को रखने के लिए बहुत अधिक रैम न हो, यह भी बहुत अप्रभावी होगा (पायथन की गति की परवाह किए बिना)। आपको इस प्रक्रिया के कई उदाहरण चलाकर डेटा प्रविष्टि को समानांतर करना होगा।
-
क्या आप दूर से रेडिस से जुड़ रहे हैं? अगर ऐसा है, तो हो सकता है कि नेटवर्क आपके प्रदर्शन को सीमित कर रहा हो।
-
अपनी रेडिस की सेटिंग्स पर विचार करें - शायद इस कार्य के लिए बेहतर प्रदर्शन के लिए इन्हें ट्वीक/ट्यून किया जा सकता है, यह मानते हुए कि यह वास्तव में एक बाधा है।