【问题标题】:Getting OLTP like performance from BigQuery results从 BigQuery 结果中获得类似 OLTP 的性能
【发布时间】:2020-01-13 19:21:14
【问题描述】:

我正在开展一个项目,我们需要在 Web 应用程序的表格中显示 BigQuery 结果。

我们通过直接在 BigQuery 中进行分页、排序和搜索来构建该功能,但性能并不是您对现代网络应用程序的期望。应用搜索词或更改页面需要几秒钟。

我无法真正分享太多代码,但这是一个适用于 BigQuery 中生成的任何大型结果集的一般问题。

为了一点上下文。我们通过将产品目录加入订单来在 BigQuery 中创建一个视图。

WITH Catalog AS
(
  SELECT 
    productId,
  FROM `CatalogTable`
),
Orders AS (
  SELECT 
    p.productId,
    SUM(p.qty) AS qty 
  FROM `OrdersView` as o, o.products AS p 
  GROUP BY p.productId
)
SELECT
  c.productId,
  IF(o.qty IS NULL, 0, o.qty) AS qty,
  ROW_NUMBER() OVER(ORDER BY qty DESC) as salesRank 
FROM Catalog AS c
LEFT JOIN
 Orders AS o
 ON CONCAT(c.name, c.sku) = CONCAT(o.name, o.sku)

视图是这样查询的:

SELECT ...
FROM   `catalog` c
LEFT JOIN `catalogView` cv
WHERE  c.name LIKE '%searchTerm%'
LIMIT  10
OFFSET 0

有哪些选项可以使此网格视图的性能与在传统 SQL 数据库上构建时一样(或接近性能)?

我考虑过集群,但我不认为这是一个选项,因为我没有对表进行分区:

https://medium.com/google-cloud/bigquery-optimized-cluster-your-tables-65e2f684594b

注意事项:

如果可以选择将结果流式传输到另一个数据库,则结果稍有延迟是可以接受的。

查询通过 WebApi 端点调用并显示在 Angular 网格视图中。

新订单每 15 分钟导入一次,因此此查询的结果不会完全是静态的,它们可以定期更改。

数据网格必须支持分页、排序和搜索,并且网格可以包含 10,000 多个结果。

【问题讨论】:

  • 您能否更好地说明您的数据如何,您执行什么样的查询以及您的架构如何??
  • 我同意 rmesteves,我们需要更多关于您的问题的背景信息,能否请您发送到目前为止您尝试过哪些查询和虚拟/示例代码。
  • 谢谢,我添加了更多细节,但我认为这回答了我的问题:stackoverflow.com/questions/36228532/… 也许还有其他选择?
  • 事实上,如果您期望 OLTP 行为,则不应使用 BigQuery。如果你想使用 GCP,我建议你看看 Cloud SQL 和 Cloud Spanner,你可以在这里看到 cloud.google.com/sqlcloud.google.com/spanner
  • 也许还有其他选择? 网络客户端的计算能力如何?例如。网络客户端主要是现代笔记本电脑还是智能手机/旧平板电脑?如果是前者,那么可能有一种方法可以避免添加另一个数据库作为缓存层。

标签: google-bigquery


【解决方案1】:

如果您期望 OLTP 行为或性能,则不应使用BigQuery。 在您的情况下,如果您想将您的项目保留在GCP 上,并且还希望您的数据模型与您已有的模型尽可能相似,我建议您查看Cloud SQLCloud Spanner

两者都是完全托管的关系数据库。主要区别在于Cloud Spanner 是水平可扩展的,而Cloud SQL 不是,即如果您只需要一个节点,请使用Cloud SQL。如果您需要扩大集群,请使用Cloud Spanner

此外,它们都有各自的 Web API。您可以找到 Cloud Spanner Web API 参考 here。对于 Cloud SQL,参考取决于您选择的 DBMS:SQLServerMySQLPostgreSQL

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 2021-06-17
    • 2021-12-31
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多