[[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の文法が各ベンダによって方言があるように、接続以外の問題でデータベースごとの仕様(例えばロック)や特性を理解する必要がなくなるわけではない。


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