Хобрук: Ваш путь к мастерству в программировании

Следует ли писать объект так, чтобы автоматически назначенные идентификаторы не использовались повторно?

У меня есть группа сущностей пользователя и сущность транзакции под этим. Я автоматически выделяю идентификаторы для транзакций. Я хочу создать уникальный ключ для интеграции с платежным сервисом. Поскольку транзакция не является корневой сущностью, не гарантируется, что автоматически выделенные идентификаторы будут уникальными, и, следовательно, я не могу использовать их в качестве уникальных ключей. Что я сейчас делаю, следуя предложению на

уникальные автоматически сгенерированные идентификаторы Google Cloud Datastore

состоит в том, чтобы иметь фиктивную корневую сущность и выделять для нее идентификаторы и хранить этот идентификатор вместе с сущностью транзакции в качестве отдельного поля. Однако, поскольку это фиктивный объект, я в настоящее время не записываю сам фиктивный объект в хранилище данных.

Я прочитал другие сообщения

Как долго остаются неиспользованные идентификаторы при использовании allocateIds () выделено?

а также

Идентификаторы удаленных объектов снова доступен для App Engine, если создается автоматически для объекта?

но я все еще не уверен. Должен ли я вставлять эту фиктивную сущность только с помощью ключа? Если нет, как отслеживаются все выделенные идентификаторы для этого фиктивного объекта и что происходит с соответствующим использованием хранилища?


Ответы:


1

Идентификатор ключа объекта вместе с типом и предком (а также, возможно, с пространством имен) определяют уникальный ключ объекта, который имеет смысл, даже если объект на самом деле не существует: возможно наличие дочерних объектов. в группе сущностей предок присоединен к несуществующему предку. Из путей предков (выделено мной):

Когда вы создаете объект, вы можете дополнительно назначить другой объект в качестве его родительского; новый объект является дочерним по отношению к родительскому объекту (обратите внимание, что, в отличие от файловой системы, родительский объект не обязательно должен существовать).

Таким образом, тот факт, что ваши фиктивные сущности действительно существуют или нет, не имеет значения: их идентификаторы ключей, предварительно выделенные с помощью allocateIds(), никогда не должны истекать. Из присвоения идентификаторов:

Автоматический генератор идентификаторов в режиме хранилища данных будет отслеживать идентификаторы, которые были назначены с помощью этих методов, и будет избегать их повторного использования для другого объекта, поэтому вы можете безопасно использовать такие идентификаторы без конфликтов. Вы не можете вручную выбрать, какие значения возвращаются методом allocateIds(). Значения, возвращаемые allocateIds(), назначаются режимом хранилища данных.

Личные соображения, подтверждающие это мнение:

  • хранилище данных не имеет ограничения на количество объектов одного типа, предка и пространства имен, поэтому оно должно поддерживать практически неограниченное количество уникальных идентификаторов. ИМХО это означает, что не должно быть необходимости даже рассматривать их повторное использование. Вероятно, поэтому нет упоминания о крайнем сроке или времени истечения срока действия выделенных идентификаторов.
  • если идентификаторы для удаленных объектов когда-либо будут использоваться повторно, это вызовет значительную проблему для восстановления объектов хранилища данных из резервных копий - возможно, перезапись новых объектов с повторно используемыми идентификаторами объектами, которые использовали те же идентификаторы ранее
18.06.2019
Новые материалы

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..