Оптимизация фильтров временного диапазона в Amazon QLDB - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над бухгалтерской книгой с таблицей Транзакции . Каждая запись имеет transaction_id, account_id, timestamp и другие метаданные. Мне нужно запросить все транзакции для данного account_id с оператором между timestamp

. Мой запланированный подход заключался в создании индекса для account_id, transaction_id и timestamp. Однако я заметил ограничение на неравенства и индексы из AWS Документация , и я планировал применить это к timestamp

. Производительность запросов улучшается только при использовании предикат равенства; например fieldName = 123456789.

QLDB в настоящее время не учитывает неравенства в предикатах запросов. Одним из следствий этого является то, что сканирование с фильтром по диапазону не реализовано.

...

Предупреждение

QLDB требуется индекс для эффективного поиска документ. Без индексированного поля в предложении предиката WHERE QLDB необходимо сканировать таблицу при чтении документов. Это может вызвать большую задержку запросов, а также может привести к большему количеству конфликтов параллелизма. time.

Текущий запрос:

SELECT * 
FROM Transactions 
WHERE "account_id" = 'test_account' and "timestamp" BETWEEN `2020-07-05T00:00Z` AND `2020-07-12T00:00Z`

Я знаю, что можно передавать данные в базу данных, более подходящую для этого запроса, например, Dynamodb, но я хотел бы знать, Проблемы производительности при выполнении вышеуказанного запроса допустимы, и если да, то каковы рекомендуемые индексы и запросы, чтобы гарантировать масштабирование и не привести к сканированию всех транзакций для данного account_id?

1 Ответ

0 голосов
/ 10 июля 2020

Спасибо за ваш вопрос (хорошо написанный и исследованный)!

QLDB, на момент написания, не поддерживает индексы диапазонов. Итак, краткий ответ - «вы не можете».

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

Почти все варианты использования, с которыми я столкнулся до сих пор, - это последний вариант (создание отчетов), и его гораздо лучше обслужить путем репликации данных в нечто вроде ElasticSearch или Redshift. Как правило, это можно сделать с помощью пары строк кода в лямбда-функции, и стоимость очень мала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...