【问题标题】:Cloud Spanner - read performance with large number of items in WHERE clauseCloud Spanner - WHERE 子句中包含大量项目的读取性能
【发布时间】:2019-11-10 20:15:40
【问题描述】:

我正在为一个项目评估一些不同的数据存储,我有一个奇怪但不灵活的要求来检查每个查询是否存在 1500 个键...基本上我将运行的唯一查询是形式:

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

表中将有大约 35 亿行。一个引起我注意的数据存储是 Spanner。我想知道以这种方式查询数据是否可行,或者我是否会因为WHERE 子句中的大量项目而遇到性能问题。到目前为止,我只能在少量数据上测试这些查询,所以我更倾向于理论上的性能影响,而不是“尝试并发现”。

此外,还有其他数据存储可能更适合这种读取模式吗?我预计每秒运行不超过 80 个查询。此外,数据将每周批量加载。数据本质上是结构化的,但我们不以关系方式使用它(即没有连接)。

无论如何,如果这个问题有任何含糊之处,请见谅。如果需要,我很乐意提供更多详细信息。

【问题讨论】:

    标签: google-cloud-platform google-cloud-spanner


    【解决方案1】:

    如果使用绑定数组参数来指定键,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

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      相关资源
      最近更新 更多