का उपयोग करके बड़े परिणाम सेट प्रोसेसिंग को तेज करें मैं प्रत्येक दस्तावेज़ को किसी विशेष संग्रह में प्राप्त करने के लिए rmongodb का उपयोग कर रहा हूं। यह काम करता है लेकिन मैं लाखों छोटे दस्तावेजों, संभावित रूप से 100 एम या उससे अधिक के साथ काम कर रहा हूं। मैं विधि वेबसाइट पर लेखक ने सुझाव दिया उपयोग कर रहा हूँ:rmongodb
count <- mongo.count(mongo, ns, query)
cursor <- mongo.find(mongo, query)
name <- vector("character", count)
age <- vector("numeric", count)
i <- 1
while (mongo.cursor.next(cursor)) {
b <- mongo.cursor.value(cursor)
name[i] <- mongo.bson.value(b, "name")
age[i] <- mongo.bson.value(b, "age")
i <- i + 1
}
df <- as.data.frame(list(name=name, age=age))
यह सैकड़ों या परिणामों के हजारों के लिए ठीक काम करता है cnub.org/rmongodb.ashx लेकिन यह है कि जबकि पाश बहुत बहुत धीमी है। क्या इसे गति देने का कोई तरीका है? शायद मल्टीप्रोसेसिंग का अवसर? किसी भी सुझाव की सराहना की जाएगी। मैं प्रति घंटा 1 एम औसत कर रहा हूं और इस दर पर मुझे डेटा फ्रेम बनाने के लिए केवल एक सप्ताह की आवश्यकता होगी।
संपादित करें: मैंने देखा है कि थोड़ी देर में अधिक वैक्टर धीमा हो जाता है। अब मैं प्रत्येक वेक्टर के लिए अलग-अलग लूप करने की कोशिश कर रहा हूं। फिर भी एक हैक की तरह लगता है, एक बेहतर तरीका होना चाहिए।
संपादित करें 2: मुझे डेटा.table के साथ कुछ भाग्य है। इसकी अभी भी चल रहा है, लेकिन जैसे कि यह 12M खत्म हो जाएगा यह लग रहा है 4 घंटे में (यह मेरे वर्तमान परीक्षण सेट है), पर काम चल रहा है, लेकिन अब तक से आदर्श
dt <- data.table(uri=rep("NA",count),
time=rep(0,count),
action=rep("NA",count),
bytes=rep(0,count),
dur=rep(0,count))
while (mongo.cursor.next(cursor)) {
b <- mongo.cursor.value(cursor)
set(dt, i, 1L, mongo.bson.value(b, "cache"))
set(dt, i, 2L, mongo.bson.value(b, "path"))
set(dt, i, 3L, mongo.bson.value(b, "time"))
set(dt, i, 4L, mongo.bson.value(b, "bytes"))
set(dt, i, 5L, mongo.bson.value(b, "elaps"))
}
मैं कोई आर प्रोग्रामर नहीं हूं, वास्तव में मैंने इसका कभी भी उपयोग नहीं किया है, फिर भी आप पूरे संग्रह पर फिर से प्रयास करने के बजाय आवश्यक सत्यापन के लिए क्यों नहीं लेते हैं और फिर सत्यापन की आवश्यकता क्यों करते हैं? इस मामले में यह केवल एक के बजाय 6 कर्सर सर्वर-साइड की तरह भेजने के लिए तेज़ होगा। – Sammaye
हू? निश्चित रूप से जबकि लूप में अधिक वैक्टर धीरे-धीरे हो जाता है। करने के लिए और कुछ है। तो इसमें अधिक समय लगता है। या यह गैर-रैखिक है? यह उन चीजों की संख्या के विभिन्न मूल्यों के साथ कैसे व्यवहार करता है जिन पर आप लूपिंग कर रहे हैं? या 'अधिक वैक्टर' से आपका मतलब आयु और नाम जैसी चीजें हैं? अस्पष्ट। – Spacedman
@ सैमाये, यह वही है जो मेरा मतलब है कि प्रत्येक वेक्टर के लिए अलग-अलग लूपिंग करके। मैंने कल रात कोशिश की, उस लूप में एक काउंटर डालें और ऐसा लगता है कि अभी मर गया है, यह कई घंटों के बाद प्रिंटिंग बंद कर दिया। रस्सी बस लटका है। तो इस विधि ने मदद नहीं की। – rjb101