在DynamoDB中存储和搜索地图?

时间:2017-09-10 21:00:22

标签: java performance amazon-web-services maps amazon-dynamodb

所以我一直试图在DynamoDB中存储Java Maps,但没有取得任何成功。

我一直收到以下错误

requires @DynamoDBTyped or @DynamoDBTypeConverted

现在我可以创建一个转换器,只需将地图转换为字符串,但这似乎很多工作,所以不确定我是否遗漏了一些东西,因为我不需要为List做这样的事情。

此外,如果我能够成功存储地图,Dynamo是否提供搜索特定地图键或值的方法。 例如,假设Dynamo表中的一列是一个Map,我可以说执行一个查询给我回复所有人都是> 30分钟跑马拉松不到5分钟?或者我可能需要一种不同的方法......

任何帮助都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:2)

DynamoDB记录实际上是地图,所以是的,你绝对可以在DynamoDB中存储和搜索地图。 It looks like如果您的地图不是<String, AttributeValue>,那么您需要提供自定义转换器。您不会将整个地图转换为字符串,您可以将地图转换为Map<String, AttributeValue>

答案 1 :(得分:0)

您可以考虑的另一件事是 public class MultiTenantConnectionProviderImpl extends AbstractDataSourceBasedMultiTenantConnectionProviderImpl { private static final long serialVersionUID = 1L; public MultiTenantConnectionProviderImpl() { } @Override protected DataSource selectAnyDataSource() { return null; } @Override protected DataSource selectDataSource(String tenantIdentifier) { //This in turn makes a call to a remote service to fetch current tenant //database details and then creates a datasource for it. return DataSourceManager.getDataSource(tenantIdentifier); } @Override public Connection getAnyConnection() throws SQLException{ //Called during server startup. Cannot do any thing as tenant is not known // and there is no default datasource throw new SQLException("not implemented in multi-tenant environment"); } @Override public void releaseAnyConnection(Connection connection) throws SQLException { //Called during server startup. Cannot do any thing as tenant is not known // and there is no default datasource throw new SQLException("not implemented in multi-tenant environment"); } } 。基本上,这意味着您不是在使用地图而是在使用对象(而是在Dynamo中转换为具有不同数据类型的地图)

查看此链接以获取示例 https://github.com/aws/aws-sdk-java/issues/331