У меня есть большая DynamoDB (не большая, около 20 ГБ), которая содержит элементы с отметками времени истечения.
У нас есть 32 параллельных сканера, считывающих базу данных, в то время как другие записи добавляются в базу данных из других частей системы.
Это код, который мы имеем на данный момент
val scanRequest = ScanRequest
.builder()
.tableName(tableName)
.filterExpression("expiryDate < :date")
.expressionAttributeValues(mapOf(":date" to expiredThreshold).asAttributeValueMap())
.totalSegments(totalSegments)
.segment(segment)
.limit(1000)
.exclusiveStartKey(lastEvaluatedKey)
.build()
val scanResult = client.scan(scanRequest).asDeferred().await()
lastEvaluatedKey = scanResult.lastEvaluatedKey()
У меня есть несколько опасений по поводу этого паттерна.
- Достигнем ли мы когда-нибудь конца каждого сегмента через какое-то время или нет? Если так, как мы можем узнать, достигнут ли конец или нет?
- Будут ли элементы, которые добавляются из другой части, идти перед последним ключом оценки или все будет после?
- Что было бы хорошим показателем для возобновления чтения с начала сегмента?