amazon-web-services - NoSQL 鼓励基于访问模式设计数据库。当模式发生变化时该怎么办?
问题描述
NoSQL 鼓励基于访问模式设计数据库,它可以非常快速地执行那些设计用于的查询。对于其他查询,性能不是那么好。但对于软件来说,变化是常态。那么当新的需求来了,我们又要添加新的特性时,nosql数据库该如何适应呢?或者更好的是,我如何设计 nosql 数据库(最好是 dynamodb),让我能够适应新功能的添加。
我想到的第一个方法是设计一个新表并将所有以前的数据迁移到新表中。但是考虑到该表有数百万条记录,它可能不是很划算
参考:
解决方案
为了适应新的变化而最小化全表迁移的一种方法是使用索引的通用名称。对于 dynamodb,我们将 pk 作为 partition_key,将 sk 作为 sort_key 以及项目的所有属性。pk 和 sk 的值实际上是从其他属性派生的值。更重要的是,我们会在建表过程中添加 5 个 LSI,并在必要时使用它们。例如,要存储有关一本书的数据,表中的一行将具有以下字段:
pk, sk, ISBN, data_type, author, created_at, ...other data, lsi1, lsi2, lsi3, lsi4, lsi5
字段的值:
pk->ISBN, sk->data_type, ISBN->ISBN, ...., lsi1->data_type#created_at , lsi(2-5)->empty
这样,除非需求发生剧烈变化,否则我们表的表结构不太可能发生变化。这里需要注意的一点是,除非添加、删除或更新的项目包含属于索引的属性,否则 dynamodb 不会产生计算或存储成本。
推荐阅读
- c# - BlockingCollection ToObservable 与订阅使用响应式扩展
- r - 为所有变量的数据框中的每个 id 添加一个新行
- java - 分享 Instagram Story 的贴纸坏了?
- operating-system - 用 yocto 定义新的图像特征
- visual-studio-code - 如何覆盖特定主题的字体?
- ansible - 条件检查 'user_sdf_exist.rc == 0' 失败
- python - 具有弹出值能力的 Nosql 文件数据库
- python - DROP TABLE IF EXISTS 说“未知表”?[MySQL]
- python-3.x - python starlette中的自定义异常
- botframework - 如何从 microsoft bot 发送电子邮件?