gpt4 book ai didi

java - 在具有大数据的 DynamoDB 中查询空值或 null 值

转载 作者:行者123 更新时间:2023-11-30 06:18:25 25 4
gpt4 key购买 nike

我必须从类似于我在下面提供的表中获取项目,其中结果和准确性不存在或为空。该表包含大量数据,并且每天都在增长。我尝试使用扫描从发电机数据库中获取项目。但要显示结果还需要很长时间。谁能建议我如何运行查询或扫描以更快地提供结果?

Dynamo DB 表(示例):

|ID(primary)|date(String)|Result(number)|Accuracy(Number)|
| edfca | 20180101 | 12 | 59.99 |
| yrdfa | 20180109 | 72 | 91.49 |
| arfead | 20180101 | 122 | 32.12 |
| readssda | 20180112 | | |
| geeddar | 20180123 | 3 | 81.11 |
| rogeasa | 20180203 | | |
| swiwads | 20180205 | 32 | 13.12 |

目前,我正在使用以下内容

java:

ScanSpec scanSpec = new ScanSpec();
scanSpec.withFilterExpression("attribute_not_exists(accuracy)");
scanSpec.setMaxResultSize(100);
table.scan(scanSpec);

上面的扫描操作非常慢。

我是 dynamo DB 的新手,我用 google 搜索了一下,发现使用查询比使用扫描操作更好。

我可以使用查询操作来获取我需要的数据吗?如果是,请提供示例

最佳答案

当您执行查询时,您必须指定分区键。给定您的表,假设您没有定义任何二级索引,您只能查询一个分区键。没用。

如果你真的想提高性能,我可以想象一个解决方案。当您在表中写入项目时,定义一个列 hasNull: string(例如),并将其设置为 'y',以表示满足条件的所有行。对于所有其他项目,让它未定义。

稍后,定义一个名为 MY_GSI_NAME 的全局二级索引:

  • 分区键:hasNull
  • 排序键:ID
  • 投影类型 (?):KEYS_ONLY(或 ALL,请参阅 dynamodb 文档)

在node.js中,您可以使用以下方式查询您的表:

const params = {
TableName: 'MY_TABLE_NAME',
IndexName: 'MY_GSI_NAME',
KeyConditionExpression: '#pk = :pk',
ExpressionAttributeNames: {
'#pk': 'hasNull',
},
ExpressionAttributeValues: {
':pk': 'y',
},
};

return MY_DOCUMENT_CLIENT.query(params).promise();

这样做,您将获得所有带有 hasNull === 'y' 的项目。

该查询的优点是,由于索引稀疏,因此仅扫描您感兴趣的项目(您不需要的项目缺少 hasNull)。

希望这能为您提供解决问题的起点。多问才能了解更多:)

好机会!

关于java - 在具有大数据的 DynamoDB 中查询空值或 null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com