天天看点

有关 File System 和 Database 的一些随笔

文章目录

    • File System v.s. Database
    • 关系型 v.s NoSQL Database

File System v.s. Database

常常对 文件系统 File System 和 数据库 Database 的概念有所混淆,在存储系统愈发复杂的今天,常常有对这两者的混淆和混用,在这里基于看过的文献和 industry 用语,记录下自己理解的含义:

  • 文件系统 File System:本地文件系统;高层并行/分布式文件系统
    • |0| 本地文件系统 是包装在裸块设备上(block devide)的,用于对上提供标准POSIX API使应用能够管理和使用存储设备
    • |1| 文件系统中间层 是在本地文件系统和应用程序之间插入的中间层,用于为本机/多节点集群(并行/分布式)优化调度 IO issues,提高性能
      • 可以整合入 OS kernel,实现则较为困难、灵活性低,是最硬核的选择
      • 可以应用态文件系统方式挂载运行(FUSE1),性能则会收到 FUSE 多层 overhead 的拖累
      • 可以应用动态库 library 方式实现,此时则 generality 打折扣,需要用户 application 重新链上这个库重新编译
  • 数据库 Database:后端可以建立在本地文件系统上 / 直接于裸设备上;对象存储 KV Store
    • |1| 立于本地文件系统的数据库 和文件系统中间层类似,是建立在 POSIX API 之上新加的一层数据管理,用以统一数据格式,规范应用的数据读写,提供 In-memory cache policy 提高小范围数据索引的性能。传统数据库一般都以应用程序的形态运行
    • |0| 直接管理裸设备的数据库 则是在上述数据库系统性能不佳的情况下,由 Oracle 开始支持的直接操作裸块设备的数据库(现在好像凉了?)
    • |0/1| 对象存储数据库(Key-Value store,Object storage) 是建立在最新的对象存储设备上的 / 模拟于 local FS 上的,以 NoSQL 主义2 为指导的新型数据库,是现今研究热点之一(主要得益于 NVM 的火热)

关系型 v.s NoSQL Database

  • 关系型数据库(SQL-like,Relational):传统意义上的“数据库”,表式存储,提供丰富语义(如

    where

    ),transactions 必须满足 ACID 四原则3;主要问题是高并发时性能低下
  • 非关系型数据库(NoSQL, Key-Value, Object storage):键值对形式的非固定格式存储,可以放松 “C”(Consistency) 要求,不支持如 SQL 这般丰富的语义;优势是并发处理能力高,尤其是 对下适配 NVM 存储 + 对上适配一致性要求没有这么严格的(允许一定的生效延迟的)互联网应用场景
  1. https://en.wikipedia.org/wiki/Filesystem_in_Userspace ↩︎
  2. https://en.wikipedia.org/wiki/NoSQL ↩︎
  3. https://en.wikipedia.org/wiki/ACID ↩︎