Apache Ignite уникальное ограничение - PullRequest
0 голосов
/ 10 декабря 2018

Я использую Apache Ignite с Spring Data.Мне нужен столбец "имя пользователя", чтобы быть уникальным.На самом деле «имя пользователя» является ключом кеша Ignite.Я думаю, что в ignite пока нет уникальных ограничений.Используя простой API-интерфейс зажигания, я не уверен, что смогу сделать блокировку, например:

IgniteCache<String, Integer> cache = ignite.cache("userCache");
Lock lock = cache.lock("username1");
lock.lock();
//check if doesn't exist yet
...

, так как «username1» еще не существует.Есть ли другой подход?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Текущее решение с Spring Data и SpringTransactionManager :

@Transactional("pessimisticTransactionManager")
public void create(final User user) throws AlreadyExistsException {
    logger.info("Creating {}", user);
    if(userRepository.findByName(user.getName()).isPresent()) {
        throw new AlreadyExistsException(user.getName() + " already in use.") ;
    }
    userRepository.save(user.getName(), user);      
}

, но с optimisticTransactionManager также должно работать и иметь лучшую производительность, так как вероятность конфликта имен в моей системе мала.

0 голосов
/ 10 декабря 2018

Я полагаю, что ваш подход будет работать, однако есть подходящий метод для достижения цели: IgniteCache.putIfAbsent

...