Наше приложение Spring Boot
использует базу данных Couchbase
и обращается к ней с помощью Spring-Data
. Чтобы удалить записи из корзины, мы создали следующий метод в хранилище:
Slice<Dog> deleteAllByOwnerIdAndName(String ownerId, String name, Pageable pageable);
У нас также есть соответствующий индекс в корзине:
CREATE INDEX `dogs_by_ownerId_and_name_idx` ON `dogs`(`ownerId`,`name`) WHERE (`_class` = "com.example.Dog")
Наш код использует нумерацию страниц при попытке удалить элементы:
Slice<Dog> dogsSlice = null;
Pageable pageable = PageRequest.of(0, 1000, Sort.by("id"));
int pageCounter = 0;
do {
log.debug("Deleting page No. {} of dogs", pageCounter++);
dogsSlice = dogsRepository.deleteAllByOwnerIdAndName("3243242", "Max", pageable);
} while (dogsSlice.hasNext());
Но слишком часто мы получаемTimeoutexceptioin
:
Удаление страницы № 0 собак
osssTaskUtils $ LoggingErrorHandler: В запланированной задаче произошла непредвиденная ошибка.
org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Невозможно выполнить запрос из-за следующих ошибок n1ql: {"msg": "Превышено время ожидания 7.5s", "code": 1080} в org.springframework.data.couchbase.core.CouchbaseTemplate.findByN1QL (CouchbaseTemplate).java: 458) ~ [classes! /: 5.1.40] в org.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.executeSliced (AbstractN1qlBasedQuery.java:189) ~ [классы! /: 5.1.40] в орг.springframework.data.couchbase.repository.query.AbstractN1qlBasedQuery.executeDependingOnType (AbstractN1qlBasedQuery.java:129) ~ [классы! /: 5.1.40] в org.springframework.data.couchbase.repository.query.AbstractN:q.jjjqqlBQ[classes! /: 5.1.40] в org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor.doInvoke (RepositoryFactorySupport.java:590) ~ [классы! /: 5.1.40] в org.springra.repository.core.support.классы! /: 5.1.40] в org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke (DefaultMethodInvokingMethodInterceptor.java:59) ~ [классы! /: 5.1.40] в org.springframework.aop.frameethoho (.ReflectiveMethodInvocation.java:185) ~ [классses! /: 5.1.40] в org.springframework.data.couchbase.repository.support.ViewPostProcessor $ ViewInterceptor.invoke (ViewPostProcessor.java:87) ~ [классы! /: 5.1.40] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:185) ~ [classes! /: 5.1.40] в org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor.java:92 [5.1.40]: ~)] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:185) ~ [классы! /: 5.1.40] в org.springframework.aop.interceptor.ExposeInvocationInterceptor.orv ()[classes! /: 5.1.40] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:185) ~ [классы! /: 5.1.40] в org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke (SurroundingTransactionDetectorMethodInterceptor.java:61) ~ [classes! /: 5.1.40] в org.springframework.aop.framework.: 5.1.40] at com.sun.proxy. $ Proxy130.deleteAllByOwnerIdAndName (неизвестный источник) ~ [na: na]
Что еще нам нужно сделать?