Twitterの各ツイート固有のIDとして割り当てられる値(id_str)をMySQLのchar型でInsertしているのですが、
最大値を取得するのに、
MySQL
1SELECT MAX(id_str) from testTBL;
などとしてしまうと、例えば、900と1000のレコードがあった場合、900の値が返ってくるなど、意図した結果が得られません。
そのため、id_strをキャストすることで取得しています。
しかし、今後id_strがMySQLのunsignedのbigint型の最大値である
18446744073709551615(8byte)を超えた場合、
どのようにして最大値を取得するのが筋でしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
いくつかの方法がありますので参考にしてみてください。
https://qiita.com/kawasima/items/6b0f47a60c9cb5ffb5c4
Twitterは独自のID生成戦略を持っているようです。
https://qiita.com/kawasima/items/6b0f47a60c9cb5ffb5c4#snowflake
確か、膨大なニュースを取り扱うsmartnewsさんはこちらをフォークしていた記憶があります。
個人的にはMySQLをお使いならUUIDがお手軽かなと思います。
ただ、そのまま使うと容量や速度面からデメリットが大きいので主キーとして使うなら型はvarcharではなくbinaryで管理されるほうが良いと思います。
その場合、MySQL5系はこちらのような変換処理が必要になってきますが、8系からは機能要求により同様の処理(関数)が公式サポートされましたのでより手軽に利用できるでしょう。
投稿2018/05/29 16:17
編集2018/05/29 17:44総合スコア4258
0
普通に文字列で処理するものでしょうね
最大桁数さえ決めればそれに合わせて、比較したりソートしたりするさい
0フィルすればよいでしょう
SQL
1create table tbl(id char(10)); 2insert into tbl values(1),(100),(90),(12);
SQL
1select * from tbl order by lpad(id,10,'0');
投稿2018/05/30 00:29
総合スコア114843
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/30 03:26
2018/05/30 03:54
2018/05/30 04:10
2018/05/30 14:32
0
今後id_strがMySQLのunsignedのbigint型の最大値である18446744073709551615(8byte)を超えた場合
この値を日本語の数値区切りにすると、1844京6744兆737億955万1615という値になります。
そして、1秒あたりのツイート数の最大値は「バルス」の際の14万ツイート/秒ということで、仮に毎秒このペースでツイートが流れていっても、64ビットを使い切るには400万年以上かかる計算になります。ツイッターもmatusmonさんも、そこまで生き残ることはないでしょう。
結論:ツイッターが「IDの体系を、64ビットからはみ出る形で変える」という可能性は低いので、発表されてから考えればいい
投稿2018/05/29 14:42
編集2018/05/29 14:46総合スコア145184
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/29 15:13 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/30 03:38