1. 面向行的数据库(row-oriented)按行存储,把一条记录的所有属性(列)存储在一起。-- value-based storage structure
传统关系数据库的典型应用场合是OLTP(On-Line Transaction Processing )领域,这些领域以事务处理为主,包括数据的增加、删除、修改、查询。
2. 面向列的数据库 (column-oriented)典型应用场合是OLAP(On-Line Analysis Processing),因此面向列的架构设计非常适合于数据仓库的应用。
面向列的数据库将行分解成多个数据元素,并且储存的数据库元素对应于所有的行。这种分解的方法本质减少了存储量-- 甚至比压缩算法更好。大部分的分析查询都只需要读取某一个(或者几个)表的几列,而不需要像传统以行为导向的数据库那样需要扫描整个表的数据,这两者IO量的差距是非常大的。
什么情况下用column-oriented存储?1. 在较少的列上aggregate跨多行:列式存储只读全部数据集的一个子集,而不用扫描全部table;
2. 当需要一次在一个列上insert/update多行new values。
3. Storage efficiency:压缩效率远高于行式存储。由于列数据是uniform type,可以利用similarity of adjacent data进行压缩。(但是这种adjacent compression,相应地造成了random access的困难性,需要额外的机制来保证对压缩数据的访问。)
什么情况下用row-oriented存储?1. 当需要一次操作单行的多列,尤其当单行size较小时,可以retrieved with a single disk seek;
2. 当insert一整行时。
参考:
http://en.wikipedia.org/wiki/Column-oriented_DBMS部分信息摘自:
http://www.yeeach.com/2009/10/04/row-oriented-database-%E3%80%81column-oriented-database-%E3%80%81key-value-store-database-%E3%80%81document-oriented-database/
https://wap.sciencenet.cn/blog-425672-314003.html
上一篇:
Modeling in NoSQL下一篇:
cloud computing topics