在DynamoDB中搜索数据或使用搜索服务

时间:2019-03-02 02:36:14

标签: elasticsearch solr amazon-dynamodb

我想知道尝试搜索数据的利弊(基本上是在有限的一组字段上进行全文搜索)。

我的数据当前在DynamoDB中,我意识到这不太适合全文搜索。是否可以在DynamoDB中进行全文搜索?这样做的利弊是什么?

我还可以使用搜索集群(例如ElasticSearch)。有什么理由不支持搜索集群?

还有其他方法可以进行全文搜索吗?其他解决方案?

2 个答案:

答案 0 :(得分:2)

Dynamodb最适合键值插入和检索。

如果您尝试以O(n)的某种条件进行扫描,则它不支持搜索功能,而且由于您要消耗大量读取容量,因此它将非常昂贵。

现在进入选项

  1. 如果用例不是全文本搜索,而仅是键值匹配,则可以尝试提出composites key,但是它会有类似的缺点

    a。此后无法更改架构,如果需要在新字段中进行搜索,则可能需要大量的精力。

    b。考虑到很少有密钥总是很热,并且可能导致热分区,因此设计此类密钥非常棘手。

  2. 理想的解决方案是使用弹性搜索或Solr索引。您可以具有一个lambda函数来监听dynamodb流,进行转换并将数据放入elasticsearch中。但是它会有类似的限制

    a。 Elasticsearch群集为costly

答案 1 :(得分:-1)

查询DynamoDB时,如果不对分区键和排序键指定约束,则几乎是扫描整个分区或整个表。这是昂贵的。通过使用该字段作为排序键,您仍然可以在1个字段上实现前缀扫描。您无法优化查询,也无法进一步节省费用。

要执行全文搜索,您确实需要标记文本字段并使用这些标记构建反向索引。 Elasticsearch就是这样做的。

名为Rockset的服务可以拖尾DynamoDB表并在其上提供功能齐全的SQL。您可以使用SQL LIKEREGEXP_LIKE进行基本的文本搜索。但是,除非进行前缀扫描,否则仍将扫描该字段的整个反向索引。 Rockset支持标记文本字段以有效执行全文搜索。

此博客讨论如何使用Rockset通过SQL查询DynamoDB表中的数据: https://rockset.com/blog/running-fast-sql-on-dynamodb-tables/

此外,Rockset支持的文本搜索功能列表: https://docs.rockset.com/text-search-functions/

全面披露:我在Rockset的工程团队工作。