Параллельное создание и запись в RDBMS - PullRequest
0 голосов
/ 24 июня 2019

При создании URL-адреса у меня есть 2 разных клиентских экземпляра, которые запрашивают крошечный URL-адрес и, если он не найден, создают запись в rdbms и присваивают ее URL-адресу, отправленному клиентом. Я использую эластичный поиск для запроса крошечного URL. Моя проблема заключается в управлении параллелизмом в двух разных экземплярах, когда оба одновременно запрашивают один и тот же крошечный URL и, поскольку он не найден, он создает запись с одинаковым крошечным URL, назначенным двум разным URL-адресам, что неверно. Как можно избежать этой ситуации?

Привет

1 Ответ

1 голос
/ 24 июня 2019

вам следует рассмотреть исключительную блокировку той части кода, в которой вы проверяете наличие крошечных URL.например:

private final static Object LOCK = new Object();//it should be defined as a shared variable between threads. 
synchronize(LOCK) {
    //check if tiny url exists or not. 
}

В качестве альтернативы, вы можете использовать базу данных в памяти, такую ​​как Redis, вместо Elasticsearch для проверки существования крошечных URL-адресов.

...