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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Q&A

1回答

2179閲覧

【Firebase】pushのキーがダブることはあるのか?

NobumitsuHata

総合スコア141

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

0グッド

1クリップ

投稿2017/09/13 09:36

編集2017/09/13 13:32

firebaseのpushで発行されるキーですが、
ドキュメントにタイムスタンプを元に作成していると書いてあったので、
同じ秒数でメッセージをポストした際は、やはり同じキーになり、
ユニークではなくなるのでしょうか?

【追記】
イメージ説明
for文で10回ぶん回してpushしてみましたが、1文字違いまではありました。
とりあえずjavascriptのfor文レベルであれば被らないというのはわかりました。

小数点第何位かまで一緒だとやはりバッティングする可能性はありそうですね
ですので、ユーザーが大勢集まる可能性があるサービスに関して言えば、
何かしら対応しといた方がよさそうな気がします。念のため

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

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

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

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

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

guest

回答1

0

そもそもですが,pushIDは全体が時間情報,というわけではありません

The 2^120 Ways to Ensure Unique Identifiers

The first 48 bits are a timestamp,(後略)
The timestamp is followed by 72 bits of randomness,(後略)

すなわち,pushIDは前半が時間情報,後半がランダムな文字列だということです.
同一ミリ秒に複数クライアントからの書き込みがあったとしても,後半のおかげでまず被りません(逆に言えばサーバ側でのvalidateはしないと思われます).

検証していただいた現象については,

(前略) if a client creates multiple push IDs in the same millisecond, we just 'increment' the random bits by one.

つまり,同一端末でミリ秒も同一な場合であったので,ランダム部分のインクリメントが発動した,というパターンになります(jsのfor文程度で同一ミリ秒を達成できるのかというのはやや疑問ですが).
決して「単一クライアントからの連続書き込み程度では被らないが,複数クライアントからでは被る可能性があるというわけではありません(理由は前述の通り).

ちなみに今月頭に発表となったFirestoreのほうでは時間に関係なくIDが生成されます.
このあたりのややこしいことは考えなくて済みますが,時間順に並べたい場合はタイムスタンプを明示的に保持する必要があります.

投稿2017/10/24 07:54

編集2017/10/25 00:49
Yatima

総合スコア1159

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問