DDIA读书笔记【三、存储与检索】

  数据库主要分为传统的关系型数据库,和近些年流行起来的NoSql。

  举了个最简单的数据库例子,有点像我以前实现过的,持久化数据,不存入数据库,就在文件里弄个txt文件,用IO流每次在最后一行存个固定格式的数据。

  索引,可以增加数据库查询时的速度,但维护索引需要格外的开销与内存,在写入操作时也会增加时间。

  哈希索引, B树,LSM树(日志结构存储),介绍了每种的优缺点。关系型数据库好像用的就是B树

  数据仓库是一个独立的数据库,分析人员可以查询他们想要的内容而不影响OLTP操作。这是大公司才有的烦恼,怪不得我在工作中没怎么遇到这种问题。

  

  我们看到存储引擎分为两大类:优化 事务处理(OLTP) 或 在线分析(OLAP) 。这些用例的访问模式之间有很大的区别:

  • OLTP系统通常面向用户,这意味着系统可能会收到大量的请求。为了处理负载,应用程序通常只访问每个查询中的少部分记录。应用程序使用某种键来请求记录,存储引擎使用索引来查找所请求的键的数据。磁盘寻道时间往往是这里的瓶颈。
  • 数据仓库和类似的分析系统会低调一些,因为它们主要由业务分析人员使用,而不是由最终用户使用。它们的查询量要比OLTP系统少得多,但通常每个查询开销高昂,需要在短时间内扫描数百万条记录。磁盘带宽(而不是查找时间)往往是瓶颈,列式存储是这种工作负载越来越流行的解决方案。

  在OLTP方面,我们能看到两派主流的存储引擎:

  日志结构学派

  只允许附加到文件和删除过时的文件,但不会更新已经写入的文件。 Bitcask,SSTables,LSM树,LevelDB,Cassandra,HBase,Lucene等都属于这个类别。

  就地更新学派

  将磁盘视为一组可以覆写的固定大小的页面。 B树是这种哲学的典范,用在所有主要的关系数据库中和许多非关系型数据库。

  

原文地址:https://www.cnblogs.com/weixin-tt/p/13873233.html