自动卸载 dynamo table 到云搜索域
Automatically offload dynamo table to cloud search domain
我正在大量使用 Dynamo DB 来构建我正在构建的服务。一个新的客户请求进来了,需要云搜索。我看到可以通过 AWS 控制台从 dynamo table 创建云搜索域。
我的问题是:
Is there a way to automatically offload data from a dynamo table into a cloud search domain via the API or otherwise at a specified
time interval?
比起手动将 dynamo 文档卸载到 cloudsearch,我更喜欢这个。非常感谢所有帮助!
这里有两个想法。
使用 CloudSearch 搜索 DynamoDB 数据的 AWS 官方方式
http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-dynamodb-data.html 的 "Synchronizing a Search Domain with a DynamoDB Table" 部分对这种方法进行了非常详尽的描述。
缺点是这听起来很痛苦:您必须重新创建新的搜索域或维护更新 table 才能同步,并且您需要一个 cron 作业或其他东西执行脚本。
AWS Lambdas 方式
使用新的 Lambdas 事件处理服务。基于 Dynamo 设置事件流非常简单(参见 http://docs.aws.amazon.com/lambda/latest/dg/wt-ddb.html)。
然后,您的 Lambda 会根据 Dynamo 事件向 CloudSearch 提交搜索文档。有关从 Lambda 提交文档的示例,请参阅 https://gist.github.com/fzakaria/4f93a8dbf483695fb7d5
我认为这种方法要好得多,因为它会在您不参与的情况下不断更新您的搜索索引。
我不太清楚 Lambda 如何始终使数据与 dynamoDB 中的数据保持同步。考虑以下流程:
- 应用程序更新 DynamoDB table 的记录 A(比如 A1)
- 紧接着,应用程序更新相同 table 的相同记录 A(到 A2)
- 1 的触发器导致 1 的 Lambda 开始执行
- 2 的触发器导致 2 的 Lambda 开始执行
- 第 4 步先完成,因此 CloudSearch 看到 A2
- 现在第 3 步完成,因此 CloudSearch 看到 A1
Lambda 触发器不保证仅在上一次调用完成后启动(如有错误请更正,并提供给我 link)
如我们所见,事情不同步了。
我认为最接近的方法是使用 AWS Kinesis Streams,但那些也使用单个碎片(1MB ps 限制摄取)。如果该限制有效,则可以编写您的消费者应用程序,以便首先按顺序处理记录,即只有在前一条记录放入 CS 之后,才应放入下一条记录。
我正在大量使用 Dynamo DB 来构建我正在构建的服务。一个新的客户请求进来了,需要云搜索。我看到可以通过 AWS 控制台从 dynamo table 创建云搜索域。
我的问题是:
Is there a way to automatically offload data from a dynamo table into a cloud search domain via the API or otherwise at a specified time interval?
比起手动将 dynamo 文档卸载到 cloudsearch,我更喜欢这个。非常感谢所有帮助!
这里有两个想法。
使用 CloudSearch 搜索 DynamoDB 数据的 AWS 官方方式
http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-dynamodb-data.html 的 "Synchronizing a Search Domain with a DynamoDB Table" 部分对这种方法进行了非常详尽的描述。
缺点是这听起来很痛苦:您必须重新创建新的搜索域或维护更新 table 才能同步,并且您需要一个 cron 作业或其他东西执行脚本。
AWS Lambdas 方式
使用新的 Lambdas 事件处理服务。基于 Dynamo 设置事件流非常简单(参见 http://docs.aws.amazon.com/lambda/latest/dg/wt-ddb.html)。
然后,您的 Lambda 会根据 Dynamo 事件向 CloudSearch 提交搜索文档。有关从 Lambda 提交文档的示例,请参阅 https://gist.github.com/fzakaria/4f93a8dbf483695fb7d5
我认为这种方法要好得多,因为它会在您不参与的情况下不断更新您的搜索索引。
我不太清楚 Lambda 如何始终使数据与 dynamoDB 中的数据保持同步。考虑以下流程:
- 应用程序更新 DynamoDB table 的记录 A(比如 A1)
- 紧接着,应用程序更新相同 table 的相同记录 A(到 A2)
- 1 的触发器导致 1 的 Lambda 开始执行
- 2 的触发器导致 2 的 Lambda 开始执行
- 第 4 步先完成,因此 CloudSearch 看到 A2
- 现在第 3 步完成,因此 CloudSearch 看到 A1
Lambda 触发器不保证仅在上一次调用完成后启动(如有错误请更正,并提供给我 link)
如我们所见,事情不同步了。
我认为最接近的方法是使用 AWS Kinesis Streams,但那些也使用单个碎片(1MB ps 限制摄取)。如果该限制有效,则可以编写您的消费者应用程序,以便首先按顺序处理记录,即只有在前一条记录放入 CS 之后,才应放入下一条记录。