在 dynamodb 中执行全列查询的最佳方法是什么?
What's the best way to do an all-column query in dynamodb?
在那里,我们得到了一个带有一堆列的 dynamodb table,例如堆栈 ID、电子邮件、名字、姓氏等,而堆栈 ID 是哈希键,电子邮件是 GSI。相当标准的东西。
现在我们正在为我们的网站添加一个自由格式搜索功能,用户可以在搜索栏中搜索任何内容,比如 'foobar',然后我们将在所有记录中搜索该字符串所有列,如果在任何列中找到任何匹配项,则将其视为匹配项。这对 mysql 和喜欢的人来说很容易,但对 dynamodb 来说不是。
所以我想出了两种可能的方法来做到这一点:第一种是蛮力,我们将每一列都设为 GSI,然后进行多个查询,每个查询针对一个特定的列,然后我们聚合所有查询的结果。显然,这不是一个好主意。
第二种方法是通过将记录的所有列连接在一起来添加新列。然后该列包含所有其他列中的所有内容。然后我们将此列设为 GSI,并仅查询此列。这个方法好吗?
不知道有没有更好的方法可以实现?先谢谢了。
这不是 DynamoDB 的好用例。一个更好的选择是将数据推送到其他更适合您想要执行的搜索类型的东西,比如 ElasticSearch。 Indexing Amazon DynamoDB Content with Amazon Elasticsearch Service Using AWS Lambda 是一个很好的参考。
在那里,我们得到了一个带有一堆列的 dynamodb table,例如堆栈 ID、电子邮件、名字、姓氏等,而堆栈 ID 是哈希键,电子邮件是 GSI。相当标准的东西。
现在我们正在为我们的网站添加一个自由格式搜索功能,用户可以在搜索栏中搜索任何内容,比如 'foobar',然后我们将在所有记录中搜索该字符串所有列,如果在任何列中找到任何匹配项,则将其视为匹配项。这对 mysql 和喜欢的人来说很容易,但对 dynamodb 来说不是。
所以我想出了两种可能的方法来做到这一点:第一种是蛮力,我们将每一列都设为 GSI,然后进行多个查询,每个查询针对一个特定的列,然后我们聚合所有查询的结果。显然,这不是一个好主意。
第二种方法是通过将记录的所有列连接在一起来添加新列。然后该列包含所有其他列中的所有内容。然后我们将此列设为 GSI,并仅查询此列。这个方法好吗?
不知道有没有更好的方法可以实现?先谢谢了。
这不是 DynamoDB 的好用例。一个更好的选择是将数据推送到其他更适合您想要执行的搜索类型的东西,比如 ElasticSearch。 Indexing Amazon DynamoDB Content with Amazon Elasticsearch Service Using AWS Lambda 是一个很好的参考。