I'm using Dynamo DB pretty heavily for a service I'm building. A new client request has come in that requires cloud search. I see that a cloud search domain can be created from a dynamo table via the AWS console.
My question is this:
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?
I'd prefer this to manually offloading dynamo documents to cloudsearch. All help greatly appreciated!
答案 0 :(得分:9)
这是两个想法。
使用CloudSearch搜索DynamoDB数据的官方AWS方式
这种方法在"使用DynamoDB表同步搜索域" http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-dynamodb-data.html的一部分。
缺点是它听起来很痛苦:你必须重新创建新的搜索域或维护更新表才能进行同步,并且你需要一个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
我认为这种方法更好,因为它会在没有您参与的情况下不断更新您的搜索索引。
答案 1 :(得分:1)
我不太清楚Lambda如何始终保持数据与dynamoDB中的数据同步。请考虑以下流程:
Lambda触发器不保证仅在上一次调用完成后启动(如果错误则更正,并提供链接)
我们可以看到,事情不同步。
我能想到的最接近的是使用AWS Kinesis Streams,但是那些也只有一个Shard(1MB ps限制摄取)。如果该限制有效,则可以编写您的消费者应用程序,使得记录首先按顺序处理,即,只有在将先前记录放入CS后,才应放入下一条记录。