Google bigquery 从BigQuery结果中获得类似OLTP的性能
我正在从事一个项目,我们需要在web应用程序中的表中显示BigQuery结果 我们通过直接在BigQuery中分页、排序和搜索构建了该功能,但性能并不是现代web应用程序所期望的。应用搜索词或更改页面需要几秒钟的时间 我不能分享太多的代码,但这是一个应用BigQuery中生成的任何大型结果集的一般问题 为了一点背景。我们通过将产品目录连接到订单,在BigQuery中创建一个视图Google bigquery 从BigQuery结果中获得类似OLTP的性能,google-bigquery,Google Bigquery,我正在从事一个项目,我们需要在web应用程序中的表中显示BigQuery结果 我们通过直接在BigQuery中分页、排序和搜索构建了该功能,但性能并不是现代web应用程序所期望的。应用搜索词或更改页面需要几秒钟的时间 我不能分享太多的代码,但这是一个应用BigQuery中生成的任何大型结果集的一般问题 为了一点背景。我们通过将产品目录连接到订单,在BigQuery中创建一个视图 WITH Catalog AS ( SELECT productId, FROM `CatalogT
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数据库上(或接近性能),那么有哪些选项可以使其执行相同的操作
我考虑过集群,但我不认为这是一个选项,因为我没有对表进行分区:
注意事项:
如果将结果流式传输到另一个数据库是一种选择,那么结果稍微延迟是可以接受的
查询通过WebApi端点调用,并显示在角度栅格视图中
新订单每15分钟导入一次,因此此查询的结果不会完全是静态的,它们可以定期更改
数据网格必须支持分页、排序和搜索,网格可以包含10000多个结果。
BigQuery
如果您期望OLTP行为或性能,则不应使用。
在您的情况下,如果您希望将您的项目保持在GCP
上,并使您的数据模型尽可能与您已有的模型相似,我建议您查看并修改
两者都是完全管理的关系数据库。主要区别在于Cloud-panner
是水平可伸缩的,而Cloud-SQL
不是,即如果您只需要一个节点,请使用Cloud-SQL
。如果您需要扩展集群,请使用云扳手
此外,它们都有各自的Web API。您可以找到Cloud Paner Web API参考。对于云SQL,引用取决于您选择的DBMS:,或
我希望这会有所帮助您能更好地说明您的数据如何、执行何种查询以及您的体系结构如何?我同意rmesteves的观点,我们需要更多关于您的问题的上下文,您能发送到目前为止您尝试过的查询和虚拟/示例代码吗?谢谢,我添加了更多细节,但我认为这回答了我的问题:也许还有其他选择?事实上,如果您期望OLTP行为,就不应该使用BigQuery。如果你想使用GCP,我建议你看看cloudsql和Cloud扳手,你可以在这里看到,也许还有其他的选择?网络客户端的计算能力如何?例如,网络客户主要是现代笔记本电脑还是智能手机/旧平板电脑?如果是前者,那么有一种方法可以避免添加另一个数据库作为缓存层。