Database design DynamoDB用户数据库设计及Cloudsearch快速性能搜索
我正在研究如何在我的应用程序中使用DynamoDB和Cloudsearch。关于DynamoDB的数据库模式,我有几点不懂。考虑到这一模式: 用户表Database design DynamoDB用户数据库设计及Cloudsearch快速性能搜索,database-design,amazon-dynamodb,database-schema,amazon-cloudsearch,nosql,Database Design,Amazon Dynamodb,Database Schema,Amazon Cloudsearch,Nosql,我正在研究如何在我的应用程序中使用DynamoDB和Cloudsearch。关于DynamoDB的数据库模式,我有几点不懂。考虑到这一模式: 用户表 { "id_users"(PI): <number>, "created": <string>, "email" (GSI): <string>, "firstname": <string>, "lastname": <string> "password
{
"id_users"(PI): <number>,
"created": <string>,
"email" (GSI): <string>,
"firstname": <string>,
"lastname": <string>
"password"(GSI): <string>,
"verified": <boolean>,
"category": <string>,
"colors": <array of strings>, // list of favourite colors of the users (it's an example)
"locale": <string>,
"user_location": { //GeoJSON structure
"type": <string> ex. "location",
"geometry": {
"type": <string> ex. "Point",
"coordinates": [ <number> ex. 125.6, <number> 10.1]
},
"properties": {
"city": <string>,
"country": <string>
}
},
"accounts": [
{
"type": <string>, // ex. "facebook"
"ID": <number>, // ex. 23248323243473743
"access_token": <string>,
"profile_url": <string>
},
{
"type": <string>, // ex. "google"
"ID": <number>, // ex. 23248323243473743
"access_token": <string>,
"profile_url": <string>
}
]
}
但它并不“优雅”。我可以为用户位置创建一个外部表,但我可能会失去文档数据库的所有优势,并且当用户访问配置文件时,我无法通过一次调用检索/读取所有数据
我必须修改我的数据库模式吗?怎么做
谁在乎优雅,我必须把坐标放在第一层
在“坐标”
项中没有索引关联,这对性能有负面影响吗?显然,当我使用地理查询搜索用户时
有什么建议吗
谢谢你的帮助,
Alessandro.您需要使用云搜索进行搜索。添加所有要搜索的字段作为索引参数,还有latlon字段可帮助地理搜索。如果任何文档与您的搜索查询匹配,云搜索将返回对象的id以及索引字段。一旦您从云搜索中检索到结果,您就可以使用id从dynamoDB获取所需的文档 Dynamo和Cloud search不会自动相互链接,您需要创建一个单独的Cloud search域,并确保使用DynamoStreams和Lambda将对dynamoDB的任何更新更新更新为Cloud search
不需要深度索引,当对dynamoDB文档进行更新时,dynamo流将调用lambda函数。lambda函数随后将转换数据并更新云搜索。您可以将您的位置转换为latlon字段,并在此处更新cloud search以进行地理搜索。您需要使用cloud search进行搜索。添加所有要搜索的字段作为索引参数,还有latlon字段可帮助地理搜索。如果任何文档与您的搜索查询匹配,云搜索将返回对象的id以及索引字段。一旦您从云搜索中检索到结果,您就可以使用id从dynamoDB获取所需的文档 Dynamo和Cloud search不会自动相互链接,您需要创建一个单独的Cloud search域,并确保使用DynamoStreams和Lambda将对dynamoDB的任何更新更新更新为Cloud search
不需要深度索引,当对dynamoDB文档进行更新时,dynamo流将调用lambda函数。lambda函数随后将转换数据并更新云搜索。您可以将您的位置转换为latlon字段,并在此处更新cloud search以进行地理搜索。您需要使用cloud search进行搜索。添加所有要搜索的字段作为索引参数,还有latlon字段可帮助地理搜索。一旦检索到结果,就可以从dynamodb中按id提取所需的结果。Dynamo和Cloud search不会自动相互链接,您需要创建一个单独的云搜索域,并确保使用DynamoStreams和Lambda将对dynamoDB的任何更新更新更新为Cloud search。不需要深度索引,当对dynamoDB文档进行更新时,Dynamo流将调用Lambda函数。lambda函数随后将转换数据并更新云搜索。您可以将您的位置转换为latlon字段,并在此处更新cloud search以进行地理搜索。啊,我明白了!谢谢你的解释:)回答我的问题而不是添加评论,这样我就可以标记为“已回答”。你需要使用云搜索来进行搜索。添加所有要搜索的字段作为索引参数,还有latlon字段可帮助地理搜索。一旦检索到结果,就可以从dynamodb中按id提取所需的结果。Dynamo和Cloud search不会自动相互链接,您需要创建一个单独的云搜索域,并确保使用DynamoStreams和Lambda将对dynamoDB的任何更新更新更新为Cloud search。不需要深度索引,当对dynamoDB文档进行更新时,Dynamo流将调用Lambda函数。lambda函数随后将转换数据并更新云搜索。您可以将您的位置转换为latlon字段,并在此处更新cloud search以进行地理搜索。啊,我明白了!谢谢你的解释:)回答我的问题,而不是添加评论,这样我就可以标记为“已回答”。
location_coordinates: [ <number> ex. 125.6, <number> 10.1],
location_city: <string>,
location_country: <string>,