Спецификация W3C для IndexedDB определяет генератор ключей как:
Генератор ключей генерирует монотонно увеличивающиеся числа [sic] каждый раз, когда требуется ключ.
Теперь мне кажется (для меня), что распространенным вариантом использования IndexedDB (или, в этом отношении, любого из вариантов хранения на стороне клиента HTML5: WebSQL, localStorage и т. Д.) Будут приложения, предназначенные для работы в автономном режиме (в совместно с HTML5 ApplicationCache).
В этом сценарии отключенное веб-приложение может создавать новые объекты / записи в локальном хранилище данных, которые впоследствии синхронизируются с централизованной базой данных, когда становится доступным соединение с сервером.
Кроме того, любое приложение, в котором несколько клиентов синхронизируются с одной и той же централизованной базой данных, обычно требует механизм предотвращения конфликтов идентификаторов.
UUID (или GUID) является хорошим выбором, поскольку он позволяет генерировать уникальные ключи без какой-либо центральной координации. Напротив, «монотонно увеличивающиеся числа» - плохое решение (если только каждый клиент не «затравлен» начальным значением, которое вряд ли столкнется с другими пользователями).
Меня удивляет, что спецификация IndexedDB не определяет (или даже не учитывает будущую поддержку) генераторов альтернативных ключей, таких как генератор UUID. Некоторые могут предположить, что ответом будет просто не использовать встроенный генератор ключей IndexedDB, вместо этого пусть ваше приложение генерирует свои собственные ключи.
Однако, хотя существует множество доступных генераторов UUID на основе Javascript, многие из них, похоже, основаны на Math.random (), который имеет известные ограничения с точки зрения случайности , поэтому может не быть хороший выбор, если необходимо гарантировать абсолютные уникальные ключи.
Собственный генератор UUID, предоставляемый разработчиками IndexedDB, (предположительно) будет более устойчивым и будет работать лучше, чем сценарий, реализованный / импортированный приложением; можно подумать.
Итак, я что-то здесь упускаю или это упущенная возможность рабочей группой W3C IndexedDB?