teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤解釈修正

2017/10/25 00:49

投稿

Yatima
Yatima

スコア1159

answer CHANGED
@@ -1,7 +1,17 @@
1
+ そもそもですが,pushIDは**全体が時間情報,というわけではありません**.
2
+  
1
3
  [The 2^120 Ways to Ensure Unique Identifiers](https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html)
4
+ > The first 48 bits are a timestamp,(後略)
5
+ > The timestamp is followed by 72 bits of randomness,(後略)
6
+
7
+ すなわち,pushIDは前半が時間情報,**後半がランダム**な文字列だということです.
8
+ 同一ミリ秒に複数クライアントからの書き込みがあったとしても,後半のおかげでまず被りません(逆に言えばサーバ側でのvalidateはしないと思われます).
9
+  
10
+ 検証していただいた現象については,
2
11
  > (前略) if a client creates multiple push IDs in the same millisecond, we just 'increment' the random bits by one.
3
12
 
4
- ということですので,ミリ秒同一でもよしにサーバ側でインクリメントしてくれうです.
13
+ つまり**同一端末でミリ秒同一な場合あったので,ランダム部分のインクリメントが発動た**,というパターンになります(jsのfor文程度で同一ミリ秒を達成できのかといのはやや疑問ですが)
14
+ 決して「単一クライアントからの連続書き込み程度では被らないが,**複数クライアントからでは被る可能性がある**」**というわけではありません**(理由は前述の通り).
5
15
   
6
- ちなみに今月頭に発表となった[Firestore](https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html)のほうでは[時間に関係なくIDが生成される](https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document)ため,このあたりは考えなくてよいかと思います.
7
- し時間順に並べたい場合はタイムスタンプを明示的に保持する必要あり
16
+ ちなみに今月頭に発表となった[Firestore](https://firebase.googleblog.com/2017/10/introducing-cloud-firestore.html)のほうでは[時間に関係なくIDが生成](https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document)されます.
17
+ このありのややこいことは考えなくて済みますが,時間順に並べたい場合はタイムスタンプを明示的に保持する必要あります.