पृष्ठभूमि: मैं एक python
मॉड्यूल एक स्ट्रीमिंग एपीआई से JSON ऑब्जेक्ट आकर्षित करने और उन्हें pymongo का उपयोग कर MongoDB में (एक समय में 25 के थोक डालने) स्टोर करने के लिए की स्थापना की है। तुलना के लिए, मेरे पास एक ही स्ट्रीमिंग एपीआई और pipe
से mongoimport
तक curl
पर बैश कमांड भी है। इन दोनों दृष्टिकोण अलग संग्रह में डेटा स्टोर करते हैं।अनुकूलन: मोंगो करने के लिए एक स्ट्रीमिंग एपीआई से JSON डम्पिंग
समय-समय पर, मैं संग्रह के count()
की निगरानी करता हूं ताकि यह जांच सके कि वे कैसे किराया करते हैं।
अब तक, python
मॉड्यूल curl | mongoimport
दृष्टिकोण के पीछे लगभग 1000 JSON ऑब्जेक्ट्स द्वारा मॉडलिंग को देख रहा है।
समस्या: मैं कैसे curl | mongoimport
के साथ सिंक में ~ होने के लिए मेरी python
मॉड्यूल अनुकूलन कर सकते हैं?
मैं tweetstream
का उपयोग नहीं कर सकता क्योंकि मैं ट्विटर एपीआई का उपयोग नहीं कर रहा हूं लेकिन एक तृतीय पक्ष स्ट्रीमिंग सेवा का उपयोग नहीं कर रहा हूं।
क्या कोई मेरी मदद कर सकता है?
Python
मॉड्यूल:
class StreamReader:
def __init__(self):
try:
self.buff = ""
self.tweet = ""
self.chunk_count = 0
self.tweet_list = []
self.string_buffer = cStringIO.StringIO()
self.mongo = pymongo.Connection(DB_HOST)
self.db = self.mongo[DB_NAME]
self.raw_tweets = self.db["raw_tweets_gnip"]
self.conn = pycurl.Curl()
self.conn.setopt(pycurl.ENCODING, 'gzip')
self.conn.setopt(pycurl.URL, STREAM_URL)
self.conn.setopt(pycurl.USERPWD, AUTH)
self.conn.setopt(pycurl.WRITEFUNCTION, self.handle_data)
self.conn.perform()
except Exception as ex:
print "error ocurred : %s" % str(ex)
def handle_data(self, data):
try:
self.string_buffer = cStringIO.StringIO(data)
for line in self.string_buffer:
try:
self.tweet = json.loads(line)
except Exception as json_ex:
print "JSON Exception occurred: %s" % str(json_ex)
continue
if self.tweet:
try:
self.tweet_list.append(self.tweet)
self.chunk_count += 1
if self.chunk_count % 1000 == 0
self.raw_tweets.insert(self.tweet_list)
self.chunk_count = 0
self.tweet_list = []
except Exception as insert_ex:
print "Error inserting tweet: %s" % str(insert_ex)
continue
except Exception as ex:
print "Exception occurred: %s" % str(ex)
print repr(self.buff)
def __del__(self):
self.string_buffer.close()
पढ़ने के लिए धन्यवाद।
क्या आपके द्वारा डालने वाले दस्तावेज़ों में "_id" फ़ील्ड है? –
@AyayaKamsky हाँ, वे करते हैं। –
मोंगो का कौन सा संस्करण और पिमोंगो का कौन सा संस्करण आप उपयोग कर रहे हैं? –