从DynamoDB到Cloud Spanner

郭斌

2020 年 9 月 02 日

从DynamoDB到Cloud Spanner

从使用 RDBMS 到采纳 NoSQL 的转变的背后,蕴藏着一种创新的权衡:放弃 RDBMS 之擅长,取而代之以 NoSQL 之创新;然而,太阳底下无新事。这种创新解决问题的同时也带来新的挑战。并且,这种创新的权衡似乎也在不停地找寻下一个平衡点或突破口。


例如,MySQL 数据库由于稳健的核心功能受到广泛的使用,但通常来说 MySQL 的单表的记录超过 5000 万行的时会出现性能上的瓶颈,这种情况下过去就有两种应对办法:“拆库拆表”;或者使用 NoSQL。其中,选用 NoSQl 的“童鞋”有选择文档型,也有选择键值型、宽列型等,这些 NoSQL 很好地解决了性能的横向扩展能力,但是又带来了一些新的问题。


最近刚好和一些朋友有聊到这些事情。这些朋友正在使用 DynamoDB 或者 Cassandra 数据库,如是就有了一些很有意思的讨论。


NoSQL 数据库基于内置的分片技术能够达到数据库的横向扩展,分片可以是基于范围的、哈希的、或者基于标签的等等。DynamoDB 和 Cassandra 有点像同门师兄弟,大概属于华山派的剑宗、气宗,他们使用和仅使用了基于哈希的分片,有一个学名叫做“Consistent Hash Sharding”,好处是片键的选择相对容易了,数据尽可能打散了,写入性能不错;但明眼人可能一下就会发现一个问题:基于哈希的分片是只能支持匹配查询的,不能够支持范围查询。没有了范围查询,可能很多业务上的需求满足起来就很费劲了。举个栗子,游戏的玩家信息存放在 DynamoDB 之中,其中包括玩家的年龄等;如果想查找出某个年龄段的玩家的信息都会很麻烦,很多时候干脆就把数据导出一份到其他数据库来做了。


NoSQL 数据库会使用到副本集、分布式一致性协议来实现数据的高可用性和故障的自动切换等。由于有多个副本,读取数据的时候有可能是从副本中读取的,再加上表和对应的索引之间可能的数据差距,会出现无法保证 RDBMS 中起码的“Read after Write”。这种情况下会对业务上的某些需求造成不小的实现难度。举个栗子,游戏玩家在战斗期间获得的点数这个场景是需要强一致性读的。


NoSQL 数据库对事务的支持始终会是一个挑战;通常来说 NoSQL 数据库支持单行的事务能够一定程度满足业务的需要,但是如果需要支持稍微复杂一些的事务,就需要在应用代码部分来实现。举个栗子,DynamoDB 中保存了玩家的游戏充值的点数,在充值或使用游戏充值会增加或减少点数,如何保证当前只有一个回话在操作某一个玩家的点数时,就需要在应用代码部分增加行的版本或时间戳的信息,在最后修改点数时候检查版本或时间戳信息,确保没有其他回话在修改同一玩家的点数。这样子做起来还是有一些繁琐,性能也容易出现问题。


当讨论到上面这些的话题时,接下来问题来啦,有没有什么更好的创新来解决上面的问题?也就是需要一个既支撑性能横向扩展,又兼顾对“强读”和事务的支持的数据库的服务。


Cloud Spanner 正是这样一种技术创新。它是如何解决上面的问题呢?Cloud Spanner 大概类似于天龙八部里面的“小无相功”,不着形相,既可以是 RDBMS,又可以是 NoSQL;为什么呢?首先,Cloud Spanner 实现了存储和计算资源的分离,这使得其更容易去融合 RDBMS 和 NoSQL 的特点,例如,计算上融合 RDBMS 的 SQL、事务等,存储上融合 NoSQL 的横向扩展能力;其次,Cloud Spanner 是云原生数据库,这就意味着它不仅仅是一个数据库软件,它是一个集成了计算、存储、网络、安全、前端、管理控制等为一体的数据库云服务,这使得其更容易地达到特性的工程实现和整合。这也正是云原生数据库的魅力所在!


补充说明 Cloud Spanner 的性能的横向扩展能力,每一个节点能够支撑 10,000 QPS reads 或 2,000 QPS writes,并且随着节点的增加实现性能的线性增长。


聊到这里,下一个问题可能是如何实现数据库迁移;下面以从 DynamoDB 迁移到 Cloud Spanner 为例。


数据库迁移概览



下面对于主要的数据库迁移的环节做更多的说明和描述。


模式转换


从简单的数据类型转换到复杂的数据类型,从 NoSQL 的反范式模型转换到 RDBMS 的通用的范式建模是一个从 Low Level 到 High Level 的模式转换,通常是非常容易的过程。





数据迁移


从 DynamoDB 到 Cloud Spanner 的数据迁移,主要分为初始复制和增量同步两个阶段,请参考下面的数据迁移的示意图。



应用改造


应用改造主要涉及到数据库访问层的改造。通常来说 DynamoDB 主要提供 Low Level 的 Read & Write 的 APIs,而 Cloud Spanner 提供了丰富的 Read & Write 的 APIs 以及事务管理;这使得基于 Cloud Spanner 实现相同的数据操作的业务逻辑时应用代码更为高效简洁。




演示


请观看数据迁移的演示:


00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.5x
    网页全屏
    全屏
    00:00


    总结


    一些客户正在进行从 DynamoDB 或者 Cassandra 到 Cloud Spanner 的数据迁移,这些客户中的很多名字都是耳熟能详。历史有无数个选择,而选择在每个人手中。Cloud Spanner 作为云原生数据库愿意更好地帮助你们解开束缚和推动创新。


    2020 年 9 月 02 日 10:46321

    评论

    发布
    暂无评论
    发现更多内容

    SpringBoot整合Mybatis-Plus 实战之动态SQL,Mybatis最拿得出手的功能之一

    比伯

    Java 编程 架构 面试 计算机

    江西吉安:一个上了区块链柚子的真情告白

    CECBC区块链专委会

    区块链 蜜柚

    架构师训练营 -week11-作业

    大刘

    极客大学架构师训练营

    稳坐开发领域霸主之位,揭秘C语言无可取代的几大原因!

    华为云开发者社区

    c go rust

    框架设计

    raox

    极客大学架构师训练营

    面对日益严峻的网络安全问题,CDN可以做什么?

    巨侠说

    周小川深度解读:DC/EP和数字人民币e-CNY

    CECBC区块链专委会

    数字人民币

    区块链商品追溯平台开发,区块链防伪追溯系统搭建

    13530558032

    自己搭建服务器需要多少钱?

    德胜网络-阳

    「五大常用算法」一文搞懂分治算法

    bigsai

    算法 分治算法;

    AOT星辰生态系统APP开发|AOT星辰生态软件开发

    开發I852946OIIO

    系统开发 现成系统

    “黑五”前夜的裁员:无接触配送大趋势为什么都带不动亚马逊无人机?

    脑极体

    一万字详解 Redis Cluster Gossip 协议

    程序员历小冰

    redis 分布式 redis cluster

    华为云&跟谁学|华为云API入门学习赛·AI人脸识别 未来工程师梦想的起点

    DT极客

    数字货币管理三大新模式

    CECBC区块链专委会

    数字货币

    当千行万业的轨道,换上智能云网的高铁

    脑极体

    构师训练营 - 第六周课后练习

    joshuamai

    《穿越数据的迷宫》笔记:第 2章 数据管理的挑战

    方志

    数据治理

    Spring AOP核心类解析,这是最全的一篇了!!

    冰河

    spring aop ioc 注解驱动 切面编程

    JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

    996小迁

    Java 架构 面试 调优

    将项目发布到 Homebrew 官方仓库

    郭旭东

    macos brew homebrew

    线程模型Reactor/Proactor的区别

    Linux服务器开发

    reactor 线程 多线程 Linux服务器开发 Proactor

    构师训练营 - 第六周学习总结

    joshuamai

    3本书免费学习数据科学与统计学

    计算机与AI

    统计学

    区块链版权应用搭建,区块链版权存证平台开发

    13530558032

    数据结构与算法总是不得门而入?来看看我是怎么学的吧

    linux亦有归途

    算法 C/C++ 数据结构与算法 算法工程师

    什么是KMP算法(详解)

    赖猫

    c++ Linux KMP

    区块链电子发票应用落地,区块链电子发票系统开发

    13530558032

    年轻人会用C++实现一种协程吗?

    ShenDu_Linux

    Linux 程序员 多线程 协程 什么是多线程

    LeetCode题解:51. N 皇后,回溯+哈希表,JavaScript,详细注释

    Lee Chen

    算法 LeetCode 前端进阶训练营

    2020亚马逊“黑五”再次成为亚马逊史上最大的年终全球狂欢

    爱极客侠

    从DynamoDB到Cloud Spanner-InfoQ