问题描述
我想收到一些有关概念性问题的意见,以便对GCS存储桶中存储的平面文件(主要是JSON)进行自由文本搜索。在纸面上,这听起来像是一个简单的问题,Amazon提供了开箱即用的Amazon CloudSearch之类的解决方案来为S3文件建立索引。但是,我还没有遇到谷歌提供的类似解决方案。这些是解决此问题的一些替代解决方案:
- Google Cloud Search -从表面上看,这似乎与Google Search Appliance类似,但在云中。但是,该产品似乎更多地与G Suite / Google Workspace应用程序集成。 Google Workspace Enterprise Plus版本确实提供了第三方数据存储库集成(尽管Google Cloud Storage是Google产品,它还是第三方数据源),但这对我来说太昂贵了。我尚未了解为什么Google Cloud Platform中没有列出具有相同功能的类似产品。
- Google App Engine Search API -似乎已被废除,不再建议使用 。但是,采用这种解决方案将意味着在现有数据存储成本的基础上拥有并支付额外的数据存储+计算费用。
- GCP Dataproc Solr -Solr可能是解决我的问题的最佳解决方案之一-但是,此解决方案在很大程度上依赖于管理我们这一端的基础架构。此外,索引可以存储在GCS存储桶中,并从存储中分离计算(我可能错了)。随着时间的推移,Dataproc管理的集群确实变得昂贵,并且根据我的知识,它们无法扩展到0计算。
- GCP托管的ElasticSearch -使用ElasticSearch进行类似于自由文本搜索的简单操作,就好像用炮弹杀死苍蝇以获取自由文本搜索用例一样。但是,我很担心,因为ElasticSearch并未在他们的pricing model中将Google Cloud Storage列为数据源,而且我不确定是否可以直接使用免费文本搜索功能。
以我最宝贵的资源为时间,哪种方法最适合构建此功能?如果有人可以提供一些有价值的见解或替代方案,我将不胜感激。预先感谢。
解决方法
我想为您的列表添加一个额外的解决方案。您概述的大多数解决方案要么基于需要配置的基础架构,要么需要编码的自定义导入过程,因此需要大量额外的工作。
Google提供了另一种解决方案来查询Google Cloud Storage中的文件。这可以使用Bigquery查询功能来完成。为了能够在Bigquery中查询数据,您需要在Bigquery中创建一个表,并使用Cloud Storage URI从GCS导入数据。但是,此过程中有一些注意事项/限制。我将在下面概述其中的一些注意事项。
创建BigQuery数据集和外部数据源
Google Cloud Storage存储桶必须与Bigquery数据集位于同一位置。阅读此documentation以获得完整的规范。
可接受的文件格式
- 逗号分隔值(CSV)
- JSON(以换行符分隔)
- Avro
- ORC
- 实木复合地板
- 数据存储导出
- Firestore出口
永久外部表与临时外部表
选择正确的Bigquery表取决于用例。使用临时表对于对外部数据的一次性临时查询或提取,转换和加载(ETL)流程很有用。如果要与其他人共享数据集,则必须使用外部表。
查询多个文件
使用通配符支持可以查询多个文件。这样,您可以在单个GCS存储桶中指定多个文件。但是,在Bigquery中导入数据存储或Firestore导出时,不能使用通配符。
费用
自由文本搜索可能会带来额外的费用,因为每次执行查询时,您基本上都是在进行全表扫描。请记住,您要为搜索到的每TB数据付费!另一方面,从GCS加载数据是免费的。
总体信息here。