2011-07-27 10 views
1

基本的に、リードを呼び出す営業担当者がいます。今は、それらを得るために "新鮮なリード"のクエリを試みました。これはMemcachedのリストの実行可能なソリューションですか?

新鮮なリードがない場合、「比較的新しい」クエリに移動します。私たちはこれらの「情報源」と呼んでおり、本質的により近い情報源は、実現可能な先を見つけるまで情報源を経由します。

これらのクエリはすべて同じテーブルをクエリし、異なるデータグループのみをクエリします。しかし、各クエリには複雑なソートがたくさんあります。テーブルへの挿入/更新(テーブルはInnoDB)では待ち時間がたくさんあります(デッドロックはありません。InnoDBには表示されませんステータス)私の推測では、たくさんの挿入/更新と組み合わせた遅い選択があります。

NOW、究極の質問です:私たちは、各ソースのDBを照会し、(システムに応じて明らかに変化)について100ishつかむと、memcachedの中でそれらをキャッシュすべき

。次に、クロージャがリードを要求すると、それらをキャッシュから送信しますが、キャッシュを更新して「is_acccepted」フラグを反映します。この方法では、キャッシュされたリードがなくなるたびに、各ソースを呼び出します。これは実行可能な解決策のように見えるんhttp://code.google.com/p/memcached/wiki/FAQ#Emulating_locking_with_the_add_command

-

はその後、我々はのmemcachedでシミュレートされたロックを使用することができますか?どんな勧告?私たちは、ロック待ちが絶望的かつ迅速に起こる可能性を最小限に抑える必要があります。

答えて

2

サウンドは実行可能ですが、あなたのインデックスを見て、あなたの選択に適切な分離レベルを使用していますか?あなたが原因最適化にフルトランザクションのこのまた物事をスピードアップする可能性がかなりとSPのあなたの選択/更新を行う場合Any way to select without causing locking in MySQL?

前のSOの質問は答えをあなたのシークを助けるかもしれません。 SPのMySQLでは非常に遅い場合は、当然、時間があります:(

私はコメントとしてこれを入れていると思いますが、まだそのレベルに達していない:)

そして、私がパートを読みましたinno-dbですが、分離レベルを使用している場合でも、innoを使用しても、経験は私に改善をもたらしました。

+0

現在、すべてのトランザクションはREAD COMMITTED – mlebrun15

+0

として読み込まれます。READ COMMITTEDは、データの整合性に依存する前にキャッシュとバッファがフラッシュするのを待たなければならないため、本来遅いです。 – jdarling

+0

一時的なロックについて考えましたか?あなたはHIGH IDとis_accepted = falseを使ってテーブルを更新して、レコードを返すことができます。レコードが返されたときにis_acceptedを返してチェーンに戻ります。 – jdarling

1

別のデータストアを使用する前に、DBクエリが完全に最適化されていることを確認してください。

このデータをキャッシュすることにした場合は、Redisを使用することを検討してください。これにより、一流の市民がリストされます。

+0

私たちはすでにある程度memcachedを実装しています。私はむしろ2番目のキャッシュが必要になるまで1つのキャッシュを管理したいと思う。 – mlebrun15

+0

私の索引がやり直してくれました。 – mlebrun15