アットウィキロゴ

データベース


KVS(Key-Value Store)ということば。(2012/2/5 旧Wikiから移行)

  • 連想配列やMapと同様にキーと値のペアからなるシンプルなデータモデルに基づくデータストア。
  • 分散KVSとRDBの比較
KVS RDB
分散化のコスト ×
負荷分散
高可用性
複雑な検索や集計
トランザクション

参考サイト


memcachedとは(2012/2/5 旧wikiから移行)

  • さまざまなサービスでWebアプリケーションのスケーラビリティを向上させる技術(ソフトウェア)。
    • mixi、はてな、facebook、…などで利用されている。
  • memcachedは高性能な分散メモリキャッシュサーバーであり、データベースへの問い合わせ結果を一時的にキャッシュすることでWebアプリケーションの高速化を実現する。
  • memcachedは「分散」キャッシュサーバーだが、分散に関しての機能はサーバー側に備わっていない。全てクライアント側の実装に依存する。

memcachedのクライアントについて。

  • クライアントライブラリにはさまざまな言語の実装がある。
    • Perl、PHP、Python、Ruby、C#、C/C++、Lua
    • Javaはないんか…
  • Perlのmemcachedクライアントは以下のようなモジュールがある。
    • Cache::Memcached
    • Cache::Memcached::Fast
    • Cache::Memcached::libmemcached
  • Cache::Memcachedの利用
    • データを保存するメソッド
      • add - 同じキーのデータがストレージ上にない場合のみ値を保存
      • replace - 同じキーのデータがストレージ上にあった場合のみ値を保存
      • set - どんな場合でも値を保存
    • データを取得するメソッド
      • get - キーを指定して値を取得する
      • get_multi - 複数のキーを指定して非同期で値を取得する。getをループで処理するよりも数十倍高速にデータを取得できる。
    • データを削除するメソッド
      • delete - キーを指定して値を削除する。2つめの引数にblock時間(秒)を指定することで、一定時間、同じキーで新しい値を保存できないようにすることができる。ただし、setメソッドを利用すると関係なくデータを保存することができる。

参考サイト


共有ロックと占有ロック(2012/2/4)

  • 下の表なんかはよく見るものだけど、SQLではどう違うかがようやく分かったので記録しておく。
  • ある資源に既に掛けられているロックとそれに対してこれから掛けようとするロックの関係は以下の通り。
共有ロック 占有ロック
共有ロック できる できない
占有ロック できない できない
  • 共有ロックは以下のSQLで実現できる。(これをずっと知らなかった。。)
SELECT ... FROM ... LOCK IN SHARE MODE;
  • 占有ロックは以下のSQLで実現できる。
SELECT ... FROM ... FOR UPDATE;

楽観的排他と悲観的排他(2012/2/4 旧wikiから移行)

一言でいうと、その違いは「ロックをとるかとらないか」のようだ。
  • 楽観的排他とは
    • 考え方
      • 「自分が操作している情報は、他の人が操作する可能性は少ない」という視点に基づいている。
      • あるプロセスがデータを更新しようとしている間に、他のプロセスからも処理が可能だが、後から更新しようとしたプロセスは失敗する。
      • 複数のユーザーが同じデータを見る(Readする)ことはできるが、それが最新の情報かどうかは(アプリ側から)通知されるまでわからない。
    • 実現方法
      • 排他チェック用のカラムの値が、参照時と更新時で同じかどうかを検証する。(値が異なっていれば他のプロセスによって更新されていることになる。)
      • 排他チェック用カラムには、更新日時(タイムスタンプ)やバージョン番号を使うのが一般的。
  • 悲観的排他とは
    • 考え方
      • あるプロセスのデータを更新が終了するまで、(参照を含めて)他のプロセスは処理ができない。
      • あるユーザーが参照・更新処理を行っている間は、他のユーザーは参照も更新もできない。
      • 後のプロセスは、先のプロセスが終了するまで待たされることになる。
  • 実現方法
    • 更新対象の行を参照(SELECT)した時点でロックをかける。

思ったこと(2012/2/4)

悲観的排他では排他されるプロセスは「参照もできない」とあるが、どうゆうこと?ロックの種類に占有ロックを使うことが前提になっている?

参考サイト

タグ:

+ タグ編集
  • タグ:
最終更新:2012年02月05日 17:32