###前提・実現したいこと
MySQLでのユニークIDの採番方法
より良いやり方はないですか?
お手数ですがご示唆下さい。
###現在やっている方法
MySQLで一意な値を採番しています。
MySQLではシーケンスがないので、シーケンステーブルを作成し
その値をインクリメントし採番することで、一意な値を取得するようにしています。
問題なく、うまく行っています。
###懸念点
上記の場合、複数セッションから同じ値を取得できないように、別に行ロック用のテーブルを作成して、
採番前にfor update文を用いてリードロックしています。
no waitがないので、ロックが解除されるまで待つことになるのですが、
セッション数が急激に増加した場合に、待ち時間が長くなるのではといつも懸念しています。
なおOracleなどで、リードロックしたい場合は
for update no waitを用いて、他でロックしている状況をすぐに検知しエラーとなるようにしています。
###他の方法
リードロックせずに、採番用のテーブルに更新日を設けて、インクリメントする時に更新日をキーに
更新し、更新日が変わっていた場合は再度採番と言うやり方はあるのですが、それも煩雑なので、
現在のところ上記の行ロック用のテーブルを用いた方法で行っています。
###シーケンステーブル例
CREATE TABLE seq_xxxxx ( id bigint unsigned DEFAULT 0 NOT NULL COMMENT '一意な値の採番用', PRIMARY KEY (id) ) COMMENT = 'シーケンステーブル';
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/09 04:16
2017/05/09 04:35
2017/05/09 04:41 編集
2017/05/09 04:38
2017/05/09 05:10
2017/05/09 05:21