为了将Dynamodb用于其中一个项目,我对dynamodb的强一致性模型存在疑问.来自常见问题解答
强大的一致性读取 - 除了最终的一致性之外,如果您的应用程序或应用程序的一个元素需要,Amazon DynamoDB还可以为您提供灵活性和控制权,以请求强一致性读取.强一致性读取返回一个结果,该结果反映了在读取之前收到成功响应的所有写入.
从上面的定义,我得到的是强一致读取将返回最新的写入值.
举个例子:假设Client1在Key K1上发出一个写命令,将值从V0更新为V1.在几毫秒之后,Client2发出Key K1的读命令,然后在强一致性的情况下,将始终返回V1,但是在最终一致性的情况下,可以返回V1或V0.我的理解是否正确?
如果是,如果写入操作返回成功但数据未更新到所有副本并且我们发出强一致性读取怎么办?如何确保在这种情况下返回最新写入值?
以下链接 AWS DynamoDB在写入一致性后读取 - 它在理论上如何工作?试图解释这背后的架构,但不知道这是否真的有效?通过此链接后我想到的下一个问题是:DynamoDb是基于单主机,多从机架构,其中写入和强一致性读取是通过主副本,而正常读取是通过其他.
consistency eventual-consistency amazon-web-services amazon-dynamodb
我正在尝试将__CODE__文件数据导入dynamodb.
请给我一个建议.
first_name last_name
sri ram
Rahul Dravid
JetPay Underwriter
Anil Kumar Gurram
Run Code Online (Sandbox Code Playgroud) 在AWS Lambda中使用python,如何从DynamoDB表中放入/获取项目?
在Node.js中,这将是这样的:
dynamodb.getItem({
"Key": {"fruitName" : 'banana'},
"TableName": "fruitSalad"
}, function(err, data) {
if (err) {
context.fail('Incorrect username or password');
} else {
context.succeed('yay it works');
}
});
Run Code Online (Sandbox Code Playgroud)
我需要的只是python等价物.
我正在尝试使用Spring Boot在本地设置DynamoDB.最初我使设置工作,并能够通过存储库写入/保存到DynamoDB.从那时起,我添加了更多类来构建我的应用程序.现在当我尝试启动我的应用程序时,我得到以下异常:
org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'agentRepository' defined in null: Cannot register bean definition [Root bean: class [org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'agentRepository': There is already [Root bean: class [org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
我已经广泛搜索了SO和互联网,但没有任何有用的解决方案.错误消息也具有误导性.
我的项目具有以下层次结构
ai.test.as
- as
- agent
- business
- intent
- exception
- Agent.java
- AgentDTO.java
- AgentRespository.java
- AgentController.java
- AgentService.java
- AgentServiceImpl.java
- config …Run Code Online (Sandbox Code Playgroud) 我看到DynamoDB基本上限于三种数据类型:String,Number和Binary.这似乎留下了两个存储日期或时间戳的选项:
我需要使用此日期/时间戳作为范围键并使用scanIndexForward来"排序"结果.是否可以说哪种方法更有效?
假设我在DynamoDB中存储具有以下结构的记录:
{
"id": "57cf5b43-f9ec-4796-9de6-6a50f556cfd8",
"created_at": "2015-09-18T13:27:00+12:00",
"count": 3
}
Run Code Online (Sandbox Code Playgroud)
现在,是否可以在一个请求中实现以下功能:
id不存在,则应使用count = 1创建id存在,则计数器正在更新.目前我正在进行查询以检查记录是否存在,并且取决于我执行的操作put或结果update.把它折叠成一个单独的操作会很好.
以下是我的用例:我有一个带有散列+范围键的Dynamo表.当我在表中放入新项目时,我想进行唯一性检查.有时我想保证散列是唯一的(忽略范围).其他时候我想允许重复哈希,但保证哈希和范围组合是唯一的.我怎么能做到这一点?
我尝试了attribute_not_exists.它似乎处理第二种情况,它检查哈希+键组合.这是一个PHP示例:
$client->putItem(array(
'TableName' => 'test',
'Item' => array(
'hash' => array('S' => 'abcdefg'),
'range' => array('S' => 'some other value'),
'whatever' => array('N' => 233)
),
'ConditionExpression' => 'attribute_not_exists(hash)'
));
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我使用attribute_not_exists(hash)或者似乎并不重要attribute_not_exists(range).他们似乎都做了完全相同的事情.这是它应该如何工作?
知道如何处理我只想检查hash唯一性的情况吗?
我遇到与DynamoDB连接的问题.我得到这个例外:
com.amazonaws.services.dynamodb.model.ResourceNotFoundException:找不到请求的资源(服务:AmazonDynamoDB;状态代码:400;错误代码:ResourceNotFoundException;请求ID:..
但我有一张桌子和地区是正确的.
我们正在使用 AWS,并考虑使用DynamoDB或Redis使用我们的新服务。
以下是我们服务的特点
1.我担心Redis服务器何时停机。
当Redis失败时,我们的数据将被删除。
这就是为什么我正在考虑选择Amazon DynamoDB.
因为DynamoDB是NoSQL,所以插入/删除非常快(比Redis慢,但我们不需要那么快),并且永久存储数据。
但我不确定我的想法是否正确。
如果我想错了或者没有想到另一个重要的点,当你们教我时,我会很感激。
谢谢。
如何使用以下数据计算RCU和WCU:读取吞吐量为32 GB/s,写入吞吐量为16 GB/s.
amazon-dynamodb ×10
aws-lambda ×1
consistency ×1
csv ×1
date ×1
java ×1
python-2.7 ×1
redis ×1
spring ×1
spring-bean ×1
spring-boot ×1