ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

スケールアウトによるテーブルロックの問題 排他性より順序性

2015-08-20 15:20:37 | ネットワーク
■テーブルにロックをかけるケースを考える

たとえば、貯金残高や、在庫数など、2箇所以上で同時に操作されたときに、
矛盾を引き起こさない為に、データベースには、一時に1箇所でしかDBを
利用できないようにロックをかけたりする

さらに、テーブルが複数あって、関連を持っている場合
(どちらかのテーブルの主キーが他方のテーブルの外部キーの場合)、
1つのテーブルは処理完了して、もう一つのテーブルは完了していない
となるとおかしなことになるので、トランザクション処理として、
すべて更新するか、全く更新していないかの2つの状態になるようにする。
この場合にも、テーブルに対して、ロックがかかる。




■2つ以上が同時に操作すると、一方はロックのために待ちになる

このように2つ以上のアプリが同時に同じテーブルを操作しようとして
テーブルにロックがかかる場合、デッドロックで「なければ」、
一方のアプリが処理を行い、その間、他方のアプリが待ちとなる。

待ちの場合、すぐにまたアクセスにいけるようにしてしまうと、
ロック解除されるまでに何回もアクセス可能かどうか聞いてしまい、
このループの処理ばかりするようになり、CPU処理量100%となってしまうので、
ふつうは、ロック待ちになると、Sleepを入れて寝かせる。

ただし、このsleepは、シードなしはもちろん、時間でシードを持たせると、
別の場所で、同時刻のシードとなることがある。

sleepするアプリが2つ以上あって、シードなしの場合、または
同じシードの場合は、乱数を振ると、
同じ結果が返ってくる=同じ時間寝る=同じ時間に起きる=またロックになる。




■スケールアウトすると、どこかで誰かがロックのために待ちになる・・・

DBを更新するアプリが少ない場合は問題ない。

ただ、更新するアプリサーバーが増えてきて、同じDBをアクセスするように
なると、ロック待ちが起こり出す。

このとき、複数サーバーでロック待ちをしている際に、
何らかの弾みで、上記のように待ち時間がたまたま合ってしまうと、
・・・永遠と振られる乱数結果が一緒で、ずっとロックしていることになってしまう
(ライブロック)

つまり、スケールアウトするときにテーブルロックの問題が起こることがある

この事態を避けるには、どうしたらよいか?
(それいぜんの、CPU100%でループという事態も含めて)




■この解決法

そもそも、やりたいことは、ロックによる排他制御なのか?
順番に処理させたいという目的があって、その手段として、
トランザクション&ロックをつかっているのではないのか?


・・・だとしたら、守るのは順番である
順番を守るだけなら、ロックをかけなくてもいい。
メッセージキューを1つだけ用意し、そのキューに入っている
DB更新処理を順番に行えばよい。
1つしかないので、事実上、排他的に処理される

スケールアウトする場合には、キューを利用したほうがよいこともある。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ディープラーニングのやりかたについて詳しく書いてあるサイトのメモ

2015-08-20 10:58:44 | AI・BigData
自分へのメモで、まだよんでない。


■R言語 で Deep Learning と 従来型 機械学習 7 手法 分類問題 エラー率比較 ~ H2O パッケージ編
http://qiita.com/HirofumiYashima/items/68d56cfbab2834c1febb

DeepLearningのパッケージには

• Pylearn2(http://deeplearning.net/software/pylearn2/)
• Caffe(http://caffe.berkeleyvision.org/)
• Theano(http://deeplearning.net/software/theano/)
• H2O(https://cran.r-project.org/web/packages/h2o/index.html)
• Deeplearning4j(http://deeplearning4j.org/)
• Torch(http://torch.ch/)
• noleam(https://pythonhosted.org/nolearn/)
• Chainer(http://chainer.org/)

といろいろあるけど、これはH2O編みたい


■Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
http://www.slideshare.net/yasuyukisugai/deep-learningcaffe

(本エントリ内の太字(例えば上のパッケージ例)は、上記スライドから引用)
こちらは、Caffeだけど、他のパッケージを使う場合でも、画像のデータ例は
参考になりそう。下のとおり(30すらいど目から)

LeNet MNIST 手書き数字の認識精度テスト • 28x28ピクセル、70,000枚の画像
http://caffe.berkeleyvision.org/gathered/examples/mnist.html

ilsvrc12(ImageNet Large Scale Visual Recognition Challenge 2012 )
物体認識の精度を競う国際コンテスト。申請してから利用できるまで1日かかる
http://caffe.berkeleyvision.org/gathered/examples/imagenet.html

CIFAR-10 32 • 犬や猫、飛行機など10クラスの分類精度テスト
http://caffe.berkeleyvision.org/gathered/examples/cifar10.html



■IoTとDeep Learningで自宅警備員を育ててみる
http://www.slideshare.net/yasuyukisugai/io-t-deeplearning

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする