3

比較的大規模なWebサイトに投票システムを実装していますが、投票数をどこに保存すればよいのでしょうか。主な問題は、それらをメインデータベースに保存すると、MySQLが多くの単純なクエリを処理するのがあまり得意ではないため、多くの負担がかかることです。

これまでの私の最善のオプションはmemcached、このタスクに最適と思われるために使用することです(非常に高速で、キー/値指向)。このソリューションの唯一の問題は、memcached永続的ではなく、これらの値を保存する簡単な方法がないことです。

このタスクのために、できればPythonバックエンドを使用して特別に設計されたものはありますか?

4

6 に答える 6

2

ある程度の票の喪失を受け入れることができますか?もしそうなら、あなたはハイブリッドソリューションを行うことができます。100を法とするごとに(10など)、SQLデータベースを現在のmemcache値で更新します。必要に応じて、定期的なスクリプトスキャンと更新を行うこともできます。

于 2011-08-18T18:39:01.707 に答える
2

sqliteこれを実行しました。これは、 5000行を挿入することを除いて、基本的にドキュメントの例です。

import time
import sqlite3

conn = sqlite3.connect('example')

c = conn.cursor()

# Create table
c.execute('''create table stocks 
    (date text, trans text, symbol text, qty real, price real)''')

print time.time()

for i in xrange(5000):

    # Insert a row of data
    c.execute("""insert into stocks
              values ('2006-01-05','BUY','RHAT',100,35.14)""")


# We can also close the cursor if we are done with it
# Save (commit) the changes
conn.commit()
c.close()

print time.time()

私のラップトップでは10分の4秒で。

その時間の大部分はデータベースのコミットに費やされます。データベースに頻繁にコミットしない限り(数秒に1回以下)、SQLiteは1秒あたり5000票の負荷を簡単に処理できます。

1分あたり4000票は、すべての投票の後にコミットしない限り、それを段階的に行うことはありません。

于 2011-08-18T18:58:37.047 に答える
2

MySQLは、多くの単純なクエリを処理するのがあまり得意ではありません

MySQLサーバーで何かが大幅に誤って構成されている可能性があります。MySQLは、1分あたり4000のクエリを簡単に処理できるはずです。1秒あたり25kを超えるINSERTを処理するMySQLのベンチマークがあります。

于 2011-08-18T19:00:00.487 に答える
1

CUBRIDを見ることができます。私はそれを試していませんが、それは有望なようです、彼らはほぼ100%のMySQL互換性に加えて次のようないくつかの素晴らしいものを宣伝していますSELECT INCR(field)

于 2011-08-18T18:54:55.213 に答える
0

memcachedは気に入っても、データが永続化されないという事実が気に入らない場合は、Membaseの使用を検討する必要があります。Membaseは基本的に、永続層としてsqliteを使用してmemcachedされます。セットアップは非常に簡単で、memcachedプロトコルをサポートしているため、すでにmemcachedをセットアップしている場合は、代わりにMembaseを使用できます。

于 2011-08-19T03:33:59.153 に答える
0

Mongodbより高速であるか、拡張できるようGoogle App Engineに設計されているため、うまく機能します。

于 2011-08-18T18:47:46.390 に答える