Arka plan: Bir akış API JSON nesneleri kapmak ve pymongo kullanılarak MongoDB içinde (her seferinde 25 kütle ekleme) saklamak için kurulmuş bir python
modülü vardır. Karşılaştırma için, aynı akış API'sinden curl
'a ve pipe
'a mongoimport
'a bir bash komutu da var. Her iki yaklaşım da verileri ayrı koleksiyonlarda saklar.Optimizasyon: Mongo bir Akış API JSON Damping
Periyodik olarak, nasıl ücret aldıklarını kontrol etmek için koleksiyonların count()
izlerim.
Şu ana kadar, curl | mongoimport
yaklaşımının arkasındaki 1000 JSON nesnesi tarafından kalan python
modülünü görüyorum.
Sorun: nasıl curl | mongoimport
ile senkronize ~ olmak benim python
modülünü optimize edebilirsiniz?
Twitter API kullanmıyor, ancak 3. taraf yayın hizmeti kullanmadığım için tweetstream
kullanamıyorum.
Lütfen birisi bana yardım edebilir mi?
Python
modülü: okuma için
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()
teşekkürler.
Eklemekte olduğunuz belgelerin "_id" alanı var mı? –
@AsyaKamsky Evet, yaparlar. –
Hangi mongo sürümü ve hangi pymongo sürümünü kullanıyorsunuz? –