DynamoDB大于400KB的项目
DynamoDB是亚马逊提供的一种NoSQL数据库服务,它提供了低延迟、高可扩展性和高度可靠性的数据存储解决方案。然而,DynamoDB有一个限制,即每个项的大小不能超过400KB。如果超过了这个限制,就会导致写入或读取操作失败。
那么,为什么会出现项大小超过400KB的情况呢?原因可能是某些应用程序在设计数据模型时没有考虑到这个限制,或者是由于某些特殊需求导致了项的大小超出了限制。无论是哪种情况,我们都需要找到解决方法来解决这个问题。
解决方法是将数据模型重新设计,将partitionKey
设置为merchantId,将sortKey
设置为storeId。这样可以为每个商家的每个店铺创建单独的记录,并存储其地理位置信息。这样做有以下好处:
- 不会超过400KB的限制;
- 如果只需要获取某个商家的某个店铺的位置信息,查询效率会更高;
- 如果需要获取所有商家的所有店铺的位置信息,这个数据模型也没有影响。
以上就是解决此问题的方法。需要注意的是,以上内容由一位在亚马逊DynamoDB上工作的软件工程师提供,他对此问题有着较深的了解。
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的。你可能会发现使用其他算法可以获得更好的压缩效果。