GCP

概要

  • データベースは大量にあるがそれぞれに特徴と注意点がある。

データベースの分類

  • kvsはキーバリューストア
  • RDB
  • その他

有名な問題

  • N+1問題
    • id=1から100までを取得しようとしたときに、where id = 1みたいにしてO(n)個のSQL文を生成する問題

排他処理

悲観排他 ・ロックして他Txを待機させることで、複数同時更新による処理の不整合を防ぐ。 ・設計次第では、デッドロックの恐れがある。 楽観排他 ・Tx開始からコミットまでの間に、他のTxによって更新されたリソースがないかを確認することで、処理の不整合を防ぐ。 ・競合検出された時に、リトライ処理が必要。 MySQLではトランザクション時にreadもできないが、datastoreの場合はreadもwi4rteもできるが検知はできるという感じ。なので、競合検知したらリトライ処理をしないといけない

データベース各論

SQL

  • 平衡二分木なので、SQL OFFSETのようなものが計算量的に高速化する(index張れば)

JanusGraph? グラフ式のデータベース。これを使うと数億レベルのグラフに対してクエリが投げられる。

データベース抽象化

DAO

Javaなので本番のDBとテスト環境のDBを分ける方法

ODBC (Open DataBase? Connectivity)

利用するデータベースの以外を吸収する手法 マイクロソフトが作ったデータベースとや霊取りするための通や腕、データベースとプログラムの間に入って媒する部品 DBC接続を行う際には 1.どの種類の 2.どのデータベースに 接続するかの情報が必要です。 例えば SQLServerの「test_db」という名前のデータベースに接続する のような情報ですね。 それに対応するODBCドライバがあれば、他の一般的なデータベースへのアクセスするのと同様な方法で利用することが可能になる!だから新たなデータベースが現れたらその都度Driverを売る会社が現れるということ。例: BQ 建前上は、ODBCを利用することにより、データベースの各ベンダ固有のインターフェースを抽象化し統一的にアクセスできるようになるはずだが、単純なケースはともかく、実際にはSQLの文法が各ベンダによって方言があるように、接続以外の問題でデータベースごとの仕様(例えばロック)や特性を理解する必要がなくなるわけではない。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS