{"value":"\n### **一、前言**\n亚马逊的活动力度一向都比较大,因此让我有机会体验了 Amozon DynamoDB 这款完全托管的分布式 NoSQL 数据库服务。另外,亚马逊云科技提供了100余种产品免费套餐。其中,计算资源 Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB 存储容量 永久免费。[**活动地址**](https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el)\n##### **Amozon DynamoDB 是什么?**\nAmazon DynamoDB 是一种全托管 NoSQL 数据库服务,相当于在NoSQL的基础上做了很多扩展,附加了很多降本增效的功能,让开发人员不需要额外去维护什么,开箱即用。它主要提供的服务有:无缝扩展,快速可预测的性能,减少繁琐的管理分布式数据库的工作负担,提供静态加密、按需备份、自动维护过期项目等。极大的减少开发人员的时间成本和提高建设效率。\n\n可能有些小伙伴不清晰NoSQL与传统的关系型数据库的区别,这里简单的做一个介绍:\n\n![image.png](https://dev-media.amazoncloud.cn/d7655221dcf74a93ad4de932abcec6c4_image.png)\n\n因此,如果业务关系不复制、依赖简单又需要经常修改字段,对性能要求很高但安全性要求不高的情况下,使用 DynamoDB 是非常不错的选择。反之还是建议使用诸如 mysql 这类的传统关系型数据库。\n\n### **二、Amozon DynamoDB 上手教程**\n#### **1)帐号注册**\n没有 Amazon 帐号的小伙伴需要先进行帐号注册:[注册及上手试用地址](https://aws.amazon.com/cn/getting-started/databases/get-started/?nc=sn&loc=4&trk=fab55528-7c2e-4517-b90e-65b760ecfc1c&sc_channel=el) **(在账单登记页可以使用国内的信用卡)**\n#### **2)创建和查询 NoSQL 表**\n\n##### **2.1 建表**\n建立帐号后,按照官方的 [DynamoDB 使用教程](https://aws.amazon.com/cn/getting-started/hands-on/create-nosql-table/)即可快速的创建 NoSQL表:\n\n![image.png](https://dev-media.amazoncloud.cn/92aae57e4fd245a0bbfdd49f2eae4916_image.png)\n\n##### **2.2 添加数据**\n这里与官方文档稍有出入,实际操作可以通过点击列表的表名称-浏览项目-创建项目进行创建,如下图所示:\n\n![c48443d3c00044a5a1e1e87217150617.gif](https://dev-media.amazoncloud.cn/ab0e8377b32440208ca5f648e2337624_c48443d3-c000-44a5-a1e1-e87217150617.gif)\n\n##### **2.3 查询数据**\n然后点击运行按钮(也可以设置筛选条件)就可以将我们刚添加的数据查询出来:\n\n![image.png](https://dev-media.amazoncloud.cn/91bbf556d9654a75998d06eda23a74d4_image.png)\n\n##### **2.4 删除/修改数据**\n选中列表中任意数据,就可以在右上角的“操作”按钮中选择对应的操作对数据进行修改或删除:\n\n![image.png](https://dev-media.amazoncloud.cn/545fa8d804874cfdb009546847c5d63c_image.png)\n\n需要删除表的话,在外层的表列表中选择对应的表数据,点击删除按钮即可:\n\n![image.png](https://dev-media.amazoncloud.cn/058f36b2c5d54ad0898b973980c5ba11_image.png)\n\n#### **3)使用 Python 管理 DynamoDB**\n我们还可以使用 Python 来管理 DynamoDB,[官方文档](https://aws.amazon.com/cn/getting-started/databases/get-started/?nc=sn&loc=4&trk=fab55528-7c2e-4517-b90e-65b760ecfc1c&sc_channel=el)有详细的教程,这里不再赘述。\n\n#### **4)踩坑记录**\n在《[使用 Amazon DynamoDB 和 Amazon SNS 构建回合制游戏](https://aws.amazon.com/cn/getting-started/hands-on/turn-based-game-dynamodb-amazon-sns/)》教程中,按照走到应用部署这一步时,执行:bash scripts/create-lambda.sh 命令出现了下图中的报错:\n\n![image.png](https://dev-media.amazoncloud.cn/599a03b2014c4ad7b83ee21fdbb92209_image.png)\n\n按照提示将执行 create-lambda.sh文件执行命令改为 nodejs14.x后,再将之前新建的资源删除后即运行成功:\n\n![image.png](https://dev-media.amazoncloud.cn/19b1d49a6c484842985ff34fb7061cab_image.png)\n\n后面也是一路绿灯,完成了回合制游戏的构建。\n\n### **三、Amozon DynamoDB 特点说明**\n\n#### **1)DynamoDB 分区键、排序键的理解**\n##### **1.1 分区键**\n在我们建表时,会让我们指定分区建:\n\n![image.png](https://dev-media.amazoncloud.cn/a82ac12a722749eb843a54cb7d8a11e8_image.png)\n\n**那分区键的作用是什么呢?这里给大家举一个例子说明:**\n比如现在有这样一个身份证号:210122199206140257,从这个身份证号就能快速的知道这是一位来自辽宁省、沈阳市.、辽中县的一名29岁男生。\n身份证格式规则说明:前1-6位为行政区划代码即归属地,第7-14位为出生年月日,第15-17位为顺序代码,在同一个地区出生同一个出生的人通过顺序号码区分,第17位奇数表示男性,偶数表示女性,第18位为校验码,用于校验身份证号码是否合法。\n而DynamoDB的分区键也有同样的作用,通过指定标识来对数据分区,这样查询数据会显著提高。\n\n##### **1.2 排序键**\n排序键可以让将我们的数据按指定的排序存储,在后续获取数据的时候就能够通过二分查找的方式来降低查询的时间复杂度。\n\n#### **2)DynamoDB的二级索引**\n在诸如 Mysql 之类的关系型数据库中,通过建立索引能够让我们在查想要数据时,不对全表进行扫描而是通过索引查询指定行范围的数据,这样有更快的速度。创建索引后,我们再修改表的数据,数据库会自动更改索引来映射表的修改,无需我们手动操作。\n**在 dynamodb 中如何实现类似的操作呢?**\n我们可以创建二级索引来实现类似的目的,DynamoDB 的索引和oracle,mysql 这些关系式数据库的索引有很大不同。DynamoDB 的二级索引是由一个hash键和多个 range 键所组成的,它对支持应用程序需要的查询模式至关重要,关于 DynamoDB 索引的使用和介绍可以访问[管理索引](https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.html)文档进行学习。\n#### **3)DynamoDB 的备份和还原**\n数据备份和回滚恢复是至关重要的,DynamoDB 具有完全自动化的按需备份、还原和时间点恢复的能力:\n\n![image.png](https://dev-media.amazoncloud.cn/1d4386652ae5429887b0fe9b69ff8907_image.png)\n\n另外,在备份的同时,也会对数据自动加密,编入目录,来提高管理的效率,我们可以在表详情页中的备份选项卡进行备份设置的操作:\n\n![image.png](https://dev-media.amazoncloud.cn/0fb15abc5b474098b158a3e152f14798_image.png)\n\n也可以按需创建一次性备份:\n\n![image.png](https://dev-media.amazoncloud.cn/2a30461200e44356adfd16eb8e53b749_image.png)\n\n大家也可以访问[云原生数据库在线大会](https://www.awsevents.cn/CloudNative/listDetails.html?trk=1227489f-bfd0-430a-85df-750d92bb9d11&sc_channel=el)了解数据库发展历史,及未来发展方向等。\n\n### **四、总结**\nDynamoDB 除了提供数据存取管理的功能外,在高可用性(扩展、备份等)方面也做了不少努力,同时也有非常多的开箱即用的服务。因此,它不仅能在大规模数据的情况下保证高性能的数据存取,也能减少开发人员的建设运维成本。\n在游戏应用中,消息、通知的收发是必不可少的,另外游戏应用对性能的要求也相对于传统前后端分离应用来讲会高不少,通过 Amazon DynamoDB 和 Amazon SNS 的组合,能够轻松解决这两个问题:\n\n![image.png](https://dev-media.amazoncloud.cn/50bb34e0efa34c88a405ae3b2919a1e4_image.png)\n\n当然 DynamoDB 也有不适用的场景:在产品开发的初期,如果没有一个完善清晰的设计方案,特别是走一步看一步的敏捷开发模式下,并不建议使用 DynamoDB,因为按照 DynamoDB 的文档的理解:只有你对产品本身很熟悉时,才能设计好它的分区、排序键之类的。换而言之,当产品处于较成熟,或自己对产品很熟悉时,使用 DynamoDB 绝对能达到事半功倍的效果。\n\n**亚马逊云科技专为开发者们打造了多种学习平台:**\n1. 入门资源中心:从0到1 轻松上手云服务,内容涵盖:成本管理,上手训练,开发资源:[点我访问](https://aws.amazon.com/cn/getting-started/?nc1=h_ls&trk=32540c74-46f0-46dc-940d-621a1efeedd0&sc_channel=el)\n2. 架构中心:亚马逊云科技架构中心提供了云平台参考架构图表、经过审查的架构解决方案、Well-Architected 最佳实践、模式、图标等:[点我访问](https://aws.amazon.com/cn/architecture/?intClick=dev-center-2021_main&trk=3fa608de-d954-4355-a20a-324daa58bbeb&sc_channel=el&cards-all.sort-by=item.additionalFields.sortDate&cards-all.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all&awsf.tech-category=*all&awsf.industries=*all)\n3. 构建者库:了解亚马逊云科技如何构建和运营软件:[点我访问](https://aws.amazon.com/cn/builders-library/?cards-body.sort-by=item.additionalFields.sortDate&cards-body.sort-order=desc&awsf.filter-content-category=*all&awsf.filter-content-type=*all&awsf.filter-content-level=*all&trk=835e6894-d909-4691-aee1-3831428c04bd&sc_channel=el)\n4. 用于在亚马逊云科技平台上开发和管理应用程序的工具包::[点我访问](https://aws.amazon.com/cn/developer/tools/)","render":"<h3><a id=\"_1\"></a><strong>一、前言</strong></h3>\n<p>亚马逊的活动力度一向都比较大,因此让我有机会体验了 Amozon DynamoDB 这款完全托管的分布式 NoSQL 数据库服务。另外,亚马逊云科技提供了100余种产品免费套餐。其中,计算资源 Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB 存储容量 永久免费。<a href=\"https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el\" target=\"_blank\"><strong>活动地址</strong></a></p>\n<h5><a id=\"Amozon_DynamoDB__3\"></a><strong>Amozon DynamoDB 是什么?</strong></h5>\n<p>Amazon DynamoDB 是一种全托管 NoSQL 数据库服务,相当于在NoSQL的基础上做了很多扩展,附加了很多降本增效的功能,让开发人员不需要额外去维护什么,开箱即用。它主要提供的服务有:无缝扩展,快速可预测的性能,减少繁琐的管理分布式数据库的工作负担,提供静态加密、按需备份、自动维护过期项目等。极大的减少开发人员的时间成本和提高建设效率。</p>\n<p>可能有些小伙伴不清晰NoSQL与传统的关系型数据库的区别,这里简单的做一个介绍:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/d7655221dcf74a93ad4de932abcec6c4_image.png\" alt=\"image.png\" /></p>\n<p>因此,如果业务关系不复制、依赖简单又需要经常修改字段,对性能要求很高但安全性要求不高的情况下,使用 DynamoDB 是非常不错的选择。反之还是建议使用诸如 mysql 这类的传统关系型数据库。</p>\n<h3><a id=\"Amozon_DynamoDB__12\"></a><strong>二、Amozon DynamoDB 上手教程</strong></h3>\n<h4><a id=\"1_13\"></a><strong>1)帐号注册</strong></h4>\n<p>没有 Amazon 帐号的小伙伴需要先进行帐号注册:<a href=\"https://aws.amazon.com/cn/getting-started/databases/get-started/?nc=sn&loc=4&trk=fab55528-7c2e-4517-b90e-65b760ecfc1c&sc_channel=el\" target=\"_blank\">注册及上手试用地址</a> <strong>(在账单登记页可以使用国内的信用卡)</strong></p>\n<h4><a id=\"2_NoSQL__15\"></a><strong>2)创建和查询 NoSQL 表</strong></h4>\n<h5><a id=\"21__17\"></a><strong>2.1 建表</strong></h5>\n<p>建立帐号后,按照官方的 <a href=\"https://aws.amazon.com/cn/getting-started/hands-on/create-nosql-table/\" target=\"_blank\">DynamoDB 使用教程</a>即可快速的创建 NoSQL表:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/92aae57e4fd245a0bbfdd49f2eae4916_image.png\" alt=\"image.png\" /></p>\n<h5><a id=\"22__22\"></a><strong>2.2 添加数据</strong></h5>\n<p>这里与官方文档稍有出入,实际操作可以通过点击列表的表名称-浏览项目-创建项目进行创建,如下图所示:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/ab0e8377b32440208ca5f648e2337624_c48443d3-c000-44a5-a1e1-e87217150617.gif\" alt=\"c48443d3c00044a5a1e1e87217150617.gif\" /></p>\n<h5><a id=\"23__27\"></a><strong>2.3 查询数据</strong></h5>\n<p>然后点击运行按钮(也可以设置筛选条件)就可以将我们刚添加的数据查询出来:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/91bbf556d9654a75998d06eda23a74d4_image.png\" alt=\"image.png\" /></p>\n<h5><a id=\"24__32\"></a><strong>2.4 删除/修改数据</strong></h5>\n<p>选中列表中任意数据,就可以在右上角的“操作”按钮中选择对应的操作对数据进行修改或删除:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/545fa8d804874cfdb009546847c5d63c_image.png\" alt=\"image.png\" /></p>\n<p>需要删除表的话,在外层的表列表中选择对应的表数据,点击删除按钮即可:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/058f36b2c5d54ad0898b973980c5ba11_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"3_Python__DynamoDB_41\"></a><strong>3)使用 Python 管理 DynamoDB</strong></h4>\n<p>我们还可以使用 Python 来管理 DynamoDB,<a href=\"https://aws.amazon.com/cn/getting-started/databases/get-started/?nc=sn&loc=4&trk=fab55528-7c2e-4517-b90e-65b760ecfc1c&sc_channel=el\" target=\"_blank\">官方文档</a>有详细的教程,这里不再赘述。</p>\n<h4><a id=\"4_44\"></a><strong>4)踩坑记录</strong></h4>\n<p>在《<a href=\"https://aws.amazon.com/cn/getting-started/hands-on/turn-based-game-dynamodb-amazon-sns/\" target=\"_blank\">使用 Amazon DynamoDB 和 Amazon SNS 构建回合制游戏</a>》教程中,按照走到应用部署这一步时,执行:bash scripts/create-lambda.sh 命令出现了下图中的报错:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/599a03b2014c4ad7b83ee21fdbb92209_image.png\" alt=\"image.png\" /></p>\n<p>按照提示将执行 create-lambda.sh文件执行命令改为 nodejs14.x后,再将之前新建的资源删除后即运行成功:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/19b1d49a6c484842985ff34fb7061cab_image.png\" alt=\"image.png\" /></p>\n<p>后面也是一路绿灯,完成了回合制游戏的构建。</p>\n<h3><a id=\"Amozon_DynamoDB__55\"></a><strong>三、Amozon DynamoDB 特点说明</strong></h3>\n<h4><a id=\"1DynamoDB__57\"></a><strong>1)DynamoDB 分区键、排序键的理解</strong></h4>\n<h5><a id=\"11__58\"></a><strong>1.1 分区键</strong></h5>\n<p>在我们建表时,会让我们指定分区建:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/a82ac12a722749eb843a54cb7d8a11e8_image.png\" alt=\"image.png\" /></p>\n<p><strong>那分区键的作用是什么呢?这里给大家举一个例子说明:</strong><br />\n比如现在有这样一个身份证号:210122199206140257,从这个身份证号就能快速的知道这是一位来自辽宁省、沈阳市.、辽中县的一名29岁男生。<br />\n身份证格式规则说明:前1-6位为行政区划代码即归属地,第7-14位为出生年月日,第15-17位为顺序代码,在同一个地区出生同一个出生的人通过顺序号码区分,第17位奇数表示男性,偶数表示女性,第18位为校验码,用于校验身份证号码是否合法。<br />\n而DynamoDB的分区键也有同样的作用,通过指定标识来对数据分区,这样查询数据会显著提高。</p>\n<h5><a id=\"12__68\"></a><strong>1.2 排序键</strong></h5>\n<p>排序键可以让将我们的数据按指定的排序存储,在后续获取数据的时候就能够通过二分查找的方式来降低查询的时间复杂度。</p>\n<h4><a id=\"2DynamoDB_71\"></a><strong>2)DynamoDB的二级索引</strong></h4>\n<p>在诸如 Mysql 之类的关系型数据库中,通过建立索引能够让我们在查想要数据时,不对全表进行扫描而是通过索引查询指定行范围的数据,这样有更快的速度。创建索引后,我们再修改表的数据,数据库会自动更改索引来映射表的修改,无需我们手动操作。<br />\n<strong>在 dynamodb 中如何实现类似的操作呢?</strong><br />\n我们可以创建二级索引来实现类似的目的,DynamoDB 的索引和oracle,mysql 这些关系式数据库的索引有很大不同。DynamoDB 的二级索引是由一个hash键和多个 range 键所组成的,它对支持应用程序需要的查询模式至关重要,关于 DynamoDB 索引的使用和介绍可以访问<a href=\"https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.html\" target=\"_blank\">管理索引</a>文档进行学习。</p>\n<h4><a id=\"3DynamoDB__75\"></a><strong>3)DynamoDB 的备份和还原</strong></h4>\n<p>数据备份和回滚恢复是至关重要的,DynamoDB 具有完全自动化的按需备份、还原和时间点恢复的能力:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/1d4386652ae5429887b0fe9b69ff8907_image.png\" alt=\"image.png\" /></p>\n<p>另外,在备份的同时,也会对数据自动加密,编入目录,来提高管理的效率,我们可以在表详情页中的备份选项卡进行备份设置的操作:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/0fb15abc5b474098b158a3e152f14798_image.png\" alt=\"image.png\" /></p>\n<p>也可以按需创建一次性备份:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/2a30461200e44356adfd16eb8e53b749_image.png\" alt=\"image.png\" /></p>\n<p>大家也可以访问<a href=\"https://www.awsevents.cn/CloudNative/listDetails.html?trk=1227489f-bfd0-430a-85df-750d92bb9d11&sc_channel=el\" target=\"_blank\">云原生数据库在线大会</a>了解数据库发展历史,及未来发展方向等。</p>\n<h3><a id=\"_90\"></a><strong>四、总结</strong></h3>\n<p>DynamoDB 除了提供数据存取管理的功能外,在高可用性(扩展、备份等)方面也做了不少努力,同时也有非常多的开箱即用的服务。因此,它不仅能在大规模数据的情况下保证高性能的数据存取,也能减少开发人员的建设运维成本。<br />\n在游戏应用中,消息、通知的收发是必不可少的,另外游戏应用对性能的要求也相对于传统前后端分离应用来讲会高不少,通过 Amazon DynamoDB 和 Amazon SNS 的组合,能够轻松解决这两个问题:</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/50bb34e0efa34c88a405ae3b2919a1e4_image.png\" alt=\"image.png\" /></p>\n<p>当然 DynamoDB 也有不适用的场景:在产品开发的初期,如果没有一个完善清晰的设计方案,特别是走一步看一步的敏捷开发模式下,并不建议使用 DynamoDB,因为按照 DynamoDB 的文档的理解:只有你对产品本身很熟悉时,才能设计好它的分区、排序键之类的。换而言之,当产品处于较成熟,或自己对产品很熟悉时,使用 DynamoDB 绝对能达到事半功倍的效果。</p>\n<p><strong>亚马逊云科技专为开发者们打造了多种学习平台:</strong></p>\n<ol>\n<li>入门资源中心:从0到1 轻松上手云服务,内容涵盖:成本管理,上手训练,开发资源:<a href=\"https://aws.amazon.com/cn/getting-started/?nc1=h_ls&trk=32540c74-46f0-46dc-940d-621a1efeedd0&sc_channel=el\" target=\"_blank\">点我访问</a></li>\n<li>架构中心:亚马逊云科技架构中心提供了云平台参考架构图表、经过审查的架构解决方案、Well-Architected 最佳实践、模式、图标等:<a href=\"https://aws.amazon.com/cn/architecture/?intClick=dev-center-2021_main&trk=3fa608de-d954-4355-a20a-324daa58bbeb&sc_channel=el&cards-all.sort-by=item.additionalFields.sortDate&cards-all.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all&awsf.tech-category=*all&awsf.industries=*all\" target=\"_blank\">点我访问</a></li>\n<li>构建者库:了解亚马逊云科技如何构建和运营软件:<a href=\"https://aws.amazon.com/cn/builders-library/?cards-body.sort-by=item.additionalFields.sortDate&cards-body.sort-order=desc&awsf.filter-content-category=*all&awsf.filter-content-type=*all&awsf.filter-content-level=*all&trk=835e6894-d909-4691-aee1-3831428c04bd&sc_channel=el\" target=\"_blank\">点我访问</a></li>\n<li>用于在亚马逊云科技平台上开发和管理应用程序的工具包::<a href=\"https://aws.amazon.com/cn/developer/tools/\" target=\"_blank\">点我访问</a></li>\n</ol>\n"}