タグ

RDBMSに関するi_matsuiのブックマーク (8)

  • SQLAlchemy で悲観的・楽観的排他制御 - Qiita

    SQLAlchemy とは SQLAlchemyは PythonORM で、リレーショナルデータベースをオブジェクトとして扱うとこができるライブラリです。 SQLiteMySQL、PostgreSQLOracle などのデータベースに使用することができます。 導入するメリットとしては、 SQL を直接記述することなく、Python オブジェクトとしてデータベースを操作できる データベースの種類によらず、同一のソースコードで複数のデータベースを併用することができる SQL インジェクション対策がサポートされている などが上げられます。 今回は SQLAlchemy と MySQL を用いて、悲観的・楽観的排他制御を実装していきます。 環境 SQLAlchemy を使用するには、以下のインストールが必要です。括弧内は今回使用したバージョンです。 Python (3.7.3) データベ

    SQLAlchemy で悲観的・楽観的排他制御 - Qiita
  • 悲観ロックと楽観ロックの違い

    排他制御って何?排他制御とは、共有資源に対して同時にアクセスしても問題なく動作できる制御のことをいいます。 排他制御を行うことで共有資源のデータに不整合が起きることを防ぎます。 例えば、ショッピングサイトがあるとします。ショッピングサイトの商品(共有資源)を同時に購入した時、排他制御が行われていないとどうなるのでしょうか。 ① 共有資源の商品を同時に購入共有資源の同じ商品をタイミング的に2人同時に購入する事は、そこまで発生する事ではないかもしれません。ただ人気のショッピングサイトであればあるほど、その可能性は高くなります。 ② 在庫を確認するまず購入した商品の在庫が残っているか確認します。今回の例では在庫は残り"10"とします。 ③ 在庫を減らす次に在庫を減らします。在庫の残りは"10"なので、1つ減らして"9"にします。 スポンサーリンク ここで問題になるのは、排他制御をしていない為、同

    悲観ロックと楽観ロックの違い
  • 排他制御(楽観ロック・悲観ロック)の基礎  - Qiita

    排他制御とは 共有資源(データやファイル)に対して複数のアクセスが見込まれる場合に、同時アクセスにより不整合が発生することを防ぐため、あるトランザクションが共有資源(データやファイル)にアクセスしている時は他トランザクションからはアクセスできないようにして直列に処理されるように制御すること。 ■同時アクセスによる不整合の例 ■排他制御をすることで整合性を保つ 排他制御の方式 排他制御の実現方式はいくつか存在するが、ここでは代表的な楽観ロック(楽観的排他制御)と悲観ロック(悲観的排他制御)を紹介する。 楽観ロック(楽観的排他制御) 楽観ロックとは、めったなことでは他者との同時更新は起きないであろう、という楽観的な前提の排他制御。データそのものに対してロックは行わずに、更新対象のデータがデータ取得時と同じ状態であることを確認してから更新することで、データの整合性を保証する方式。楽観ロックを使用

    排他制御(楽観ロック・悲観ロック)の基礎  - Qiita
  • 2大OSSデータベースのMySQLとPostgreSQLの違い(前半)

    301 Moved Permanently https://speakerdeck.com/soudai/2da-osstetahesufalsemysqltopostgresqlfalsewei-i-qian-banRead less

    2大OSSデータベースのMySQLとPostgreSQLの違い(前半)
  • Slick 3 で大量の SQL を実行するための注意書き - Qiita

    結論から先に 巨大なファイルを読み込んで DB に投入するケースのように、Slick 3 の非同期 DB I/O を使って一度に大量の SQL を実行する場合は: うまいこと DBIOAction を合成してやらないと Thread Pool の実行キューが溢れてエラーになります。 さらにその DBIOAction は grouped で適度に分割してやらないと StackOverflow が発生します。 というお話。サンプルコードは結構適当なので間違っている部分があるかも知れません (まだ Slick 3 での記述スタイルを試行錯誤中なのと、この問題を徹夜で調べて明け方の頭で書いているためです)。 DBIOAction を合成しよう 合成しない書き方 TSV ファイルを読み込んで、レコードが既に存在していれば更新、存在していなければ追加、というありがちな処理を実装します (分離レベルをR

    Slick 3 で大量の SQL を実行するための注意書き - Qiita
  • Slick3のSQLクエリを複数結合する | 50ぱーせんとおふ

    Slickにて、クエリを連続的に結合する方法についてのまとめ 忘備録的なものなので、用語に関してなど、間違っているところがあるかもしれないです。 ツッコミしていただけたらありがたいです。 環境 play2.4 Slick3.0 mysql Slickでクエリを発行する際に、同一のWeb Requestの中でdb.runを何回も発行するとトランザクションが別になってしまうので、片方のトランザクションだけが失敗してしまって原子性が保たれないなどの場合がある。 同一トランザクションにするためにはすべてのクエリ(DBIOAction)を一つにまとめる必要がある。 データベースに対する操作はDBIOActionと呼ばれる accountTable.schema.create accountTable.map(_.userId === 1).result accountTable += Account

  • JavaEE使い方メモ(JTA) - Qiita

    環境構築 コード 環境 OS Windows 7 AP サーバー GlassFish 4.1 Open Source Edition (一部 Wildfly 9.0.1 使用) 1.8.0_60 DB サーバー MySQL 5.5.28, for Win64 (x86) JTA とは Java Transaction API の略。 Java で トランザクションマネージャ を扱うための各種 API を定義した仕様。 トランザクションマネージャとは、分散トランザクションの管理を行うサービス(ミドルウェア)で、 Java EE サーバーだと EJB コンテナがその役割を担っている。 DTP Distributed Transaction Processing の略(直訳するなら、分散トランザクション処理?)。 X/Open という組織が策定した、分散トランザクションについての標準規格。JTA

    JavaEE使い方メモ(JTA) - Qiita
  • リレーショナルデータベースの仕組み (1/3) | POSTD

    リレーショナルデータベースが話題に挙がるとき、私は何かが足りないと思わずにはいられません。データベースはあらゆるところで使われており、その種類も、小規模で便利なSQLiteからパワフルなTeradataまで様々です。しかし、それがどういう仕組みで機能しているかを説明したものとなると、その数はごくわずかではないでしょうか。例えば「リレーショナルデータベース 仕組み」などで検索してみてください。ヒット数の少なさを実感できると思います。さらにそれらの記事は短いものがほとんどです。逆に、近年流行している技術(ビッグデータ、NoSQLJavaScriptなど)を検索した場合、それらの機能を詳しく説明した記事はたくさん見つかると思います。 リレーショナルデータベースは、もはや大学の授業や研究論文、専門書などでしか扱われないような古くて退屈な技術なのでしょうか? 私は開発者として、理解していないものを

    リレーショナルデータベースの仕組み (1/3) | POSTD
  • 1