永続的で堅牢な一意のIDを採番したいです。
現在はレコード番号を一意のIDとして
関連レコード一覧などのアプリ間のひもづけとして
利用していますが、バックアップからリストア(※)した場合に
レコード番号が変わってしまうことがわかり
別の方法を探しています。
※GusukuまたはkBuckupの利用を検討しています
画面以外に外部からREST API経由で一括登録がありますので
「自動採番プラグイン」や、同等ロジックのJavascriptは採用できません。
外部サーバーに採番サービスを立てて利用する方法を
思いついていますが、もっとシンプルな方法がございましたら
ご教授いただきたいです。
よろしくお願いします。
採番サービスのために、外部にサーバをたてるなら、採番管理用アプリを作成し、採番する方法があります。
「自動採番プラグイン」ですが、一番新しいレコード番号から採番フィールドを更新するプラグインになっています。
どの方法を使っても、結局は画面から保存時の採番処理と、外部から保存時の採番処理が必要になってきます。
「自動採番プラグイン」を使い、外部から保存時も同様の処理を加える方法もあります。
メントありがとうございます。
私が書いた「外部サーバーに採番サービスを立てて利用する方法」について、補足します。
外部サーバー自体は既存のサーバーを利用します。そこにPostgreSQLを入れて、
シーケンスオブジェクトから番号を取得するWEB-APIを作成しようと思っています。(今のところ)
「自動採番プラグイン」ですが、レコード番号の最大値+1を採番しているかと思います。
その場合、同時アクセスで同じ番号が振られる心配もあると思っています。
「値の重複を禁止する」設定をすることで重複したIDが登録されることは
避けられると思いますが、最初から一意性が保証されたIDを取得できるのが希望です。
だとしたら、現在のミリ秒を取得して、それをIDにしてしまうというのはどうでしょう。
ミリ秒でも重複を恐れるなら、長くはなりますが(ここ )のコードを利用して、ミリ秒+乱数するもありだと思いますが、これも絶対の保証はできません。
絶対の保証がほしいなら、レコード保存後、PUTしてIDフィールドにレコード番号を加えてしまうという方法もありかもしれません。
IDフィールドの元の文字列によっては、バックアップ後レコード番号で被る可能性があるので、ミリ秒+レコード番号が良いでしょうか。
すっきりした解決法が提示できなくて、申し訳ありませんが案はこれくらいになります。
コメントありがとうございます。
数値以外の文字も入りますが、UUIDというアイディアを同僚にもらったので投稿します。
https://ja.wikipedia.org/wiki/UUID
Gistからの引用となりますが、Javascriptのサンプルコードを貼っておきます。
https://gist.github.com/jcxplorer/823878
function uuid() {
var uuid = "", i, random;
for (i = 0; i < 32; i++) {
random = Math.random() * 16 | 0;
if (i == 8 || i == 12 || i == 16 || i == 20) {
uuid += "-"
}
uuid += (i == 12 ? 4 : (i == 16 ? (random & 3 | 8) : random)).toString(16);
}
return uuid;
}
system
(system)
クローズされました:
2025 年 2 月 14 日午前 7:18
6
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。