[[GCP]] *概要 [#p7f00f33] -データベースは大量にあるがそれぞれに特徴と注意点がある。 *データベースの分類 [#z00ffb18] -kvsはキーバリューストア -RDB -その他 *有名な問題 [#caca1b14] -N+1問題 --id=1から100までを取得しようとしたときに、where id = 1みたいにしてO(n)個のSQL文を生成する問題 *排他処理 [#jdea7b33] 悲観排他 ・ロックして他Txを待機させることで、複数同時更新による処理の不整合を防ぐ。 ・設計次第では、デッドロックの恐れがある。 楽観排他 ・Tx開始からコミットまでの間に、他のTxによって更新されたリソースがないかを確認することで、処理の不整合を防ぐ。 ・競合検出された時に、リトライ処理が必要。 MySQLではトランザクション時にreadもできないが、datastoreの場合はreadもwi4rteもできるが検知はできるという感じ。なので、競合検知したらリトライ処理をしないといけない *データベース各論 [#p7e9867d] **SQL [#d79c5deb] -平衡二分木なので、SQL OFFSETのようなものが計算量的に高速化する(index張れば) JanusGraph グラフ式のデータベース。これを使うと数億レベルのグラフに対してクエリが投げられる。 *データベース抽象化 [#l4ec7a35] **DAO [#tf65c7b2] Javaなので本番のDBとテスト環境のDBを分ける方法 **ODBC (Open DataBase Connectivity) [#sca9d6b6] 利用するデータベースの以外を吸収する手法 マイクロソフトが作ったデータベースとや霊取りするための通や腕、データベースとプログラムの間に入って媒する部品 DBC接続を行う際には 1.どの種類の 2.どのデータベースに 接続するかの情報が必要です。 例えば SQLServerの「test_db」という名前のデータベースに接続する のような情報ですね。 それに対応するODBCドライバがあれば、他の一般的なデータベースへのアクセスするのと同様な方法で利用することが可能になる!だから新たなデータベースが現れたらその都度Driverを売る会社が現れるということ。例: BQ 建前上は、ODBCを利用することにより、データベースの各ベンダ固有のインターフェースを抽象化し統一的にアクセスできるようになるはずだが、単純なケースはともかく、実際にはSQLの文法が各ベンダによって方言があるように、接続以外の問題でデータベースごとの仕様(例えばロック)や特性を理解する必要がなくなるわけではない。 |