Универсальный короткий 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, время: 17:06. |