Automatically offload dynamo table to cloud search domain

时间:2015-05-12 23:08:13

标签: amazon-web-services amazon-dynamodb amazon-cloudsearch

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!

2 个答案:

答案 0 :(得分:9)

这是两个想法。

  1. 使用CloudSearch搜索DynamoDB数据的官方AWS方式

    这种方法在"使用DynamoDB表同步搜索域" http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-dynamodb-data.html的一部分。

    缺点是它听起来很痛苦:你必须重新创建新的搜索域或维护更新表才能进行同步,并且你需要一个cron作业或其他东西来执行脚本

  2. 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中的数据同步。请考虑以下流程:

  1. 应用程序更新DynamoDB表的记录A(比如A1)
  2. 在该应用程序更新同一个表的相同记录A(到A2)
  3. 之后非常接近
  4. 触发1会导致Lambda为1开始执行
  5. 触发2导致Lambda of 2开始执行
  6. 第一步完成,因此CloudSearch会看到A2
  7. 现在步骤3完成,因此CloudSearch看到A1
  8. Lambda触发器不保证仅在上一次调用完成后启动(如果错误则更正,并提供链接)

    我们可以看到,事情不同步。

    我能想到的最接近的是使用AWS Kinesis Streams,但是那些也只有一个Shard(1MB ps限制摄取)。如果该限制有效,则可以编写您的消费者应用程序,使得记录首先按顺序处理,即,只有在将先前记录放入CS后,才应放入下一条记录。