【发布时间】:2019-05-30 15:14:10
【问题描述】:
我正在尝试查询我的数据库以编译给定用户喜欢/不喜欢的位置附近的帖子列表。
allPostsNearLocationUserHasLiked(
userId: ID,
location: LocationInput,
radius: Int
): [Post]
allPostsNearLocationUserHasNotLiked(
userId: ID,
location: LocationInput,
radius: Int
): [Post]
为此,我目前正在使用 AWSAppSync,将 dynamoDB 流式数据传输到 Elastic Search。这使我可以轻松地进行地理空间搜索并获取给定位置附近的所有帖子。
我想知道使用 dynamoDB 计算这个最有效的方法是什么?还是为我的喜欢/用户切换到 SQL 数据库更适合我?
我有一个用户、帖子和喜欢的 DynamoDB 表。我正在考虑使用管道解析器来:
1) 获取用户位置附近的所有帖子列表(弹性搜索)
2) 查询点赞表,得到我点过的所有点赞(DynamoDB)
3) 逐项合并结果。
我对这个特别是第 3 步的性能表示严重怀疑,这是一个 O(M*N) 操作。
有没有办法在 Elastic Search 中本地完成整个查询?
## DynamoDB Table?? Or maybe SQL?
type Like {
likeId: ID!
userId: ID!
likedPostId: ID!
}
type Query {
#Implement with Elastic Search
allPostsNearLocation(location: LocationInput, radius: Int): [Post]
## Elastic search???
allPostsNearLocationUserHasLiked(
userId: ID,
location: LocationInput,
radius: Int
): [Post]
allPostsNearLocationUserHasNotLiked(
userId: ID,
location: LocationInput,
radius: Int
): [Post]
}
type Location {
lat: Float!
lon: Float!
}
input LocationInput {
way: Float!
lon: Float!
}
type Mutation {
putPost(
author: String!,
title: String!,
content: String!,
location: LocationInput!,
url: String!
): Post
putUser(name:String): User
likePost(userId: ID!, postId: ID!): Like
}
#DynamoDB Table
type User{
userId: ID!
name: String
likes: [Like]
}
#DynamoDB table
type Post {
id: ID!
author: String!
title: String!
content: String!
url: String!
location: Location!
}
schema {
query: Query
mutation: Mutation
}
【问题讨论】:
标签: amazon-web-services elasticsearch amazon-dynamodb graphql aws-appsync