首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dynamodb表上的过滤器

dynamodb表上的过滤器
EN

Stack Overflow用户
提问于 2015-05-20 12:06:39
回答 1查看 1.7K关注 0票数 1

我有一张桌子,上面写着位置和下面的结构

|Location(Hashkey-String)|TimeStamp(Range-Numeric)|#visiting_Person|

现在我想让所有来访的人在两个时间戳之间

代码语言:javascript
复制
Table myTable= Table.LoadTable(client, "tableName");
QueryFilter filter = new QueryFilter();
filter.AddCondition("TimeStamp", QueryOperator.GreaterThan, 56545454);
Search search = myTable.Query(filter);

但它会造成错误-

查询条件丢失模式项目:位置

由于错误,我似乎必须在过滤器中添加位置(因为它是散列键),但是我不必对特定位置进行筛选,我必须在时间戳内得到任何位置。

我尝试将时间戳设置为hashkey,但我发现我们只能在hashkey上应用相等的运算符。

在以其他方式进行调试和更改时,我遇到了其他错误,即不能应用键条件。

--我也能对扫描做同样的事情,但由于性能原因,我必须使用查询.

请告诉我如何才能达到我想要的输出。

EN

回答 1

Stack Overflow用户

发布于 2015-05-20 22:20:09

查询需要表的主键,因此没有一种方法只对范围键进行查询。

基本上,由于基于散列键和查询的DynamoDB分区在分区内运行,您需要这样做:

  1. 跨散列键扫描(并行扫描可以提高性能)
  2. 结构可用于查询的散列键。例如,如果范围是非任意的,您可以通过创建一个属性来提高性能,方法是根据较少的粒度时间创建一个属性,并在其上构建一个GSI:
代码语言:javascript
复制
- Suppose the maximum range between the 2 timestamps is 1 day, you could:
- make an attribute (say "TimeStampDate") that is at date level granularity rather than date+time timestamp granularity.
- make a GSI with TimeStampDate as the Hash key
- execute parallel queries on the dates that overlap the queried time range: "TimeStampDate=[start timestamp date] AND TimeStamp BETWEEN [start timestamp / end timestamp]", "TimeStampDate=[start timestamp date + 1 day] AND TimeStamp BETWEEN [start timestamp / end timestamp]", etc.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30349195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档