#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? Именно по этой причине я думаю о решении со стороны приложения.