【问题标题】:Operating systems vs. database management systems操作系统与数据库管理系统
【发布时间】:2019-06-25 01:14:50
【问题描述】:

背景:我是一名刚刚完成操作系统课程的学生,目前正在学习数据库课程。

我对操作系统和 DBMS 如何相互交互感到困惑。

例如,当用户程序尝试访问文件时会发生什么?系统调用是否被调用,然后由操作系统处理以查找正确的文件和数据?还是由 DBMS 处理调用,然后使用 B+ 树更有效地查找数据(元组/记录)?然后 DBMS 调用操作系统来实际获取数据?

是否只有使用 SQL 等编程语言才能访问数据库?如果我只是编写一个将文件写入磁盘的简单 C 程序,那么数据是真的存储在“数据库”中还是只是存储在磁盘上的某个块中,文件的信息存储在该文件的 inode 中?

如果这不是提出这个问题的正确论坛,或者这个问题太简单,我深表歉意。我尝试在网上查找,但令人惊讶的是没有找到太多信息(可能我搜索的关键词有误?)

【问题讨论】:

    标签: database operating-system


    【解决方案1】:

    例如,当用户程序尝试访问文件时会发生什么? 这取决于用户程序如何访问文件。 fopen/read/write 调用由操作系统管理的文件系统提供。

    是否调用了系统调用,然后由操作系统处理以查找正确的文件和数据? 如果使用数据库,则数据库管理它自己的一组数据文件,并对这些数据文件进行索引。数据库引擎执行由底层操作系统处理的 IO 请求。此外,数据库很可能还会做缓存以减少文件 IO。

    还是由 DBMS 处理调用,然后使用 B+ 树更有效地查找数据(元组/记录)?然后 DBMS 调用操作系统来实际获取数据? 根据数据库查询,可以按顺序读取数据,也可以通过索引查找随机访问数据。

    是否只有使用 SQL 等编程语言才能访问数据库?如果我只是编写一个将文件写入磁盘的简单 C 程序,数据是否真的存储在“数据库”中,或者只是存储在磁盘上的某个块中,文件信息存储在该文件的 inode 中? 它存储在可能使用基于块的设计的文件系统中。一个简单的 C 程序应该使用 SDK 连接数据库,然后调用 SQL 语句。

    希望这会有所帮助!

    【讨论】:

    • 如果DBMS有安全相关的特性,不应该是原生C不能访问的吗?
    【解决方案2】:

    答案实际上取决于操作系统和数据库系统。工业级操作系统支持多种文件结构和记录级锁定。数据库系统可以利用操作系统提供的锁定和索引功能。在这种情况下,大部分数据库通过调用操作系统的系统服务调用来工作。

    随着根本不支持记录的脑损伤操作系统的兴起,更不用说记录或列锁定了,数据库系统几乎可以完成除低级 I/O 调用之外的工作。一些操作系统严重受损,以至于数据库系统必须创建自己的分区并在分区内有效地管理自己的文件系统。从操作系统的角度来看,根本没有文件。

    【讨论】:

    • @user334403 你能提供这种“脑损伤操作系统”的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多