《数据密集型应用设计》笔记
数据密集型应用
概念
对于一个应用系统,如果“数据”是其成败决定性因素,包括数据的规模、数据的复杂度或者数据产生与变化的速率等,我们就可以称之为数据密集型应用;与之相对的是计算密集型应用,CPU主频往往是后者最大的制约瓶颈。
重要模块
- 数据库:存储数据,方便下次访问。
- 高速缓存:缓存复杂或者操作代价昂贵的结果,加快下一次操作。
- 索引:用户可以按关键字搜索数据并支持各种过滤。
- 流式处理:持续发送消息至另一个进程,处理采用异步方式。
- 批处理:定期处理大量的累计数据。
三个重要需求
- 可靠性:即使发生故障,系统可以正常工作。故障包括硬件、软件、认为方面。容错技术可以更好地隐藏某种类型的故障,避免影响系统的工作。
- 可扩展性:负载增加时,有效保持系统性能的相关技术策略。对于可扩展的系统,增加处理能力的同时,还可以在高负载情况下持续保持系统的高可靠性。
- 水平扩展:将负载分布到多个更小的机器。
- 垂直扩展:将当前机器升级。
- 结合:将系统运行在一个节点上(采用垂直扩展),直到高扩展性或高可用性的要求迫使不得不做水平扩展。
- 可维护性:包括方便运营团队保持系统稳定运行;简化系统复杂性,使新工程师能够轻松理解系统;后续工程师能够轻松地对系统进行改进,并根据需求变化将其适配到非典型场景。
数据模型
概念
数据模型是数据库设计中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架。数据模型是数据库系统的核心和基础。
组成
-
数据结构:数据模型中的数据结构主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。
-
数据操作:数据模型中数据操作主要描述在相应的数据结构上的操作类型和操作方式。
-
数据约束:数据模型中的数据约束主要描述数据结构内数据间的语法、词义联系、它们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。
分类
- 关系模型
- 文档模型
- 图状模型
数据存储
概念
数据库的本质就是:向它插入数据时,它就保存数据;查询数据时,输出之前保存的数据。
数据库的种类
-
简单数据库
简单的数据库如下所示,当输入./db_test set <key> <Content>时插入内容,输入./db_test get <key>时会输出插入的内容。当数据量变大时,该数据库的效率会很低,查找key的时间复杂度为O(n)。-
优点
- 实现简单。
- 插入效率高。
-
缺点
- 查询效率低,查询时需要遍历所有的
Key,时间复杂度为O(n)。 key和Content存储在一起,当数据量增大时,数据不可能一次性全部读入内存中,可能查询涉及到多次磁盘IO。- 无法删除数据。
- 查询效率低,查询时需要遍历所有的
-
优化空间
- 1
-
实现
#!/bin/bash if [ $1 = set ] then echo "$2:$3" >> /home/hadoop/database elif [ $1 = get ] then grep "$2" database | cut -d':' -f2 else echo '参数错误,请输入set $1 $2 或者 get $1' fi
-
-
哈希索引数据库
将Key存储在Map中,此时的Map的Value为Content在磁盘中的偏移。- 优点
- 查询效率较无索引的数据库高,因为可以一次性读取一批
Map数据到内存中。
- 查询效率较无索引的数据库高,因为可以一次性读取一批
- 缺点
key的数量过多时,查询效率还是不高。- 删除数据不方便。
- 区间查询效率不高。
- 优化空间
Content可以使用<长度,内容>的方式存储在磁盘中。- 在
Content中设置删除标记,定时
- 优点
本文探讨了数据密集型应用的设计原则和技术要点,重点介绍了关键模块如数据库、高速缓存、索引、流式处理及批处理的作用。此外,还讨论了可靠性、可扩展性和可维护性等核心需求,并详细解释了数据模型的概念、组成及其分类。
1155

被折叠的 条评论
为什么被折叠?



