【发布时间】:2017-06-09 14:27:50
【问题描述】:
我将运行一个应用程序,它的表很少,但一个表大约 30-50K,另一个将是 20-25M 行,我需要做一些查询,使用多个列上的一些 LIKE 子句以及列上的其他限定符。
数据会每月刷新一次,因此只会读取,不会写入或更新。
事实证明,Google bigQuery 在连接与“like”搜索和“order by”相结合时表现不佳,所以我很恐慌。像这样的搜索实际上会引发资源错误或需要数百秒才能执行:
SELECT
s.site as site,
s.rank as rank,
s.visitors as visitors,
s.store_id as store_id,
s.currency as currency,
p.title as title,
p.product_type as product_type,
p.handle as handle,
p.price as price,
p.created_at as created_at,
p.image_url as image_url,
p.description as description
FROM eComData.stores s INNER JOIN eComData.products p
ON s.store_id = p.store_id
WHERE (
title like '%foo%'
OR
product_type like '%foo%'
OR
description like '%foo%'
)
ORDER BY rank
LIMIT 1000 OFFSET 0
您会建议哪种云解决方案可以处理大型数据集,更重要的是,查询速度?
我的选择是 1) 优化 Google bigQuery 运行速度更快(看起来不太好) 2) 谷歌数据存储 3) 亚马逊极光 4) 亚马逊 DynamoDB
我想听听您对上述任何解决方案的体验,并期待您的建议。谢谢!
【问题讨论】:
-
您使用的是标准 SQL 吗?旧版 SQL 不会自动通过连接推送过滤器。
-
嗯,您发现了哪些研究和具体问题?由于您包含了数据存储,因此您似乎还没有进行太多研究,这使您的问题过于广泛。也就是说,看看谷歌云扳手。
-
@ZigMandel,对不起,如果我的问题看起来很宽泛——我是一个做 php 和 mySQL 的前端人员,所以我对大数据非常陌生。在查看了 DataStore 之后,我发现没有办法执行连接,所以肯定不行。
-
@ElliottBrossard,我未选中 Legacy SQL(哎呀!),这似乎已经修复了荒谬的查询时间 - 不知道为什么 bigQuery 只是对此抛出警告或错误。我曾考虑将表合并到一个超级表中,因此我不需要执行连接,但是调用没有 ORDER 和 WHERE 子句的 SQL 来写入表似乎也不起作用 - 对此选项开放当然!
-
“调用没有 ORDER 和 WHERE 子句的 SQL 来写入表似乎也不起作用”是什么意思?
标签: mysql google-app-engine google-cloud-datastore google-bigquery amazon-dynamodb