Ask HN: How should I create a unique id for entries that aren't incremental?
2 points| tim_nuwin | 11 years ago
What is an efficient way of creating an ID where there won't be any collision even if there are 1 billion+ entries?
This ID will be used in a url..
Thanks, Tim
smt88|11 years ago
This is a really complicated topic, and there are multiple ways to handle what you're doing. It really depends on your read/write ratios, typical volume, growth rate, and the underlying DB software you're using.
Because there are so many considerations that require knowing real-world use cases, it's a premature optimization. Are you going to have more than 1 billion records in the next few years? If not, don't worry about this.
However, there are other reasons to use non-incremental IDs (security, for one).
To answer your question as asked though, check this out: http://www.postgresql.org/docs/8.3/static/datatype-uuid.html
tim_nuwin|11 years ago
The only way to not view a person's board is if it's private.. There are some services that for their pages will have id's that are 7 or so characters long, and very compact, the uuid you're referencing seems kind of ugly.
I would still keep my incremental ID in the table as a PK, but maybe I could generate a new value per row for a public URL ID. That public url id could be based off of their PK but I don't know what would be the best way to generate a short url id w/ the PK as a key.
iancarroll|11 years ago
That's just security by obscurity, with proper authorization checking it doesn't matter.
iancarroll|11 years ago
% uuidgen
B14818B6-4219-43BD-82EF-8421EC1AFBCF
% echo "B14818B6-4219-43BD-82EF-8421EC1AFBCF" | shasum -a 256
00ea501d47789ac5eb559f10d631b3f6df8f82b5cba9c1f9d234b705d89f1704
tim_nuwin|11 years ago
sjs382|11 years ago
Rainb|11 years ago
Jeremy1026|11 years ago