0

Pythonとモジュールを使用して Twitter グラバー アプリケーションを構築していTweepyますMySQLdb

何百万ものツイートをフェッチするため、パフォーマンスが問題になります。同じクエリに追加する前に、テーブルに以前に tweet_id が存在するかどうかを確認したい

テーブル スキーマは次のとおりです。

  *id* |   tweet_id             |     text
  _____|________________________|______________________________
    1  |   259327533444925056   |     sample tweet1
  _____|________________________|______________________________
    2  |   259327566714923333   |     this is a sample tweet2 

私が試したコードは次のとおりですが、二重のクエリを実行します:

#check that the tweet doesn't exist first
q = "select count(*) from tweets where tweet_id = " + tweet.id
cur.execute(q)
result = cur.fetchone()
found = result[0]
if found == 0: 
q = "INSERT INTO  lexicon_nwindow (tweet_id,text) VALUES(tweet_id,tweet.text)
cur.execute(q)

Tweet_id を一意にしてツイートを挿入するだけでは、例外が発生し、同様に効率的ではありませんか?

1回のクエリでこれを達成するための最良の方法は何ですか?

4

4 に答える 4

1

tweet_id を主キー (ドロップ フィールド Id) として作成する場合、INSERT IGNORE または REPLACE INTO を使用できます。2つの問題が1つで解決。

Id フィールドを保持する場合は、インデックス/一意として設定し、自動インクリメントに設定します。tweet_id を主キーとして使用できることがわかっている場合は、このアプローチを避けます。

お役に立てれば。

ハリ

于 2012-10-30T17:55:02.027 に答える
0

The answer is profile, don't speculate.

I don't mean to be dismissive. We don't know what will be fastest:

  • SELECT + (in code) conditional INSERT
  • REPLACE INTO
  • INSERT IGNORE
  • INSERT SELECT WHERE NOT EXISTS...)
  • INSERT and (in code) ignore error

We don't know the rate of data, the frequency of duplicates, the server configuration, whether there are multiple writers simultaneously, etc.

Profile, don't speculate.

于 2012-10-31T01:19:00.863 に答える
0

INSERT VALUES の代わりに INSERT SELECT を使用し、SELECT に WHERE 句を追加して、tweet.id がまだテーブルにないことを確認します。

q = "INSERT INTO  lexicon_nwindow (tweet_id,text) 
SELECT " + tweet.id +" ," + tweet.text +" FROM DUAL
WHERE not exists(select 1 from tweets where tweet_id = " + tweet.id +" ) "
于 2012-10-30T19:28:26.587 に答える
0
#check that the tweet doesn't exist first
q = "select count(*) from tweets where tweet_id = " + tweet.id
cur.execute(q)
result = cur.fetchone()
found = result[0]
if found == 0: 
q = "REPLACE  lexicon_nwindow (tweet_id,text) VALUES(tweet_id,tweet.text)
cur.execute(q)
于 2012-10-30T17:59:23.813 に答える