'
Научный журнал «Вестник науки»

Режим работы с 09:00 по 23:00

zhurnal@vestnik-nauki.com

Информационное письмо

  1. Главная
  2. Архив
  3. Вестник науки №3 (72) том 5
  4. Научная статья № 76

Просмотры  46 просмотров

Богомолов А.С., Новиков П.С.

  


ИССЛЕДОВАНИЕ ОПТИМАЛЬНОГО СПОСОБА ГЕНЕРАЦИИ ID В ANDROID-РАЗРАБОТКЕ *

  


Аннотация:
в статье проведено исследование различных методов генерации уникальных идентификаторов в контексте мобильной разработки на Android. Основное внимание уделено анализу версий UUID от 1 до 7, их особенностям и применимости в различных сценариях. На основе сравнительного анализа разработан уникальный метод генерации ID, объединяющий время, случайное число и инкрементальный счётчик для обеспечения уникальности и устойчивости к перезапускам приложения. Подтверждена его эффективность и пригодность для использования в мобильных приложениях по сравнению с традиционными методами.   

Ключевые слова:
UUID, генерация ID, мобильная разработка, Android, уникальные идентификаторы, производительность   


Во время разработки мобильного приложения у разработчиков часто встаёт задача использования уникального идентификатора. В виду наличия стандартного метода в Java для генерации UUID, все используют его, не думая о том, насколько вообще он производителен в конкретной ситуации. Цель исследования – изучить популярные методы генерации ID, сравнить их по эффективности и разработать собственный метод, на основе полученных данных.Анализ существующих методов генерации ID.Среди методов создания уникальных идентификаторов особое место занимают UUID из-за их универсальности, масштабируемости и широкого применения в индустрии, что делает их идеальной отправной точкой для анализа.UUID существуют в разных версиях от 1 до 7 и обладают различными характеристиками, основанными на методах генерации, что делает их подходящими для разнообразных сценариев использования.UUID версии 1 генерируется на основе времени и MAC-адреса устройства, обеспечивая уникальность за счёт физического адреса и временной метки. Этот метод отличается высокой уникальностью, но может раскрывать информацию об устройстве, что является недостатком с точки зрения конфиденциальности.Версия 2 похожа на версию 1, но включает дополнительную информацию о домене и идентификаторе безопасности, что делает её подходящей для определённых корпоративных сред. Однако, из-за своей специализированной природы, она редко используется вне специфичных приложений.UUID версии 3 использует хеширование с MD5 от некоторых данных и пространства имён, что обеспечивает уникальность без зависимости от конкретного оборудования. Однако, уязвимости MD5 к коллизиям делают эту версию менее предпочтительной для задач, требующих высокой степени безопасности.Версия 4 генерируется полностью случайным образом, предлагая простоту и высокий уровень уникальности без открытия какой-либо информации о системе. Её недостаток заключается в том, что случайность не гарантирует абсолютную уникальность, хотя вероятность коллизии крайне мала.UUID версии 5, подобно версии 3, использует хеширование, но с применением SHA-1, что делает её более безопасной против коллизий, чем MD5. Тем не менее, из-за потенциальных уязвимостей SHA-1, её применение рекомендуется ограничить.Версия 6 была разработана для улучшения версии 1, предоставляя более логичную сортировку UUID по времени. Это улучшение делает версию 6 подходящей для баз данных, где требуется упорядоченность записей. Однако, как и версия 1, она может выдавать информацию о времени создания и системе.Наконец, версия 7 предлагает новый подход, используя метку времени Unix, что облегчает интеграцию с системами, отслеживающими время. Она сочетает в себе преимущества уникальности и простоты, делая UUID менее зависимым от конкретных характеристик системы или алгоритмов хеширования.Анализ текущих тенденций в области мобильной разработки указывает на то, что версии UUID 4 и 7 являются наиболее предпочтительными вариантами. Они обеспечивают разработчикам удобные и безопасные инструменты для создания идентификаторов, минимизируя необходимость вникать в сложности технической реализации и исключая вероятность непреднамеренного раскрытия чувствительной информации. Эти версии совмещают в себе легкость в использовании и гарантию уникальности, делая их идеальным решением для широкого спектра задач в сфере разработки мобильных приложений.Существует множество альтернативных методов генерации идентификаторов, разработанных различными организациями и индивидуальными разработчиками. Среди них выделяются LexicalUUID и Snowflake Flake от Boundary, а также уникальные подходы, предложенные различными организациями и индивидами, такими как Segment, Sony и другие. Каждый из этих методов имеет свои особенности, например, предлагая улучшенную сортировку, уникальность в масштабах распределённой системы или оптимизацию под конкретные условия использования. Несмотря на их значительные достоинства и специализированные преимущества, в рамках данного анализа мы сосредотачиваемся на универсальности и масштабируемости UUID. Этот выбор обусловлен широким применением и глубокой интеграцией UUID в индустриальные стандарты и разнообразные технологические платформы, что делает их исключительно подходящими для общего обзора и анализа в контексте мобильной разработки.Сравнение производительности.В ходе исследования была использована библиотека com.github.f4b6a3:uuid-creator, написанная на Java, для анализа производительности различных методов генерации уникальных идентификаторов. Ключевым объектом сравнения стали стандартная реализация UUID версии 4 в Java, а также версии 6 и 7 UUID, с целью изучения влияния использования защищённого генератора случайных чисел на скорость генерации. Дополнительно в сравнение были включены GUID аналогичных версий, реализованные с применением незащищённой генерации случайных чисел, и метод генерации инкрементального идентификатора с использованием AtomicLong. Важной частью анализа стало учёт времени, необходимого для преобразования идентификаторов в строковое представление, поскольку это является стандартным способом хранения ID в мобильной разработке.Рис. 1. Сравнение времени генерации ID.Результаты исследования, отражённые на рисунке 1, демонстрируют, что генерация UUID версии 4 и версии 7 требует наибольшего времени, что обусловлено использованием защищённой генерации случайных чисел. В свою очередь, GUID, сгенерированные с помощью незащищённого метода, показали более высокую скорость, но всё же оказались более чем в 10 раз медленнее по сравнению с инкрементальной генерацией ID через AtomicLong. Такая разница в скорости может быть приемлема в большинстве случаев разработки, например, при отправке данных в аналитику или при реализации стандартной функциональности приложений. Однако, в контексте экранов с большим суточным количеством пользователей (DAU), где каждая миллисекунда имеет значение, компромиссы в производительности могут негативно сказаться на пользовательском опыте и, как следствие, на прибыльности бизнеса. Аналогично, в разработке общих компонентов, которые будут использоваться в множестве мест приложения, небольшое ускорение в несколько сотен наносекунд может иметь значительный эффект за счёт законов больших чисел. Разработка собственного метода генерации ID.В ходе исследования возникла необходимость в создании собственного метода генерации идентификаторов. Определение ключевых требований к новому методу стало первым шагом на пути к разработке.Первоначально, было решено, что идентификатор должен обладать уникальностью на уровне отдельного устройства, исходя из предпосылки, что борьба за скорость с универсальными UUID не является целью, поскольку это приведёт к созданию аналогичных, лишь незначительно оптимизированных решений. В большинстве случаев, условие уникальности на одном устройстве оказывается достаточным.Далее, уникальность ID должна сохраняться даже при перезапуске процесса приложения, учитывая, что приложение может перезапускаться по различным причинам, в том числе при смене конфигурации или нехватке памяти, при этом сохраняя данные, но обнуляя переменные времени выполнения.Третье ключевое требование заключалось в том, что конечный ID должен представлять собой строку, поскольку в подавляющем большинстве случаев разработки именно такой тип данных используется для передачи и сохранения идентификатора. Желательно, чтобы генератор сразу выдавал ID в строковом формате, минимизируя тем самым время на преобразования и оптимизируя процесс генерации.В процессе изучения различных подходов к достижению уникальности идентификаторов были рассмотрены несколько методов. Инкрементальный счётчик, который позволяет получать различные значения при каждом запросе, увеличивая ID на единицу, обеспечивает уникальность всех чисел. Однако существует проблема поддержания уникальности после перезапуска процесса, требующая сохранения состояния счётчика и его восстановления, что не всегда может быть надёжно из-за возможности неожиданных сбоев. Применение MAC-адреса устройства к ID вносит элемент уникальности устройства, но это не подходит для целей разработки, направленной на создание уникального идентификатора на уровне одного устройства. Более того, использование MAC-адреса может привести к раскрытию конфиденциальной информации и появлению коллизий из-за клонирования адресов или ошибок производителя.Генерация случайного числа добавляет дополнительную уникальность к идентификатору. Различают защищённую и незащищённую генерацию случайных чисел: первая обеспечивает большую безопасность, но тратит больше времени на генерацию, в то время как вторая работает быстрее, но с большим риском коллизий. Время устройства предоставляет монотонно увеличивающееся значение, однако оно подвержено риску вмешательства и может повторяться. Точность времени и возможность одновременного создания множества ID в один квант времени также ограничивают надёжность этого метода.В результате, было решено использовать комбинацию методов для достижения требуемых характеристик уникальности идентификатора. Подобный подход нашёл своё применение в системе UUID, что подтверждает его пригодность для соблюдения установленных требований. Эта стратегия позволяет обеспечить уникальность ID на уровне устройства, сохраняя её даже после перезапуска приложения, и гарантирует требуемый формат представления идентификатора.Начиная с требования устойчивости идентификаторов к перезапускам процесса, было использовано время устройства в качестве основы для уникальности. Чтобы предотвратить возможные проблемы, связанные с ручным изменением времени на устройстве, было решено объединить временную метку со случайным числом. Дополнительное внедрение инкрементального счётчика позволило решить вопрос генерации нескольких ID в один и тот же момент времени, формируя эффективную комбинацию для создания уникальных идентификаторов в пределах одного устройства, устойчивых к возможным коллизиям.В процессе дальнейшей оптимизации генерации идентификаторов было выявлено, что начальная часть ID, состоящая из времени и случайного числа, может быть сгенерирована единожды, при этом снижая нагрузку на процесс генерации. Последующее добавление значения из инкрементального счётчика позволяло сохранить уникальность. Ограничение временной части до 40 младших бит позволило сократить потенциальную длину идентификатора без существенной потери в уникальности, учитывая, что в локальных условиях использования ID вряд ли потребуется различать интервалы времени, превышающие несколько десятков лет. Применение ограничения на случайное число до 1000 достаточно для уменьшения вероятности коллизий. После генерации начальной части она сразу преобразовывается в строковой префикс. Добавление к этому префиксу числа из инкрементального счётчика завершает формирование полного идентификатора.По сравнению с традиционными методами генерации, разработанный способ, получивший название LocalID, продемонстрировал значительно более высокую скорость, превосходя по этому параметру как стандартные UUID и GUID, так и методы, основанные на использовании AtomicLong, несмотря на то что последний и лежал в основе нового подхода. Одно из предположений, что уникальный префикс, способствует дополнительной оптимизации на уровне байт-кода Java.Результаты, подтверждающие превосходство нового метода по скорости генерации идентификаторов, представлены на рисунке 2, где наглядно продемонстрировано улучшение производительности по сравнению с анализируемыми методами.Рис. 2. Сравнение времени генерации ID с новым способом.Заключение.В исследовании были изучены различные методы генерации уникальных идентификаторов, с акцентом на их применение в мобильной разработке. Анализируя версии UUID от 1 до 7, были выявлены их особенности и подходящие сценарии использования. В ходе работы, основываясь на выявленных требованиях к уникальности и производительности, был разработан новый метод создания ID, названный LocalID. Этот метод сочетает в себе использование времени, случайного числа и инкрементального счётчика, обеспечивая уникальность на уровне одного устройства и устойчивость к перезапускам приложения. Сравнительный анализ показал, что LocalID опережает традиционные методы по скорости генерации, что подтверждает его эффективность и пригодность для использования в мобильных приложениях.   


Полная версия статьи PDF

Номер журнала Вестник науки №3 (72) том 5

  


Ссылка для цитирования:

Богомолов А.С., Новиков П.С. ИССЛЕДОВАНИЕ ОПТИМАЛЬНОГО СПОСОБА ГЕНЕРАЦИИ ID В ANDROID-РАЗРАБОТКЕ // Вестник науки №3 (72) том 5. С. 477 - 486. 2024 г. ISSN 2712-8849 // Электронный ресурс: https://www.вестник-науки.рф/article/13604 (дата обращения: 17.05.2024 г.)


Альтернативная ссылка латинскими символами: vestnik-nauki.com/article/13604



Нашли грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики) ?
- напишите письмо в редакцию журнала: zhurnal@vestnik-nauki.com


Вестник науки СМИ ЭЛ № ФС 77 - 84401 © 2024.    16+




* В выпусках журнала могут упоминаться организации (Meta, Facebook, Instagram) в отношении которых судом принято вступившее в законную силу решение о ликвидации или запрете деятельности по основаниям, предусмотренным Федеральным законом от 25 июля 2002 года № 114-ФЗ 'О противодействии экстремистской деятельности' (далее - Федеральный закон 'О противодействии экстремистской деятельности'), или об организации, включенной в опубликованный единый федеральный список организаций, в том числе иностранных и международных организаций, признанных в соответствии с законодательством Российской Федерации террористическими, без указания на то, что соответствующее общественное объединение или иная организация ликвидированы или их деятельность запрещена.