Универсальный короткий id
Возникла ситуация:
нужно создавать максимально короткие id к данным. Причем делать это нужно как можно более экономично (в плане ресурсов). id имеет малый период жизни, а количество одновременно живущих id может достигать 1000-3000 Как я думаю это сделать: Решил использовать base36 в качестве генерации уникальных id. Значения id будет от 1 до 4-х символов (то есть короткие!), при этом диапазон значений весьма неплохой - 1679615 ! // возвращает уникальный короткий ID в заданном числовом диапазоне function getRandomID(min, max) { var int = Math.floor(Math.random() * (max - min + 1)) + min; return int.toString(36); } var id = getRandomID(0, 1679615); alert(id); Конечно данный id может оказаться уже задействованным (среди тех активных 1000-3000 айдишников), поэтому нужно проверять перед использованием! Но такая вероятность ничтожна в случае с 3000 id - вероятность 1 на 559 А как бы вы это делали? |
dmitry111,
а если сгенерировать 1 раз 5000 уникальных и потом пользоваться ? |
dmitry111,
А тупо инкрементировать старый id? |
Цитата:
|
Цитата:
|
айдишники нужны для пуль в онлайн игре. Пуль много, сервер создает и уничтожает их.
Если предположить, что игроков 20, а пули вылетают у каждого игрока примерно 30 пуль в секунду, получается 600 id в секунду Каждая пуля (id) имеет время жизни, например 3 секунды, то есть 1800 id - одновременно активны! |
dmitry111,
зачем перебирать ? берёшь всегда первый id из 5000 -- возвращаешь на последнее место |
объясните и расскажите полностью задачу. Зачем генерировать рандомно
Цитата:
что как и зачем обрабатывает ид function getId() { var i = 0; return function () { i += 1; return 'id' + i; } } var newId = getId(); alert (newId()); alert (newId()); |
Poznakomlus,
вот и я говорю нужно инкрементировать, или вообще var nonce = Date.now() alert(nonce) |
Цитата:
Цитата:
alert(Date.now() === Date.now()); |
Часовой пояс GMT +3, время: 06:04. |