2016-06-29 8 views
11

डाटा:चमकदार एप्लिकेशन को तेजी से चलाने के लिए सर्वोत्तम प्रथाएं क्या हैं?

मैं एक चमकदार डैशबोर्ड आवेदन है और मेरे डाटासेट चारों ओर आकार में 600 एमबी है। यह हर महीने 100 एमबी द्वारा swells। मेरा डेटा MySQL में स्थानीय रूप से रहता है।

MenuItems: - मेरे डैशबोर्ड पर 7 साइडबार menuItems और उनमें से प्रत्येक 10 है -

मैं 6 है 12 विभिन्न आउटपुट - चार्ट और टेबल। डेटा में फ़िल्टर करने के लिए इन टैबों में से प्रत्येक में 3 - 6 इनपुट हैं जैसे selectizeInput, स्लाइडर, दिनांक सीमा इत्यादि।

डाटा सबसेट:

जब से मैं समय अवधि पर रखने सिर्फ 2 से स्मृति में सभी डेटा लोड नहीं कर सकता, हर मेनू आइटम के लिए मैं तिथि सीमा के आधार पर डेटा का एक उप बना सकते हैं - 3 दिन सिस्टम की तारीख से।

उदाहरण के लिए:

df1 <- reactive({df[df$date >- dateinput[1] & df$date <- dateinput[2], ]})

ऊपर मेरी पहली मेनू आइटम और selectInput या अन्य इनपुट के आधार पर, मैं आगे डेटा को फ़िल्टर कर रहा हूँ के लिए डेटा हो जाता है।

df2 <- reactive({ 
     if(is.null(input$Gender)){ 
      df1 
     } else if(input$Gender == "Male") 
      {df1[df1$Gender == "Male",]} 
     )} 

अगर मैं 1 से अधिक इनपुट है, मैं इस DF1 आगे सबसेट और df2 को मान प्रदान करने वाली: उदाहरण के लिए, अगर मैं Gender (male and female) के लिए एक selectInput है तो मैं आगे df1 के सबसेट होते हैं। df2 उस मेनूइटम में सभी चार्ट और तालिकाओं के लिए प्रतिक्रियाशील डेटासेट बन जाता है।

मेनू Item की संख्या जितनी अधिक मैं फ़िल्टर और विश्लेषण के अनुरूप अधिक सबसेट बनाती हूं।

  1. पुरानी मशीनों पर, ऐप्स लोड नहीं है:

    मैं दो समस्याओं का सामना। और

  2. नए मशीनों पर, ऐप्स भार बहुत धीरे धीरे कभी कभी 5 - 6 मिनट

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

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

1.Are वहाँ किसी भी बुनियादी स्वच्छता कारकों एक विशेष रूप से चमकदार के माध्यम से जब आर में डेटा खनन को ध्यान में रखने की जरूरत है (आर में खनन बहुत तेज है):

मैं दो प्रश्न हैं।

2. मैंने समांतर प्रसंस्करण के बारे में पढ़ा है, लेकिन लगभग हमेशा सभी उदाहरण एक भारी गणना को वितरित करने के बारे में बात करते हैं। क्या हम समांतर प्रसंस्करण, डेटा को सब्सक्राइब करने या चार्ट/टेबल तैयार करने के वितरण के माध्यम से वितरित कर सकते हैं।

कृपया ध्यान दें, मैं एक शोधकर्ता हूं और प्रोग्रामर नहीं हूं, लेकिन क्लाउड या स्थानीय रूप से हाल ही में चमकदार और मेजबान अनुप्रयोगों का उपयोग करना सीखा है।

इस पर मार्गदर्शन आर मेरे जैसे कई नौसिखिया उपयोगकर्ताओं के लिए बहुत उपयोगी होगा।

+0

वास्तव में दिलचस्प सवाल है, मुझे लगता है कि मुझे अपने डैशबोर्ड के साथ कुछ महीने में इस समस्या का सामना करना पड़ेगा। क्या आप अपने SQL डेटा बेस evry समय पर अनुरोध भेज रहे हैं या ऐप चलने के बाद आप इसे Rdata में लोड कर रहे हैं? फिर 'df1 [df1 $ लिंग == "पुरुष",] का उपयोग करके, आपके डेटा को सबसेट करने के लिए बहुत धीमा है, क्या आपने पैकेज' dplyr' से 'फ़िल्टर' फ़ंक्शन का उपयोग करने का प्रयास किया है, जब आपके पास बड़ा डेटा सेट –

+0

है यह पता लगाने की आवश्यकता है कि क्या धीमापन डेटाबेस पहुंच या किसी भी आर कार्यों के कारण है। यहां कुछ विचार दिए गए हैं जो http://stackoverflow.com/questions/21484115/code-profiling-for-shiny-app की सहायता कर सकते हैं जब आप कहते हैं कि ऐप पुरानी मशीनों पर लोड नहीं होता है, तो यह पता लगाने की कोशिश करें कि यह स्मृति सीमा के कारण है या ब्राउज़र संस्करण इत्यादि। चमकदार जावास्क्रिप्ट का भारी उपयोग है जो पुराने ब्राउज़र पर काम नहीं कर सकता है। –

+0

इस प्रश्न से संबंधित एक और दिलचस्प बिंदु, कि मुझे अपने आप को जवाब नहीं पता: यदि आपके पास एकाधिक प्रतिक्रियाशील मान हैं, तो इस उदाहरण में डीएफ 1 और डीएफ 2 जैसे सभी बड़े (उप) डेटासेट, स्मृति डेटा में रखे गए डेटा फ्रेम हैं हर समय? मुझे लगता है कि वे हैं। यदि वे हैं, तो यह एक अच्छा अभ्यास हो सकता है कि एक डीएफ <- प्रतिक्रियाशील ({...}) हमेशा उस 'वर्तमान' डेटासेट को वापस लौटाए जो आप काम कर रहे हैं। –

उत्तर

5

यह एक बहुत ही रोचक सवाल है और टिप्पणियों के बजाए उचित प्रतिक्रियाओं का हकदार है। मैं अपने अनुभव और विचारों को जोड़ना चाहता हूं। मैंने डेटाबेस (ओं) और अन्य चालों के भार का उपयोग करके चमकदार सर्वर प्रो के साथ एक वाणिज्यिक R+shiny एप्लिकेशन बनाया।

विलंबित यूआई लोडिंग समय
मेरे अनुप्रयोग, लोड अर्थात नियंत्रण वापस उपयोगकर्ता को देने के लिए करने के लिए 30 से अधिक लेता है।

मुद्दा

Shiny एक ही पृष्ठ अनुप्रयोग है। इसलिए टैब के लोड के साथ एक जटिल ऐप, कुछ मेनू & चयनकर्ता इत्यादि को पॉप्युलेट करने के लिए लोड किया गया डेटा प्रभावित होता है और यह प्रारंभिक लोडिंग समय से शुरू होता है।

यूआई संभव mitigations

  • उपयोग गतिशील UI घटक (बुद्धिमानी) जटिलता को जोड़ने के लिए के बाद शुरू करते हैं। उदाहरण के लिए एक विशेष मेनू कुछ तत्वों के साथ बहुत आसानी से शुरू हो सकता है, फिर बाद के चरण में अधिक तत्व जोड़ें।
  • जो चेंग insertUI और removeUI जब मेरे एप्लिकेशन लगभग समाप्त हो गया था प्रस्तावित है, इसलिए मैं उन्हें इस्तेमाल करने के आसपास भी नहीं मिला, लेकिन वे भी शुरू के लिए एक सरल पेज में योगदान कर सकता।
  • डेटाबेस की

उपयोग

मेरा ऐप MonetDB और बाद में PostgreSQL इस्तेमाल किया। MonetDB का प्रदर्शन अच्छा था, लेकिन मेरे पास एक से अधिक उपयोगकर्ता संघर्ष था (जटिल समस्या जिसे मैं यहां विस्तार नहीं कर सकता) और इससे मुझे वैकल्पिक रूप से PostgreSQL पर जाने के लिए मजबूर किया गया। PostgreSQL ठीक था, लेकिन कैश को गर्म करने के कारण इसे शुरू करने में नाटकीय समय लगा। डिजाइन को डीबी में खराब लोड पर लोड करने के लिए आवश्यक डिज़ाइन: खराब डिज़ाइन।

आरडीबीएमएस संभव mitigations

मुझे लगता है मैं बदलती सफलता के साथ सबसे अधिक चाल की कोशिश की देर।

  • आरडीबीएमएस उपयोग सीमित करें। जैसा कि मैंने data.table से की प्रतिलिपि बनाने के बावजूद डेटा मैनिप्लेशंस की गति के बिना शुरू करने से निर्णय लिया है, मैं किसी भी प्रकार के सीएसवी पढ़ने के लिए fread का उपयोग कर रहा था। उस समय fwrite (अभी भी data.table से) क्षितिज पर भी नहीं था, अन्यथा यह गंभीर विचारों की योग्यता प्राप्त करेगा।
  • ऐप पुन: डिज़ाइन। ऐप आर्किटेक्चर की तीव्रता की डिग्री की तीव्रता है जो आरडीबीएमएस का उपयोग किया जाता है। मुझे आश्वस्त है कि समय एक ऐसे डिज़ाइन द्वारा सहेजा जा सकता है जो R+shiny (मुख्य रूप से R) सीमाओं को ध्यान में रख सकता है।
  • अब MonetDB में कोड में एम्बेडेड R फ़ंक्शन हैं, इसलिए यह से पहले भी तेज होना चाहिए। यह निश्चित रूप से एक अच्छी लग रही है। अन्य हाथ बहु उपयोगकर्ता सुविधाओं अच्छी तरह से परीक्षण किया जाना चाहिए पर: R डेटाबेस कोड के अधिकांश के रूप में shiny द्वारा की पेशकश की एक बहु-उपयोगकर्ता वातावरण में प्रयोग की जाने वाली खाते में नहीं ले करता है। शायद RStudio इस बारे में कुछ और करना चाहिए। ईमानदारी से वे connection pools के प्रायोगिक परिचय के साथ पहले ही शुरू कर चुके हैं और यह बहुत अच्छा है।

प्रतिक्रियात्मकता

के अत्यधिक उपयोग मुझे लगता है कि यह shiny की तरह एक उन्नत ढांचे के साथ खेलने के लिए महान है, और वे प्रतिक्रियाओं मज़ा जानने के लिए की एक बहुत कुछ है। दूसरी ओर एक विस्तृत और जटिल अनुप्रयोग पर चीजें आसानी से हाथ से बाहर हो सकती हैं।

अत्यधिक प्रतिक्रिया संभव mitigations

  • प्रत्येक समारोह डिबगिंग कितने समय एक विशेष shiny समारोह कहा जाता है की एक सटीक विचार देता है, और किसी भी प्रतिक्रियाशील समारोह आमतौर पर एक से अधिक बार कहा जाता है। बेशक यह सब सीपीयू समय जलता है, और कम से कम नियंत्रण में रखने की जरूरत है।
  • Constructs observeEvent की तरह अब ignoreInit तरह पैरामीटर: इन मानकों को एक बुद्धिमान उपयोग initialisation समय में कम से कम एक शून्य चक्र बचा सकता है।

मेरे अनुभव में हम केवल क्या यह संभव है shiny के साथ क्या करना है की सतह खरोंच है। दूसरी ओर R की एकल प्रक्रिया प्रकृति के कारण एक सीमा है। Shiny Server Pro के साथ लोड बैलेंसर्स का उपयोग करना और विभिन्न सर्वरों पर एकाधिक उपयोगकर्ताओं को फैलाना संभव है। दूसरी तरफ इन क्षेत्रों में जाने के लिए हमें विभिन्न मामलों में किसी प्रकार की संदेश प्रणाली की आवश्यकता होगी। पहले से ही मुझे पता है कि जटिल Shiny Server Pro अनुप्रयोगों में इसकी आवश्यकता है (उदाहरण के लिए जब उपयोगकर्ताओं के विभिन्न वर्गों को प्रबंधित करने की आवश्यकता होती है, लेकिन साथ ही उनके बीच संवाद करने की आवश्यकता होती है)। लेकिन यह इस SO सवाल के दायरे से बाहर है।

+0

सुनिश्चित करें: smartzoightsfromdata dot com पर enzo – Enzo

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

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