質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

4600閲覧

複数セッションを作って同時にDB書き込みしたい

tixure55

総合スコア400

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/11/19 08:15

トランザクション処理の勉強のために複数セッションを作って同時にDB書き込みする(複数の人が同時にmysqlに書き込みをするような)ようなコードを書きたいのですが、どのようにソースコードを書けばよいでしょうか?

サイトを複数タブで開いて、ボタンを両方の画面で押してプログラム実行では同時ではないので、ほぼ同時にプログラム実行をするにはどうすればよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

MySQL的のトランザクション的にはapacheのプロセスやスレッドは関係無くて、MySQLとのコネクションが複数あってその操作が制御されてればトランザクションの挙動は確認出来るかと思います。

PHP

1 2$pdo1 = new PDO(); 3$pdo2 = new PDO(); 4 5$pdo1->beginTransaction(); 6$pdo2->beginTransaction(); 7 8//以下、それぞれ任意の処理を任意の順番で実行して挙動を確認する 9

もしくは、確認したい挙動はおそらく、コミットやロールバック前に他の操作がされた場合の挙動でしょうから

PHP

1//先にアクセスするスクリプト 2$this->db->beginTransaction(); 3--いろいろ処理-- 4$sql->execute(); 5$stmt->closeCursor(); 6sleep(10); 7$this->db->commit();

PHP

1//あとからアクセスするスクリプト 2$this->db->beginTransaction(); 3--いろいろ処理-- 4$sql->execute(); 5$stmt->closeCursor(); 6$this->db->commit(); 7

みたいな感じで任意の場所でsleepさせてやれば、割り込み的に処理がされる箇所を制御出来ますね。

投稿2015/11/19 09:18

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tixure55

2015/11/19 10:58

回答ありがとうございます。 webサーバのスレッドとかはmysqlのトランザクション処理に直接関係なかったのですね。一つ賢くなった気がします。
guest

0

ランダムな時間間隔でDB(mysql)にデータを書き込むようなプログラムを作成し、そのプログラムを複数のプロセスで実行する(Shellのウィンドウを複数起動して、それぞれでDBに書き込みをするプログラムを走らせる)のが、複数のスレッドやプロセスを扱うプログラムを作らなくて良いので簡単だと思います。
時間間隔をランダムにしたのは、ほぼ同時の書き込みが起きる事が期待できるからです。

投稿2015/11/19 08:43

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tixure55

2015/11/19 11:01

回答ありがとうございます、 「Shellのウィンドウを複数起動して」というのはlinuxの端末を複数起動して同時にシェルでDB書き込みさせるようなのを複数同時に走らせるってことでしょうか?やったことないですが、パイプかなんかでつないでシェルを複数同時に走らせるとかやれそうですね。
guest

0

プログラム内で2つスレッドを立てて実行する手法か、
あるいはコミットやロールバックをわざとしない手法がありますね。

投稿2015/11/19 08:28

anonymouskawa

総合スコア856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tixure55

2015/11/19 08:38

回答ありがとうございます、プログラム内で2つスレッドを立てて実行する手法とはphp-fpmとworker使うということでしょうか? コミットやロールバックをしない手法はあらたに同一インスタンスでbeginTransaction();するってことでしょうか? 例)1回めのトランザクション処理 $this->db->beginTransaction(); --いろいろ処理-- $sql->execute(); $this->db->beginTransaction(); --いろいろ処理-- $sql->execute(); $stmt->closeCursor(); $this->db->commit();ってことですか?
anonymouskawa

2015/11/19 08:44

失礼、JavaとあったのでJavaの認識でいました。 私はPHPは詳しくないので、そちらの回答は出来ません。申し訳ないです。 commitしないというのは、文字通りcommitの処理をわざといれないで (PHPで処理をスリープ出来る関数とかってありましたっけ。もしあるなら、それで数秒止めてcommitする処理でも良いでしょう) 複数ブラウザで実行するだけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問