Database design DynamoDB用户数据库设计及Cloudsearch快速性能搜索

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

我正在研究如何在我的应用程序中使用DynamoDB和Cloudsearch。关于DynamoDB的数据库模式,我有几点不懂。考虑到这一模式:

用户表

{
   "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>,