DynamoDB, способ разбиения на страницы 100 000 документов со смещением / лимитом?

#java #kotlin #amazon-dynamodb #dynamodb-queries

#java #kotlin #amazon-dynamodb #dynamodb-запросы

Вопрос:

У меня есть 100 000 документов, успешно сохраненных в таблице. В настоящее время я просто использую первичный ключ (не комбинацию хэш / сортировка). Нет хорошего способа разделить их на полезные разделы для чтения, потому что в первую очередь клиенты будут сначала извлекать всю базу данных, а затем просто извлекать те элементы, которые были обновлены. Кроме того, я хотел бы возвращать результаты в разбивке на страницы, используя метод смещения / предела.

Мне интересно, какой лучший способ сделать это. Пример элемента, который я сохранил в таблице, выглядит следующим образом (id — первичный ключ):

 {
        "id": 11299,
        "name": "plugin1",
        "attributes": {
            "plugin_version": "1.30",
            "exploit_available": false,
            "in_the_news": false,
            "exploited_by_malware": false,
            "exploited_by_nessus": false,
            "risk_factor": "Medium",
            "plugin_type": "remote",
            "exploitability_ease": "No known exploits are available",
            "plugin_publication_date": "2003-03-01T00:00:00Z",
            "plugin_modification_date": "2018-07-16T00:00:00Z",
            "vuln_publication_date": "2003-01-23T00:00:00Z"
            "cvss_temporal_vector": {
                "raw": "E:U/RL:OF/RC:C",
                "ReportConfidence": "Confirmed",
                "Exploitability": "Unproven",
                "RemediationLevel": "Official-fix"
            }
        }
    }
  

Мне также нужно включить фильтрацию plugin_modification_date , поэтому не уверен, было бы полезно сделать это ключом сортировки. Что расстраивало при исследовании этого до сих пор, так это то, что все, похоже, каким-то образом полагается на использование ключа раздела, где это в принципе бесполезно, когда у вас есть отдельный первичный ключ, который уникален для всех элементов.

Комментарии:

1. DynamoDB не очень подходит для разбивки на страницы со смещением / лимитом, потому что либо вам нужно присвоить элементам уникальные порядковые номера (и сохранять номера по мере добавления и удаления элементов), либо вам нужно прочитать элементы 0 .. N-1, просто чтобы узнать, какой элемент является N-м элементом. Кроме того, не гарантируется согласованность порядка сканирования между вызовами.