Jyo*_*ony 2 java amazon-dynamodb
我想dynamoDB通过使用来获取特定项目table.getItem(xxx),并且在获取项目时需要应用一些过滤器。
select * from emp where empid=1 and isadmin=true;
如何在 dynamo-db 中编写上述查询。
下面是我尝试过的示例代码:
GetItemSpec spec = new GetItemSpec()
.withPrimaryKey("empid", "1", "deptno", "12");
Item outcome = table.getItem(spec);
System.out.pritnln("outcome "+outcome);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我想再应用一个过滤器,例如“isAdminU=true”,请给我一些在 getItem(....) 中添加过滤器的建议。
笔记:
我可以通过使用 table.query(spec) 来解决我的使用问题,但是此方法返回集合,我每次都必须解析并获取第一个项目,这在我的情况下是不需要的。
正如您所注意到的,DynamoDB 的GetItem操作不接受过滤器。如果存在,它总是返回单个项目,因此通常不需要进行此类过滤。但是,如果您确实想要这样的过滤 - 例如,您的项目很大,如果它们没有通过您的过滤器,您不想浪费网络带宽来发送它们 - 正如您自己建议的那样,您可以使用Query.
是的,Query的响应格式与 略有不同GetItem,但任何语言的任何 DynamoDB 库都使得获取响应中的第一个(也是唯一一个)项目变得微不足道。如果您担心可能会获得比第一项更多的项目,您可以随时进行设置,Limit=1但如果您的关键条件确保只有一个项目匹配,则没有必要这样做。
您应该知道,无论您是GetItem在客户端执行无条件过滤还是Query在服务器端执行过滤,在这两种情况下,读取成本都将相同,因为在这两种情况下都会从磁盘读取整个项目。唯一的(很小的)差异可能在于网络带宽成本,并且只有当项目很大时,这才变得相关。
| 归档时间: |
|
| 查看次数: |
6421 次 |
| 最近记录: |