2009-12-23 20 views
8

जैसा कि मैंने पिछली पोस्ट में कहा था, हमारे रेल ऐप को किसी तृतीय-पक्ष एप्लिकेशन में ई-ए-वी प्रकार की तालिका के साथ इंटरफ़ेस करना है जिसे हम डेटा खींच रहे हैं। मैंने डेटा को सामान्य बनाने के लिए एक दृश्य बनाया था लेकिन यह चलाने के लिए बहुत लंबा रास्ता ले रहा है। हमारे पास हमारे ऑफशोर PHP डेवलपर्स में से एक था, इसे गति देने में सहायता के लिए एक संग्रहीत प्रक्रिया तैयार करें।रेल में संग्रहीत प्रक्रियाओं का उपयोग

अब हम इस मुद्दे में भाग लेते हैं कि हमें इस संग्रहित प्रक्रिया को रेल ऐप से कॉल करने की आवश्यकता है, साथ ही साथ खोज और फ़िल्टरिंग भी प्रदान की जाती है। दृश्य ऐसा कर सकता था क्योंकि रेल इसे पारंपरिक रेल मॉडल के रूप में पेश कर रहे थे। मैं संग्रहीत प्रो के साथ ऐसा कैसे कर सकता हूं? क्या हमें कस्टम खोज और ऑर्डरिंग लिखनी होगी (हम सर्चलॉग का उपयोग कर रहे थे)? प्रबंधन रेल से संग्रहित प्रो का उपयोग करने की कमी को समझने में असमर्थ है; वे सभी कहते हैं कि वर्तमान विधि को डेटा लोड करने में बहुत लंबा समय लग रहा है और इसे ठीक करने की आवश्यकता है, लेकिन खोज और फ़िल्टरिंग महत्वपूर्ण कार्य हैं।

EDIT मैंने इस प्रश्न के लिए कोड यहां पोस्ट किया: Optimizing a strange MySQL Query। मजाकिया बात यह है कि जब मैं एक GUI (Navicat) में यह क्वेरी चलाता हूं तो यह लगभग 5 सेकंड में चलता है, लेकिन वेब पेज पर इसे चलाने में एक मिनट लगते हैं; दृश्य मूल पोस्ट में उल्लिखित कारणों के लिए जटिल है, लेकिन मुझे लगता है कि MySQL प्रदर्शन को बेहतर बनाने के लिए SQL सर्वर (या बल्कि, मैं SQL सर्वर कैसे पढ़ता हूं) जैसे दृश्यों को अनुकूलित और कैश करता हूं।

+2

रेल के साथ संग्रहीत प्रक्रिया का उपयोग बुरा लगता है ... क्या आप लोडिंग समय को बेहतर बनाने के लिए कोई और तरीका नहीं ढूंढ सकते? – marcgg

+0

marcgg के साथ सहमत हैं ... क्या आप जानकारी प्रदान कर सकते हैं ताकि हम प्रदर्शन में सुधार के अन्य तरीकों के बारे में सोच सकें? – Ben

+0

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

उत्तर

4

आप रेल से संग्रहित प्रक्रियाओं को कॉल कर सकते हैं, लेकिन आप ActiveRecord के अधिकांश लाभ खोने जा रहे हैं, क्योंकि मानक जेनरेट किया गया SQL काम नहीं करेगा। आप मूल डेटाबेस कनेक्शन का उपयोग कर सकते हैं और इसे कॉल कर सकते हैं, लेकिन यह एक लीकी अबास्ट्रक्शन होने जा रहा है। आप डेटामैपर पर विचार करना चाह सकते हैं।

अपने अंतिम प्रश्न पर वापस देखकर, मुझे डीबीए डेटा से अधिक रिलेशनल संरचना बनाने के लिए ट्रिगर बनाने के लिए मिल जाएगा। ट्रिगर ईवीए डेटा को एक टेबल में डालेगा, जो कि माईएसक्यूएल में भौतिक दृश्यों को करने का एकमात्र तरीका है। इस तरह आप केवल डालने पर एक छोटी वृद्धिशील पृष्ठभूमि लागत का भुगतान करते हैं, और एप्लिकेशन सामान्य रूप से चलाया जा सकता है।

वैसे भी ...

ActiveRecord::Base.connection.execute("call SP_name (#{param1}, #{param2}, ...)") 

लेकिन वहाँ एक open ticket out there on lighthouse इस दृष्टिकोण का संकेत बाहर कुछ पैरामीटर को बदलने के कनेक्शन का उपयोग करने के साथ काम नहीं कर सकता है।

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