欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

另一条路去IOE:全内存数据库弯道超车

程序员文章站 2022-06-03 21:04:55
...

文 / 何鸿凌,作者就职于中国移动集团公司业务支撑系统部,从事大数据平台规划工作,微博@BigData分析 老祖宗留下了《易经》这本书,告诉我们世界的本质是“变化”的,“变化”之间有相关性。比如云计算的兴起是由于计算机的带宽快速增加引起的,大数据的兴

文 / 何鸿凌,作者就职于中国移动集团公司业务支撑系统部,从事大数据平台规划工作,微博@BigData分析

  老祖宗留下了《易经》这本书,告诉我们世界的本质是“变化”的,“变化”之间有相关性。比如云计算的兴起是由于计算机的带宽快速增加引起的,大数据的兴起是由于数字化进程引发的。

  当今的IT界最重要的“变化”就是摩尔定律。曾几何时,程序员们沉醉于用C语言精妙的语句节省了数KB内存空间,现在大家都用上了逻辑更加清楚、更易于大规模协作的JAVA,而对语言效率看得不那么重要。计算和存储能力变得越来越廉价的“变化”引发了其上软件产品的“变化”。

  软件产品构建在以CPU、内存、外存(磁盘)为边的三角形之上。摩尔定律对三条边的影响程度各有不同。内存的性价比每15个月倍增,CPU的性价比每18个月倍增,但磁盘存储(主要的外存)的性价比增长并不遵循摩尔定律(因为它是磁的不是晶体管的)。更加重要的是:内存带宽的增长是符合摩尔定律的,而磁盘的带宽(从IDE到SATA、SAS)提升速度甚至还落后于磁盘容量性价比的提升。

  因此,代表内存的那条边伸长得太快以至于三角形无法维持其形状,构建在上面的软件产品面临惨烈的“颠覆”,以ORACLE为代表的数据库软件(DBMS)首当其冲,因为它们是数据密集型的。按照数据库使用内存和外存的特点,可以分为三个时期:

  内存昂贵的时期:摩尔定律的效果还在累积,内存远比外存昂贵。大部分的数据、索引、日志和临时空间都只能放在外存磁盘之上,内存起到的作用只是缓存。ORACLE、DB2、SYBASE等皆是在这个时代的产物,遗憾的是它们似乎历史的包袱太沉重,现在大半个身子还停留于此时代,怪不得数据库大师Mike.Stonebraker称他们为30年前的技术。

  SSD外存崛起的时期:后SSD逐渐成为可选择外存之一,而SSD的容量性价比是符合摩尔定律的,带宽提升也非常快(如PCIE接口)。于是业界有一些改进尝试。比如阿里巴巴当前的交易系统在去IOE后是采用的MYSQL数据库Sharding方案,并将数据“全部”存储在PCIE接口的SSD上。各传统数据库也发展出自己的StorageGroup方式来支持支持SSD做“热”数据存储的选项。比如Oracle推出了一体机Exadata,可以选择将“部分”数据缓存到到SSD上,但其大规模的存储还是利用磁盘。另外有一些技术型公司,如沃趣科技,推出了将Oracle的“全部”数据放到SSD上的方案,取得了很好的效果。

  内存颠覆外存的时期:全内存数据库其实早就出现了,例如被Oracle收购的TimeTen、被DB2收购的SolidDB、韩国的AltiBase等,但是由于之前内存还是一个比较昂贵的选择,因此内存数据库只是小规模使用。随着摩尔定律效应的累计,内存的价格持续下降、速度持续增加,量变成为质变,VoltDB、HANA、MemSQL等一系列练就了独门功夫的内存数据库如雨后春笋般出现。他们的共同特点就是所有数据都存储在内存中。这其中每个数据库又有自己的特点,比如VoltDB颠覆了原有数据库设计理论,通过全局时钟和预编译的方法来进行并发控制,避免了锁等开销,很好地适应了OLTP类应用;HANA通过内存列存储和极限压缩来支持更快的大数据分析任务;MemSQL重新设计了Mysql的存储引擎部分,使之更加适应内存。

  我们现在已经可以清楚地看到内存替代外存的趋势,因此可以断言:今后内存将是存取数据、索引的主要发生地,而不仅仅是缓存某些数据。SSD可能会作为快速数据持久化的手段,保证断电以后当前数据的安全。而速度更慢的机械磁盘可能作为备份的手段,替代磁带保证历史数据的可用性。

  如果认可而摩尔定律推导的这个趋势,就必须审视它会对未来的系统架构和软件带来何种的影响。预写日志、日志检查点、回滚和前滚、B树索引等现有数据库特性都是基于使用机械磁盘的假设。机械磁盘寻道时间长故随机存取速度慢,这与SSD和内存等高速随机存取器有非常大的差别。为了适应机械磁盘的特点,数据库管理系统(DBMS)利用了大量的代码将随机存取变成顺序存取。比如日志,一个事务写一次日志很自然,但是为了要顺序存取,就要缓存一批日志再一次性写入磁盘。这就又带来了事务持久化的新问题,因此需要大量的代码为之服务。B树索引也是为磁盘顺序存取优化的,在SSD和内存等随机存取器中显得完全没有必要。

  如果要使用高速且随机存取的内存作为主要存储器,那么最好对整个数据库的架构进行全新的设计。可以看到VoltDB和HANA正是这样做的,抛弃了很多传统的包袱,轻装上阵。Oracle和DB2的历史包袱太沉重,他们不可能抛弃自己的遗产,只能采取优化的方式,比如ORACLE12c中也推出了内存列存储,DB2新的BLU特性也允许激进地使用内存,但其底层的数据存储,还是为机械磁盘来优化的。

凯文.凯利说颠覆总是从边缘开始,因为只有抛弃传统、独辟蹊径,才能发现新的技术范式,在数据库领域也是如此。可以预测要不了几年,内存数据库就会从事务处理系统开始全面取代磁盘数据库的领先地位。很高兴的是,我们看到联想、华为、南大通用等国内的软件公司已经认识到这一点,已经在内存数据库方面进行了颇多的探索,有的已经有了相应的产品。南大通用最近准备筹资5000万用于内存数据库产品的进一步研发。

  看到未来的趋势,顺应潮流,拥抱变化的世界,这种方式的“去IOE”是弯道超车。这是《易经》告诉我们的道理。