elasticsearch,amazon-dynamodb,aws-appsync,Amazon Web Services,elasticsearch,Amazon Dynamodb,Aws Appsync" /> elasticsearch,amazon-dynamodb,aws-appsync,Amazon Web Services,elasticsearch,Amazon Dynamodb,Aws Appsync" />

Amazon web services 针对高度可过滤数据的AWS数据结构和堆栈建议

Amazon web services 针对高度可过滤数据的AWS数据结构和堆栈建议,amazon-web-services,elasticsearch,amazon-dynamodb,aws-appsync,Amazon Web Services,elasticsearch,Amazon Dynamodb,Aws Appsync,首先,让我知道我是否应该把它放在不同的社区。这是编程相关的,但比我喜欢的少 我正在创建一个基于AWS应用程序同步的移动应用程序,除非我确定它不适合 我想存储一组相当大的数据,比如说50万条记录 从这些记录中,我需要能够根据标签抓取所有条目,并从较大的集合中分页 该数据的一个例子是: { "name":"Product123", "tags":[ { "name":"1880", "type":"year", "valu

首先,让我知道我是否应该把它放在不同的社区。这是编程相关的,但比我喜欢的少

我正在创建一个基于AWS应用程序同步的移动应用程序,除非我确定它不适合

我想存储一组相当大的数据,比如说50万条记录

从这些记录中,我需要能够根据标签抓取所有条目,并从较大的集合中分页

该数据的一个例子是:

{
   "name":"Product123",
   "tags":[
      {
         "name":"1880",
         "type":"year",
         "value":7092
      },
      {
         "name":"f",
         "type":"gender",
         "value":4120692
      }
   ]
}
各种对象可能有也可能没有特定的标记,但可能有多达500个或更多的标记(初始数据的种子有130个标记)。如果它们不匹配,我的过滤器将忽略它们,但如果匹配,则返回它们

在阅读关于DyanmoDB上的查询与扫描的文章时,我觉得我当前的数据结构需要大部分扫描,并且效率很高。由于成本的原因,效率只是一个真正的限制


考虑到成本,我将重点关注在过滤集中访问此数据的每个用户的成本。现在假设每天有100000个用户多次过滤和分页数据。

您的标签概念听起来与使用AppSync的Cognoto用户池组的概念没有太大区别-基于组的身份验证将只返回用户请求所在的组所允许的项。Cognito的默认组限制是每个用户池25个,因此,尽管开箱即用很方便,但它本身对您帮助不大。相反,它之所以有趣,仅仅是因为它在概念上是相似的,并且可以通过查看它的内部工作方式来提供见解


如果进入AppSync控制台并为groups auth设置请求映射模板,您将看到它使用扫描和contains操作。如果你真的想使用迪纳摩,做一些类似的事情可能是你最好的选择。如果您发现成本过高,您可以使用Lambda数据源,它允许您使用任何数据存储,如果您认为这种类型的操作更灵活一点的话。

标记名可以是唯一的吗?换句话说,一个项目只能包含一个带有“name”的标记:“f”?也许,我还没有想到所有情况。这就是为什么现在包含了这个类型,但最终可能会被删除。此外,它还允许我设置某些标记,并可以按类别提供筛选列表。如果标记名是唯一的,那么您可以考虑使用名称作为分区键,标记名作为排序键来设计表,并将您的项拆分为N个项,每个项都有名称、标记名、标记类型和标记值。然后,您可以创建一个本地二级索引,分区键为name,tagtype为sortkey(假设tagtype也是唯一的)