Hbase-简介-海量数据与RDBMS的问题

来源:互联网 发布:c语言考试软件 编辑:程序博客网 时间:2024/05/28 16:06

为什么要设计一套新的存储架构?
RDBMS在某些特殊的场景不是最好的解决方案。


海量数据
现在,我们都希望通过互联网检索到问题的答案,并且这个答案对我们有用,切合需要。
因此,许多公司致力于提供更多针对性的信息。例如,推荐和在线广告。Hadoop这样的系统能提供存储和处理PB级数据的能力,随着新机器学习的算法更新,收集数据的需求也在提升。
以前,因缺少划算的方式来存储所有信息。而忽略了某些数据源。现在这样处理会让公司缺少竞争力,存储和分析每一个数据点的需求在不断增长
过去,唯一的选择是将收集到的数据进行删减再存储。但它无法保存几个月或几年的数据。建议:构建一种数学模型覆盖整个时间段或者改进算法,重跑以前所有的数据,以达到更好的效果。
大数据时代的数据是有价值的。
Hadoop项目(模块HDFS和MapReduce)是一个存储和处理一体的系统。它擅长存储任意的结构化和非结构化数据,可在分析数据时决定如何解释这些数据,同样允许用户随时更改数据分类的方式,一旦更新了算法,只需要重新分析数据。
Hadoop是现有数据库的一种补充,它给用户提供了数据存储的无限空间,支持数据在恰当的时候存储和获取数据,并针对大文件的存储、批量访问和流式访问做出了优化。(这使数据分析变得简单快捷)用户最终还是要访问最终结果,这是随机访问,这种模式相当于在数据库中全表扫描和使用索引。
通常用户在随机访问结构化数据时会查询数据库。RDBMS尤为突出。大多RDBMS都是遵守科德十二定律,这个定律对于RDBMS是一个刚性标准。
其它处理方法,列式存储(column-orientwd)和大规模并行处理数据库,满足新的工作负载,但大多的解决方案仍然基于科德十二定律。


列式存储数据库
列式存储数据库以列为单位聚合数据,将列值顺序地存入磁盘。
行式存储,连续的存储整行。
列式数据库基于一种假说:对于特定的查询,不是所有的值都必需。尤其是分析数据库。
这种新型的设计中,减少I/O,列的数据类型相似便于压缩,(好的压缩利于在返回结果时降低带宽的消耗)

从典型的RDBMS的角度,Hbase不是一个列式存储数据库,但它利用了磁盘上的列存储格式,这是RDBMS与Hbase最大的相似,不同之处在于RDBMS比较适合实时存储数据的场景,Hbase比较适合键值对的数据存取。


关系数据库系统的问题
RDBMS在实际和实现商业应用方面很重要。只要用户需要保留信息,就会采用一些存储后端为前端应用服务器提供持久化数据的服务。这种结构适合有限的数据量。(数据剧增的情况就显得力不从心)
数据库的内置功能

  1. 存储过程:数据系统需要保持多张表的一致性时,存储过程可解决多个客户端同时更新数据一致性。
  2. 事物:提供原子性跨表更新的特性,(RDBMS提供了ACID特性
  3. 参照完整性:约束不同表结构之间的关系,利用特定语言还能写出任意复杂的查询语句。

最终用户不需要关心数据怎么存储,只需要关心更高层次的概念。例如,表结构,表结构在应用程序中提供了非常固定的模型。


我们使用LAMP建站,随着网站用户数量增加,共享数据库的压力越来越大。(1)增加服务器的数量较容易,因为应用服务器共享中央数据库,但随着共享中央数据库的CPU和I/O负载上升,终将难以承受。(2)减少压力的第一步是增加用于并行读取的从服务器,将读写分离。主服务器只服务于写请求,这样考虑网站请求主要由浏览产生,写远少于读。用户量增加依然失败,或者降低了性能。(3)增加缓存,如Memcached,将读操作接入‘缓解读请求’到高速的在内存中缓存数据的系统中,但这样无法保证数据的一致性,因为数据库不会主动更新缓存系统中的数据,所以需要尽可能快的同步缓存和数据库视图,把缓存和数据库更新的时间差最小化。写请求问题依然没有解决。一旦主服务器写性能下降,可垂直扩容,加强服务器。

这些一切都随着用户增加,而失败(SQL join变慢,无法执行),这时就不得不采取反范式化存储结构。如果情况变化就不得不停止使用存储过程,因为存储过程会慢的无法执行。
负载的不断提高,合乎逻辑的方式就是预先实现昂贵的查询方案,以提供用户更快的数据服务。最终放弃辅助索引的使用,因为随着数据量增大,辅助索引量也大到足以让数据库的性能直线下降。最后只能提供的查询模式只剩下按照主键查询


这时怎么办?负载继续增加啦?
此时可考虑将数据分区(sharding)到多个数据库中,但这个方法运维操作会变成噩梦,代价昂贵。

sharding分区
分区主要是描述了逻辑上的水平划分数据的方案。特点是将数据文件或者分服务器存储而不是连续存储。
数据分区是在固定的范围内实施,如一个水平划分超过提供容量,就需要数据重分区并迁移数据。重分区并迁移数据是非常消耗资源的操作,等于数据重做
分区是简单的完全脱离用户操作的事后操作,如没有数据库的支持,可能会对生产系统造成严重的破坏。

Mysql
安装和使用都已经非常的简洁,相关资料和范例也很充分。这个数据库适合特定的场合,短期不会被取代。开发应预料系统拓展速度快慢。

原创粉丝点击