我正在将持久层从Riak迁移到DynamoDB。我的数据模型包含一个可选的业务标识字段,希望能够作为替代键进行查询。
看起来DynamoDB辅助索引不能为null
并需要一个范围键,因此尽管与Riak的辅助索引名称相似,但这使其看起来完全不同。
除了将数据放入外部搜索索引之外,是否有一种优雅的方法可以高效地查询我的可选字段?
我正在将持久层从Riak迁移到DynamoDB。我的数据模型包含一个可选的业务标识字段,希望能够作为替代键进行查询。
看起来DynamoDB辅助索引不能为null
并需要一个范围键,因此尽管与Riak的辅助索引名称相似,但这使其看起来完全不同。
除了将数据放入外部搜索索引之外,是否有一种优雅的方法可以高效地查询我的可选字段?
|**Hash key**: Item ID | **Range Key**: Serial No | **Attribute**: Business ID |
--------------------------------------------------------------------------------
| 1 | 12345 | 1A |
--------------------------------------------------------------------------------
| 2 | 45678 | 2B |
--------------------------------------------------------------------------------
| 3 | 34567 | (empty) |
--------------------------------------------------------------------------------
| 3 | 12345 | 2B |
--------------------------------------------------------------------------------
Business ID
,您可以执行类似于“查找所有哈希键为3
且业务ID等于2B
的项目”的查询,但您无法执行“查找所有业务ID等于2B
的项目”的查询,因为辅助索引需要一个哈希键。2B
的项目,并获取项目2-45678
和3-12345
作为响应”这样的查询。使用LSI也可以实现相同的功能。 只需确保不向该属性写入任何数据。
在我的场景中,对于一个LSI,我写了一个空字符串(""),这是不允许的。我跳过了排序键的初始化,它运行得很好。
基本上,DynamoDB甚至不会为该行创建该属性。
下面解释了行为的详细信息