2017-05-20 48 views
0

我有一个DynamoDB数据库,其中包含大约100.000个项目。 这些项目大多是一个平面,但它们确实包含一个类别列表。NoSql和按列表查询

{ 
    "name": "Protine shaker", 
    "categories": [ 
    "Sport", 
    "Kitchen" 
    ]; 
} 

我希望能够找到的所有项目,对于一个例子是类“运动”中的一员,但因为它是一个列表我不能索引它。 因此,我唯一的选择是使用纯DyanmoDB解决方案来扫描整个表格,如果经常这样做,这可能会很昂贵。

我在哪里想到除了包含类别映射的DynamoDB之外,我可以拥有一个SQL数据库,或者让另一个DynamoDB与包含该类别中的项目列表的每个类别的对象相联系。

使用DynamoDB时,这种问题的常见解决方案是什么?我猜测这一定是一个普遍的问题。

回答

1

您可以将DynamoDB与ElasticSearch集成,以提供更多选项来查询DynamoDB不支持的数据。只需在ElasticSearch中创建索引并在那里执行查询。

从何处着手:https://aws.amazon.com/about-aws/whats-new/2015/08/amazon-dynamodb-elasticsearch-integration/

有一个SQL数据库是不是一个很好的解决方案,因为你必须自己保持同步,在两个不同的数据存储信息。看起来像维修的手术痛苦。

每个类别有多个DynamoDB表是不可扩展的,甚至在这里您可能需要在“事务”中更新多个DynamoDB表,但这可能会带来性能下降,或者您可能会根据AWS lambda表达式写入相关类别表DynamoDB更新流。但为了可扩展性,最好避免这种情况。每次引入新类别时,您都必须创建一个新表。