Избегайте дублирования данных со стороны приложения spring boot

#java #spring #spring-data

Вопрос:

Допустим, у нас есть следующий код для создания объекта базы данных, только если он еще не существует:

 public void createTrack(String ISRC) {  Optionallt;Trackgt; trackInDB = trackRepository.findByISRC(ISRC);  trackInDB.ifPresentOrElse(t -gt; {  log.info(String.format("Track with ISRC: %s already exists", ISRC));  },  () -gt; {  try {  Optionallt;TrackMetadatagt; trackMetadata = spotifyClient.fetchTrackMetadata(ISRC);  trackMetadata.ifPresent(this::persistTrack);  } catch (IOException e) {  e.printStackTrace();  }  }); }  private void persistTrack(TrackMetadata trackMetadata) {  Item item = trackMetadata.getTrack().getItems().get(0);  Track track = Track.builder()  .ISRC(item.getExternalId().getIsrc())  .durationTimeMillis(item.getDurationTimeMillis())  .explicit(item.isExplicit())  .name(item.getName())  .build();    log.info(String.format("Creating new Track with ISRC: %s", item.getExternalId().getIsrc()));  trackRepository.save(track); }  

В сценарии, когда 2 разных пользователя отправляют запрос, который проходит проверку «Не существует», будут созданы две повторяющиеся записи.

Как мы можем обеспечить, чтобы этого не происходило со стороны приложения? В реляционной БД мы можем определить ограничение уникального ключа, но что произойдет, если мы используем базу данных NoSQL? Именно по этой причине я думаю о решении со стороны приложения.