Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2014, 22:51
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Универсальный короткий 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




А как бы вы это делали?
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2014, 23:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

dmitry111,
а если сгенерировать 1 раз 5000 уникальных и потом пользоваться ?
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2014, 23:11
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

dmitry111,
А тупо инкрементировать старый id?
__________________
Научу себя плохому
Ответить с цитированием
  #4 (permalink)  
Старый 15.06.2014, 23:13
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от рони
а если сгенерировать 1 раз 5000 уникальных и потом пользоваться ?
забыл уточнить, они (айдишники) то появляются то удаляются
Ответить с цитированием
  #5 (permalink)  
Старый 15.06.2014, 23:13
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от l-liava-l
А тупо инкрементировать старый id?
3000 айдишников перебирать каждый раз - это затратно!
Ответить с цитированием
  #6 (permalink)  
Старый 15.06.2014, 23:22
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

айдишники нужны для пуль в онлайн игре. Пуль много, сервер создает и уничтожает их.

Если предположить, что игроков 20, а пули вылетают у каждого игрока примерно 30 пуль в секунду, получается 600 id в секунду

Каждая пуля (id) имеет время жизни, например 3 секунды, то есть 1800 id - одновременно активны!
Ответить с цитированием
  #7 (permalink)  
Старый 15.06.2014, 23:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

dmitry111,
зачем перебирать ? берёшь всегда первый id из 5000 -- возвращаешь на последнее место
Ответить с цитированием
  #8 (permalink)  
Старый 15.06.2014, 23:32
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

объясните и расскажите полностью задачу. Зачем генерировать рандомно
Сообщение от dmitry111
сервер создает и уничтожает их.
и что
что как и зачем обрабатывает ид
function getId() {
        var i = 0;
        return function () {
          i += 1;
          return 'id' + i;
        }
      }
      var newId = getId();
      alert (newId());
      alert (newId());

Последний раз редактировалось Vlasenko Fedor, 15.06.2014 в 23:41.
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2014, 23:44
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Poznakomlus,
вот и я говорю нужно инкрементировать, или вообще

var nonce = Date.now()
alert(nonce)
__________________
Научу себя плохому
Ответить с цитированием
  #10 (permalink)  
Старый 15.06.2014, 23:46
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от dmitry111
Если предположить, что игроков 20, а пули вылетают у каждого игрока примерно 30 пуль в секунду, получается 600 id в секунду

Каждая пуля (id) имеет время жизни, например 3 секунды, то есть 1800 id - одновременно активны!
а я 5400 насчитал

Сообщение от l-liava-l
или вообще
alert(Date.now() === Date.now());
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 15.06.2014 в 23:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
число 23 (слишком короткий заголовок - сообщение форума на немецком хостинге) bes Общие вопросы Javascript 7 25.02.2014 21:38
Универсальный дескриптор ошибок Сергей1980 Общие вопросы Javascript 0 11.09.2013 17:27
Помогите в написать короткий скрипт для AdobeAcrobat XI. BSI Общие вопросы Javascript 1 13.08.2013 21:24
Универсальный GrayScale с плавной работой (затухание и проявление), принцип работы? master_alf jQuery 40 26.02.2013 11:54
Универсальный обработчик тега «спойлер» (на mootools) Serg_pnz Ваши сайты и скрипты 0 13.10.2009 10:07