自 1970 年以来,关系数据库用于数据存储和维护有关问题的解决方案。大数据的出现后, 好多公司实现处理大数据并从中受益,并开始选择像 Hadoop 的解决方案。Hadoop 使用分 布式文件系统,用于存储大数据,并使用 MapReduce 来处理。Hadoop 擅长于存储各种格式 的庞大的数据,任意的格式甚至非结构化的处理。
Hadoop 的限制
Hadoop 只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集, 即使是最简单的搜索工作。当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的 数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。
Hadoop 随机存取数据库
应用程序,如 HBase,Cassandra,CouchDB,Dynamo 和 MongoDB 都是一些存储大量数据和 以随机方式访问数据的数据库。
Hadoop 的特点:
对于任意格式的庞大数据集,Hadoop 可以做到安全存储 但是对于需要在庞大数据集做针对于单条记录的增删改查是做不到的。
Hive 的特点:
对于存储在 HDFS 上的结构化的数据,如果增加一些描述这些数据的元数据信息,那么我们 可以把存储在 HDFS 上的数据抽象成一张二维表格,使用 Hive 进行各种 Insert/Select 操作。 但是 Hive 还是天生不支持对于单条记录的增删改查,也不是设计用来做单条记录的增删改 查的。
总结:
(1)海量数据量存储成为瓶颈,单台机器无法负载大量数据
(2)单台机器 IO 读写请求成为海量数据存储时候高并发大规模请求的瓶颈
(3)随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服 务可以增加/删除,而目前的关系型数据库更专注于一台机器
重要问题探讨:
如何设计一个能存储庞大数据集,同时也能做到实时增删改查的数据库系统? 相当于设计一个 MySQL 的分布式版本。 先解决这个问题,再来学习别人的成果,这是一种较好的学习方式。而不是一上来便学习别 人的成功。须知:已掌握的知识会限制我们的思维方式。
类似问题:
1、如何设计一个分布式文件系统?
2、如何设计一个分布式计算框架?
3、如何设计一个分布式数据库? 他们的难点是什么?
思路引爆点:
1、怎样快速判断一个元素在不在一个数据集中?布隆过滤器
2、是否能找到一种合适的数据结构和搜索算法能快速从一个数据集中找出一个元素?二分 查找
3、如何设计分布式系统?网络编程模型(NIO RPC Netty)
4、是否可以提前过滤不参与查询的数据,提高查询效率?列裁剪