DynamoDB大于400KB的项目

10 浏览
0 Comments

DynamoDB大于400KB的项目

我计划创建一个商家表,其中包含商家的店铺位置。大多数商家是小型企业,他们只有几家店铺。然而,也有一些连锁店/加盟店可能有数百个分店。

如果我想在商家表中包含位置属性,我的解决方案是什么?如果我必须将其拆分成多个表,我该如何实现?

谢谢!

编辑:将表拆分如何?为了满足大多数情况,我可以将最多5个位置放在同一个表中。但是超过5个位置,它将溢出到一个规范化的表中,主表上有一个指示器表示有超过5个位置。如何实现这一点,有什么想法吗?

0
0 Comments

DynamoDB是亚马逊提供的一种NoSQL数据库服务,它提供了低延迟、高可扩展性和高度可靠性的数据存储解决方案。然而,DynamoDB有一个限制,即每个项的大小不能超过400KB。如果超过了这个限制,就会导致写入或读取操作失败。

那么,为什么会出现项大小超过400KB的情况呢?原因可能是某些应用程序在设计数据模型时没有考虑到这个限制,或者是由于某些特殊需求导致了项的大小超出了限制。无论是哪种情况,我们都需要找到解决方法来解决这个问题。

解决方法是将数据模型重新设计,将partitionKey设置为merchantId,将sortKey设置为storeId。这样可以为每个商家的每个店铺创建单独的记录,并存储其地理位置信息。这样做有以下好处:

- 不会超过400KB的限制;

- 如果只需要获取某个商家的某个店铺的位置信息,查询效率会更高;

- 如果需要获取所有商家的所有店铺的位置信息,这个数据模型也没有影响。

以上就是解决此问题的方法。需要注意的是,以上内容由一位在亚马逊DynamoDB上工作的软件工程师提供,他对此问题有着较深的了解。

0
0 Comments

DynamoDB中的项大小超过400KB的问题是什么原因引起的呢?我们可以从下面的内容中找到答案,同时也提供了解决该问题的方法。

根据访问模式的不同,你有几个选择:

  • 压缩数据并将二进制对象存储在DynamoDB中。
  • 在DynamoDB中存储基本细节以及指向S3的链接,用于存储较大的内容。由于DynamoDB和S3之间没有事务支持,所以数据有可能变得不一致。
  • 不要嵌入位置属性,可以将表进行规范化,并将该数据放在一个单独的表中,该表具有指向商户表的外键等效项。但是,您可能需要两个查询来检索每个商户的数据,这将计入您的吞吐量成本。
  • 处理溢出表必须在应用程序代码中处理,而不是在数据库级别:if (store_count > 5) then execute another query to retrieve more data

如果您不需要DynamoDB的性能和可扩展性,也许RDS是一个更好的解决方案。

我想探索二进制压缩。DynamoDB查询/写入会自动进行解码/编码为文本吗?性能会有多大的降低?根据这个docs.aws.amazon.com/amazondynamodb/latest/APIReference/…,它使用Base64进行编码。虽然我不太熟悉,但我能节省多少存储空间?顺便问一下,这是否是以二进制格式存储电子邮件/聊天消息的好方法?

另外,你能在二进制类型的属性上添加二级索引吗?

GZIP和LZO压缩算法产生适合存储为二进制对象的二进制输出。你可能需要尝试每个算法,看哪个对你的数据最好。查看docs.aws.amazon.com/amazondynamodb/latest/developerguide/…,其中包含更多详细信息和一个完整的Java示例,与你的电子邮件/聊天使用情况非常相似。

标量数据类型(Number,String,Binary和Boolean)可以用于局部二级索引的排序键元素。

谢谢craigcaulfield。刚看到这个stackoverflow.com/questions/4715415/…,它显示将其编码为二进制会增加原始大小的4/3。为什么人们会称此过程为压缩呢?

这个链接是关于base64的。你可能会发现使用其他算法可以获得更好的压缩效果。

0