Cloud Spanner - производительность чтения с большим количеством элементов в предложении WHERE - PullRequest
1 голос
/ 29 июня 2019

Я нахожусь в процессе оценки некоторых различных хранилищ данных для проекта, и у меня есть странное, но негибкое требование проверять наличие 1500 ключей на запрос ... В основном, единственный запрос, который я буду выполнять, это форма:

SELECT user_id, name, gender
WHERE user_id in (user1, user2, ..., user1500)

У меня будет около 3,5 миллиардов строк в таблице. Одно хранилище данных, которое попалось на глаза, это Spanner Мне было интересно, будет ли осуществлен такой запрос данных или возникнут проблемы с производительностью из-за большого количества элементов в моем предложении WHERE. До сих пор мне удавалось тестировать эти запросы только на небольшом количестве данных, поэтому я больше полагаюсь на то, как может выглядеть теоретический удар по производительности, вместо того, чтобы позволить себе роскошь просто «попробовать и выяснить».

Кроме того, есть ли другие хранилища данных, которые могли бы работать лучше для этого шаблона чтения? Я ожидал выполнить не более 80 запросов в секунду. Кроме того, данные будут загружаться еженедельно. Данные структурированы по своей природе, но мы не используем их реляционным способом (т.е. без объединений).

В любом случае, извините, если этот вопрос каким-либо образом неясен. Я рад предоставить более подробную информацию, если это необходимо.

1 Ответ

4 голосов
/ 29 июня 2019

1500 ключей не должно быть проблемой, если вы используете параметр связанного массива для указания ключей:

SELECT user_id, name, gender
FROM table
WHERE user_id in UNNEST(@users)

https://cloud.google.com/spanner/docs/sql-best-practices#write_efficient_queries_for_range_key_lookup

...