我正在为存储位置的表的DynamoDB模式设计而苦苦挣扎。该表将具有[userId、lastUpdateTime、locationGooglePlaceId、经度、纬度、hideOnUI(bool)]
其中一个主要查询是给定用户当前位置(x,y)作为GPS坐标,根据其经度和纬度查询附近的用户ID
问题是我如何为此目的设计索引?表本身可以有哈希键UserId、排序键lastUpdateTime;但GSI会怎么走?我似乎无法识别“equal”操作的任何分区键
在SQL中,它将类似于:
从表中选择*
我研究了使用JavaSDK存储日期和时间的DynamoDB选项。就我所见,Java8LocalDate和LocalDateTime需要自定义转换器,而对于旧的日期、日历和Joda time LocalDateTime则有一些注释
根据文档,@DynamoDBTypeConvertedTimestamp支持标准日期类型转换,例如java.util.Calendar,Long@DynamoDBTypeConvertedEpochDate可用于将日期、日历和org.joda.time.DateTime
我正在尝试备份我的DynamoDB表,它最初是在一年多前使用DynamoDBs新的“备份”功能创建的。但是,当我创建备份时,会收到以下错误消息:
Backups are being enabled for the table: prod-supercoolsoftware-stuff. Please
retry later (Service: AmazonDynamoDBv2; Status Code: 400; Error Code:
ContinuousBackupsUnavailable
我想进行更新,但我想添加的条件检查不是基于主表的哈希/范围,而是基于GSI
实际上,如果给定属性(即GSI的哈希)已经存在,我希望保存失败
例如,在一个虚构的employees表中,“SSN”是散列键,“EmployeeId”上有一个GSI。这两个属性都必须是唯一的。在保存员工时,我希望确保表中没有使用“SSN”或“EmployeeId”。我可以对表的散列(即SSN)执行此操作,但不能对GSI的散列执行此操作
支持吗?我在文件中没有看到这一点
谢谢 您描述的方法在使用DynamoDB时是不可能的
我有一个用户表,其中包括电子邮件、电话等,我想根据记录的电子邮件或电话值(而不是#Id)查询记录。由于没有足够的知识,我写了一个这样的模式:
type Query {
...
getUser(id: ID!): User
getUserByEmail(input: GetUserByEmailInput!): User
...
}
input GetUserByEmailInput {
email: String!
}
{
"data": {
AppSync doc说expressionNames和expressionValues是可选字段,但它们总是由代码生成填充。第一个问题,在使用DynamoDB时,是否应将其作为最佳实践包括在内?若然,原因为何
分区键查询的AppSync解析器:
{
"version": "2017-02-28",
"operation": "Query",
"query": {
"expression": "#partitionKey = :partitionKey",
我正在为我的一项服务使用dynamo db global tables,并根据一般建议为所有地区提供相同的RCU/WCU(RWCU)。我没有使用按需模式
我理解,WCU应该在各个地区保持一致,以允许写操作进行复制。然而,我的服务的读取流量在不同地区差异很大。所以我想知道是否可以为每个区域配置不同的RCU?文档中没有特别提到任何关于RCU的内容。在不同地区保留不同的RCU是安全的。典型的用例是主动-被动多区域体系结构
但是,如果从一个区域到另一个区域的故障切换是自动的,您应该确保被动区域能够处理
我正在构建一个DynamoDB表,并且遇到了如何最好地构造索引的问题。我需要执行3个查询
我的桌子:
AttributeDefinitions:
# This is large groups that can have many events
- AttributeName: groupId
AttributeType: S
# An event can have many actions
- AttributeName: eventId
AttributeTyp
我想要一个包含组合主键分区键和排序键的表中所有主排序键的列表。该表包含许多分区。您需要使用扫描,对结果进行排序并删除重复项
明智的做法是使用扫描的ProjectionExpression属性将响应仅限于分区和排序键。正如另一个答案所提到的,扫描将是表本身的唯一解决方案
这在一张大桌子上既不快也不便宜
P>如果你经常需要,考虑其他几个选项:
使用触发器Dynamo streams+lambda跟踪插入时的关键值
具有虚拟哈希键值和实际键的排序键的全局二级索引
如果您需要在数据更改时访问此数据,请
对于我的DynamoDB表,我目前有如下模式:
分区键-唯一ID,因此每个项都有一个完全唯一的ID
排序键-无
属性-包含一些值的JSON
现在,我想添加一个新字段,该字段将是每个项目所必需的,并将指示特定区域,例如NA-1、NA-2、JP-1等,我希望能够仅对该字段进行查询。例如,我可能希望对我的表执行查询,以检索区域NA-1的所有项
我的问题是,我是否应该将此字段设置为GSI?我是DynamoDB的新手,所以我一直在网上研究,当该字段可能只出现在表中的选定项目中时,使用GSI似乎是首选,但每
我一直在考虑查询未绑定数量项目的可能策略
例如,想象一个论坛——你可以有任意数量的论坛帖子按主题分类。您需要支持至少两种访问模式:帖子详细信息视图和按主题列出的帖子
// legend
PK = partition key, SK = sort key
虽然很容易获得一篇文章,但如果不进行扫描,就无法有效地查询文章列表
PK = postId
非常适合查询给定主题的所有帖子,但所有帖子都位于同一分区(“热分区”)
将物品储存在桶中,例如每天新的桶。这会将大量逻辑推送到应用层并增加延迟。例如,
默认情况下,扫描会从中返回每个项目的所有数据属性;但是,您可以使用ProjectionExpression参数,以便扫描只返回部分属性,而不是全部属性
我想知道是否有人知道在boto中使用ProjectionExpression参数的语法是什么
比如我有
leagueTable = Table('leagues', schema=[HashKey('leagueId', data_type=NUMBER)]
我想使用ProjectionExpression参数扫描表,只返回所选字段 根据处的文
我们在一些堆栈中使用DynamoDB,并在开发机器上使用Amazon的DynamoDB_本地实例。我最近升级到了一个新的Macbook,并且正确地设置了我的开发环境,但是我不确定如何移动看起来像任何东西的dynamodb_本地数据库文件,或者如何在新计算机上与我的新dynamodb_本地实例一起使用它
dynamodb_本地实例与2014-10-07版本相同,运行正常。如果在运行时使用-dbPath选项使用anywhere\u localhost.db文件指定目录,它似乎不会读取/检测我的db文
我在DynamoDB有一张桌子:
Id: int, hash key
Name: string
(还有很多列,但我省略了)
通常我只是根据项目的Id提取和更新项目,这个模式可以很好地实现这一点
但是,其中一个要求是基于名称有一个自动完成下拉框。我希望能够查询DynamoDB表中以查询字符串开头的名称列的所有项
解决这个问题的SQL方法是在Name上添加一个索引,然后从Name所在的表中编写一个SELECT Id这样的查询,比如'query%',但我想不出一个DynamoDB友好的方法来实现这一
我正在设计一个用于跟踪呼叫活动的应用程序
每个呼叫可以被终止或激活。应用程序将每分钟查询数据库以生成激活调用列表。每秒最多可拨打1000个电话
我应该如何设计我的数据库?我是否应该在“state”属性上有一个“Call”表和一个可以等于“activate”或“terminated”的全局二级索引
或
“调用”表和“isActive”属性上的全局二级索引,仅用于活动调用。如果使用问题中建议的模式,您可能会遇到以下问题:
CallList将“state”作为GSI的表,这样您就可以查询GSI并获取所
接下来,我下载了dynamodb.jar,并运行了以下命令:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
这似乎有效:
但是当我输入http://localhost:8000,我收到一个错误:
怎么了?URL应该是。请使用此链接。它应该有用。修复了语法和拼写
我想用lambdaцdynamodb构建无服务器应用程序。要创建集群,我必须知道特定配置如何与表的结构和大小配合使用。为了找到答案,我打算使用CloudWatch指标,但事实证明,它们不能反映客观现实,也不能在特定时刻显示集群的“需求”。可能有人遇到过这样的问题,可以建议如何最好地确定有关表参数、请求数量和类型的群集配置?因此,很大程度上取决于特定的工作负载、预期的命中率、密钥访问的分布等。这里有一些经验法则,但随着时间的推移,这些可能会随着服务的变化而变化,因此最好使用自己的工作负载进行自己的
DynamoDB表中的一个属性是一个名为REQUEST\u IDS的列表,我想在更新项目之前检查该列表的长度,看看它是否满足条件(小于10)。如何在nodejs的ConditionExpression中引用数组长度?这可行吗?您正在寻找条件操作size
在您的情况下:ConditionExpression:'size(请求ID)
在AWS文件中:
每当表上发生写操作时,必须删除该表的所有索引
更新。在具有大型表的写操作繁重的环境中,这可能会
消耗大量的系统资源。以只读或
主要是阅读环境,这并不是一个太大的问题。然而,
您应该确保您的用户实际正在使用索引
应用程序,而不仅仅是占用空间
但是,如果我正在创建一个全局二级索引,而该索引的属性没有发生任何更改,它会导致重写吗
例如,假设我有下表:
关键字(散列)|电话号码(范围)|属性1…N |帐户ID
关键字,电话号码和帐户ID不会更改(但整个项目可能会被删除)
和全球二级指
有时,由于高流量,我在Dynamodb中遇到了阻塞事件。无论何时在度量中,我都可以看到限制事件,这是否意味着在这些情况下,数据没有写入数据库?是的,但是,您使用的是AWS SDK吗?如果是这样,那么它应该重试
从
节流可防止应用程序消耗过多容量
单位。当一个请求被限制时,它会失败,并产生HTTP 400代码
(错误请求)和ProvisionedThroughoutExceededException。美国焊接学会
SDK内置了对重试限制请求的支持(请参阅错误)
重试和指数退避),因此不需要编写此
我正在学习如何使用Algolia,我有几个问题
我有一个table FreightDriver,它与table Truck有一对多的关系
id: ID!
name: String!
email: String!
phoneNumber: String!
cities: [String!]!
state: String!
country: String!
picture: String
trucks: [Truck] @connection(keyName: "byFreightDriv
假设我有下表-
itemA | itemB | relationScore | type
----------------------------------------
"s" | "a" | 1.0 | "foo"
"s" | "b" | 1.0 | "bar"
...
这里,itemA+itemB每行都是唯
我需要在jsp上显示最大计数为10的搜索结果,并且它应该具有分页功能,可以作为分页功能来回遍历
Dynamodb有一个lastevaluatedkey,但是返回上一页没有帮助,尽管我可以通过lastevaluatedkey移动到下一个结果集
谁能帮我一下吗
我使用JavaSpring和DynamoDB作为堆栈
谢谢
Satya您必须在会话变量、查询字符串或稍后可以访问的类似内容中保留上一个键的记录,然后在您想要返回时使用该键执行查询。迪纳摩不会为你记录这些 要启用向前/向后,只需保持
第一个键,
我正在将我的应用程序从mysql迁移到DynamoDB,我有一个表,根据特定条件匹配5个非键属性。此表将有许多读取操作(扫描)
问题:有没有任何可能的方法可以让我设计一个表格,而不必扫描表格
道路上的任何光线都会有帮助。
谢谢我相信最近发布的产品正是您所需要的
与本地二级索引一样,查询时不能有多个索引
这意味着您可能需要将一些逻辑移到应用程序层
我希望能够只更新现有项目的某些属性,而不首先获取项目
首先,如果为操作设置了“ignorenull values”选项,我是否正确地假设这会起作用?也就是说,只有指定的属性将得到更新,其余属性将保持不变
其次,假设在将项添加到表中后的很短时间内进行更新。是否有可能更新失败或原始数据丢失,因为操作将由还没有项目数据的服务器接收?如果是这样,“一致读取”选项对这种类型的操作有影响吗?首先,dynamodb中没有不同的插入/更新。如果更新时对象不存在,则即使是也会创建对象。依我看,如果使用映射器,最好
我正在尝试更新这样的元素
$response = $dynamo->updateItem(array(
"TableName" => "posts",
"IndexName" => "college_id-post_id-index",
"Key" => array(
"college_id" => array('S' => $collegeId),
"post_id" => array('S' =
我正在研究将DynamoDB复制到ElasticSearch(ES)中。为此,我们评估了,但发现以下缺点:
拉模式下的日志存储没有HA/故障切换功能。它成为复制的SPOF
由于我们不希望在ES索引上执行应用程序级联接,因此我们希望将多个表合并到一个ES文档中。该插件不提供此用例的功能
因此,我们正在评估以下两种方法
Lambdas读取DynamoDB流并通过SQS将其推送到ES
我们自己的DynamoDB流处理器将取代AWS lambdas
现在来看实际问题:排序对于将数据从Dynamo流复
有人知道amazon dynamo DB支持的最大项目负载大小吗?我确信它埋在某个地方的文档中
我的后续问题是,如果存在连接断开(客户端或服务器),则在上载大数据块时,是否有方法从您停止的位置继续上载?DynamoDB项目的最大大小为400KB
从:
DynamoDB中的最大项大小为400 KB,其中包括属性名称二进制长度(UTF-8长度)和属性值长度(同样是二进制长度)。属性名称计入大小限制
这是我从文档中可以看出的
无限属性/项目
无限项目/表格
最大400KB/属性
-最大64KB/项目
我有一个名为“timestamp”列的DynamoDB表,正在尝试按日期查询。我无法控制更改列名
var params = {
TableName : 'REPORT_CARD',
KeyConditionExpression: "timestamp BETWEEN :startDate AND :endDate",
ExpressionAttributeValues: {
":startDate": ""+startDate,
":en
附加现有列表的Lambda函数:
var doc = require('aws-sdk');
var dynamo = new doc.DynamoDB({
convertEmptyValues: true
});
exports.handler = function(event, context) {
var params = {
TableName: 'F_Items',
Key
假设这是表结构:
[{ name:"test", age:99,
Info: [
{ location:"A", num:11 },
{ location:"B", num:99 }
]
}]
我想要得到的是这样的东西:
{ name: "test",
Info:[
{location:"A"},
{location:"B"}
]}
那可能吗?除非我指定索引,否则我似乎无法使它工作
ProjectionExpressi
您好,我已经创建了一个dynamodb表,但是当我尝试执行table.GetItem时,仅附加用户名图像时出现了错误
发现这是一个设计糟糕的表,所以考虑到重新创建一个新表,我的问题是如何为一个包含一个主键和3个搜索列的表设置属性、本地二级索引和全局二级索引。
或
在dynamodb中,除了分区键columnuser\u ID之外,还有3个搜索列suser\u email、Username、Usertype吗?GetItem API需要分区键和排序键。但是,您可以使用仅具有分区键属性值的查询API
我在amazon服务器上有一个dynamodb,我想在表中为大约一半的记录添加一列
该表有一个复合键,我想将范围作为参数提供,并且我想更新仅满足该参数的所有记录(不考虑散列)
目前,我有以下json文件:
key.json
{
"ExchangeName": {"S": "TSX"}
}
expression-attribute-names.json
{
"#S":"Suffix"
}
expression-attribute-val
我正在使用无服务器框架开发一个AWS服务。到目前为止,它只有一个表和两个全局二级索引。我试图查询全局二级索引
查询:
{
"TableName": "messages-table-dev",
"IndexName": "roomIndex",
"KeyConditionExpression": "room = :room",
"ExpressionAttributeValues": {
":room": {
"S": "ev
为了对结果进行排序,我在DynamoDB表中添加了一个索引,但它似乎没有做任何事情。在DyanmoDB仪表板中,它显示为0大小和0项目计数
表中有几百个项目,它们都有一个id(主键)和一个创建的值。创建表时,我没有设置范围属性。下图中的项目顺序正确,但通过appsync的响应不正确
我已将索引添加到查询中,该查询返回所有项目,但它似乎没有任何作用,无论是否使用索引,项目的顺序都是相同的:
"version" : "2017-02-28",
"operation" : "Scan",
"ind
阅读本文,我对使用ClientRequestToken调用TransactionWriteItems时维护幂等项有点困惑。例如,如果我:
string requestToken=“abc123”;
var result1=await dbClient.TransactionWriteItemsAsync(新TransactionWriteItemsRequest
{
TransactiveItems=list1,
ClientRequestToken=requestToken
});
var r
Dynamoose是否支持schema.virtual()?或者有没有办法达到同样的效果
我在v2文档中看不到它,但在过去似乎有一些对它的支持-请参阅
我知道Dynamoose的灵感来源于Mongoose,而Mongoose也有这个功能
我想将user\u name从我对get\u项目的响应中排除。
下面是我的问题
results = TABLE.get_item(
Key={
'id': is,
}
)
return results['Item']
如何将user\u name从该响应中排除?DynamoDB操作有一个ProjectionExpression参数(或过时的AttributesToGet参数),该参数只能用于请求特定属性,但是没有特定
我们正在尝试创建类似uber eats的东西。后端是无服务器的。我们有菜单项,每个菜单项都有它的属性,这些属性存储在DynamoDB的菜单表中
此应用程序仅适用于单个餐厅特许经营。对于同一特许经营权,我们可以从不同的门店订购功能。
产品的某些属性(如标题、价格、SKU)是常见的。但不同门店的促销活动、可用库存等属性是不同的
我试图将结构管理为:
{
"title": "title",
"sku": "sku00
我正试图通过电子邮件(散列PK)、id和verifyToken更新项目。我的查询如下所示:
params =
TableName: 'users'
Key:
email:
S: 'example@email.com'
AttributeUpdates:
verified:
Action: 'PUT'
Value:
BOOL: true
verifyToken:
Action: 'DELETE'
我得到这个错误:
com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException:无法更新检查点-实例不持有此碎片的租约
有什么想法吗
谢谢。听起来像是动觉问题
我在读关于弹性搜索的书。看起来它对所有文档中的所有术语都保持反向索引。但它是否也保持了正常的索引,即从文档id到文档的索引?而且,由于它在所有字段和所有术语上都维护了大量索引,所以它会占用太多内存吗?
例如,与DynamoDb相比,比如说,我只在2个字段上建立了索引,在这里它在每个术语上形成了索引,这将更节省内存?太多”是一个非常自以为是的问题,完全取决于您的用例。要做出明智的决定,您需要深入研究几个主题(Elasticsearch功能强大,但您需要知道自己在做什么):
vs
尤其是\u al
我发现在桌子上查询GSI很困难。下面的代码示例导致与主键相关的键错误,尽管我使用的是索引
表定义:
TableName : config.user_table,
KeySchema: [
{ AttributeName: "user", KeyType: "HASH"}
],
AttributeDefinitions: [
{ AttributeName: "user", AttributeType: "S" },
{ AttributeNam
我想知道Amazon Dynamodb全局二级索引是否可以用于写操作非常繁重的实时应用程序。聊天应用程序。
其中,一旦主表写入/更新完成,需要在亚毫秒延迟内更新全局辅助索引。有可能吗?对于这些要求,目前没有。虽然DynamoDB可以处理非常高的写入吞吐量,但当前数据将以一位数毫秒的延迟(而不是亚毫秒)从表复制到GSI。只需确保您的数据模型正确。根据这些要求,目前没有。虽然DynamoDB可以处理非常高的写入吞吐量,但当前数据将以一位数毫秒延迟(而不是亚毫秒)从表复制到GSI。只需确保您的数据模型
如果我知道项目的主键,哪种方法是最好的方法
使用FilterExpression和IN运算符进行扫描
请求参数中包含所有键的BatchGetItem
请从延迟和分区影响两方面推荐解决方案。可能两者都没有。当然,这一切都取决于键模式和表中的数据,但您可能希望为最常用的查询创建一个全局二级索引
话虽如此,;不鼓励执行扫描,尤其是在处理大量数据时。因此,如果您知道您感兴趣的项目的主键,那么在进行扫描之前,请选择BatchGetItems。可能两者都不知道。当然,这一切都取决于键模式和表中的数据,但
我有这样的想法:
{
Records:{}
}
{
Id: 123,
Records:{
10001: { event : "item1" }
}
}
我只想在记录中添加如下数据:
{
Records:{}
}
{
Id: 123,
Records:{
10001: { event : "item1" }
}
}
我的第一次尝试:
var params = {
TableName : "Records",
Key : { I
我试图遵循alexa sdk v2的高低游戏教程,但即使遵循教程,我也会遇到一个错误
链接到教程:
这是index.js中的代码:
const Alexa = require('ask-sdk');
const ddbAdapter = require('ask-sdk-dynamodb-persistence-adapter'); // included in ask-sdk
// TODO: The items below this comment need your attention.
我打算以编程方式复制DynamoDB表。除了扫描表并将其保存到新表之外,我没有找到任何查询,但是因为表很大,所以需要花费不合理的时间来实现这一点。因此,我认为另一种方法应该是备份表,然后将其恢复到新表中。然而,我在c#中找不到任何可以做这件事的东西
非常感谢您的帮助。您可以使用DynamoDB备份/还原
var backupResponse=wait dynamoDbClient.CreateBackupAsync(新的CreateBackupRequest
{
BackupName=Backu
摘要
我有一个DynamoDB表,其中包含不到十个项目,我正在尝试使用CloudSearch对其进行索引。CloudSearch索引器建议一个名为“l”的不存在属性。这似乎源于dynamodbjson“list”键(在我的例子中,它存储列表对象的数组,即所有字符串)。无论如何,即使在索引字段配置时删除此键,在文档上载时仍会出现以下硬错误:
{["Field "l" does not exist in domain configuration (near operation with index
我正在看AWS文档中的示例代码。它似乎在将映射器放入事务之前先调用mapper.save。从我的角度来看,根据顺序,在创建事务之前,首先保存了对象。在调用save()之前,我们不应该先将它们放入事务中吗
private static void testPutAndUpdateInTransactionWrite() {
// Create new Forum item for S3 using save
Forum s3Forum = new Forum();
上一页 1 2 ...
5 6 7 8 9 10 11 ...
下一页 最后一页 共 37 页