2015-10-13 17 views
6

私は好奇心が強いです。私はそれのような流れを持っています:我々は、大きなデータを持つ大きなコレクション/テーブルを持っています。そして、長さが3秒かかる方向性クエリselectをいくつか持っています。同時に長い時間の同時クエリを使用したクエリ結果

しかし、我々は非常に並行した環境と毎秒私たちのデータベースに100個の新しいレコードを取得します。

これはクエリがあるとしましょう。そのクエリが開始される前に、それらのクエリを満たす1000個のアイテムがあります。クエリには3秒かかり、1秒ごとにデータベースに追加されたクエリに一致する50の新しい項目があります。私の質問は - このクエリが私に返された結果です(それはまだ1000または1150かその間にあるのですか)、これが異なるデータベースエンジン(SQL、NoSQL)にどのように依存しているかです。 O

正確な数字については問題ではありませんが、それ以上の理由は何故でしょうか。


質問のように見えるのは少し広いです。 MySQL、Postgres、MongoDB、CassandraでDBを制限しましょう。

答えて

1

一般的に(主に特定のデータベースの名前を付けなかったため)、データベースの並行性レベルは構成可能であり、パフォーマンスチューニングのカテゴリに該当します。

いくつかの一般的なロック粒度は次のとおり

  • ROW - データのみの単一の行が時間
  • PAGEでロックされている - の行のいくつかのグループが時間
  • テーブルにロックされている - 全体テーブルがロックされている

したがって、ROWレベルのロックを使用した場合、ロックオーバーヘッドが増えますが、1150の結果がすべて得られる可能性があります。または、TABLEレベルのロックを使用した場合、1000件の結果が非常に迅速に得られますが、データストリームが3秒間データベースに書き込まれるのをブロックされます。

+0

ありがとうございました。だから、それはすべての書き込み要求よりもテーブルロックがクエリの間に行われた失敗ですか? – Ph0en1x

+0

@ ph0en1x not quite。書き込み要求は(ロックを取得するのを待っているため)ブロックされ、ロックを取得するのに時間がかかり過ぎるとタイムアウトで失敗する可能性があります。しかし、タイムアウト値は一般的に設定可能です。 –

+0

はい、私はこれを理解しています。しかし、質問は少し一般的でした。 – Ph0en1x

関連する問題