【问题标题】:How databases work? [duplicate]数据库如何工作? [复制]
【发布时间】:2013-09-04 07:32:55
【问题描述】:

我对数据库的工作方式有很多疑问。

  1. 某处是否有包含数据的文件?

  2. 如果有类似情况,这些记录是一起存储还是分开存储? Like table cars 全部在一个文件中,或者每一行都有一个文件。

  3. 如果每个文件有多个行,数据库如何并行更新同一个表中的不同行?例如来自不同来源的 100 个同时更新请求。

我在这里读到数据库通常使用二叉树,它们是否会重建它们,为每个请求从硬盘加载数据,然后在修改时保存?

谢谢。

【问题讨论】:

  • 作为一个对它的工作原理也知之甚少的开发人员,+1 表示好奇。
  • 所有这些问题的答案都是“视情况而定”。有很多类型的数据库,它们的实现方式也各不相同。
  • 您的问题取决于您所谈论的数据库。 SQL、MySQL、MSAccess 不胜枚举……您是否想到了特定的数据库?

标签: database database-design


【解决方案1】:

对数据库上文件的所有写入都被缓冲,并且每隔几秒(在定义的时间间隔内)以同步方式写入文件一次。

Oracle 使用重做日志在提交之前跟踪更新或插入。有一个重做日志缓冲区,它在内存中的定义时间间隔为 3 秒,并且每 3 秒作为单个进程写入文件。

【讨论】:

    【解决方案2】:

    如前所述,所有这些问题的答案都是“视情况而定”。有许多实现,它们在重要的细节上都有所不同。

    1. 一个或多个文件。这些文件的组织是与特定 DBMS 关联的“魔法酱”的一部分。

    2. 数据的存储方式略有不同,但可以说很少或没有 DBMS 每行使用一个文件进行一般工作。数十亿(万亿,...)记录的名称管理不值得考虑,除此之外。

    3. 这又是特定 DBMS 的“魔法酱”的关键部分。他们都这样做;有很多不同的方法可以做到这一点。 SQLite 使用与 Informix、DB2、Oracle、Sybase、MS SQL Server、MySQL、PostgreSQL、Teradata 完全不同的技术……使用了许多技术;有些使用锁定,有些使用基于时间戳或多版本并发控制。不同的 DBMS 有不同的序列化属性。

    我不知道使用纯二叉树的 DBMS。大多数 DBMS 提供多种不同的组织,但最常见的一种是 B+-tree(与二叉树相关但不同);另一个是各种哈希表组织。大多数 DBMS 的主要目标之一是避免经常从头开始重建事物,另一个是尽可能避免从磁盘读取——通过使用缓存等。同样,这是特定 DBMS 的“魔法酱”。

    【讨论】:

    • Informix使用的B+tree,服务器顺序扫描表时是否使用索引? BASIC 的大多数实现都提供以顺序或随机访问模式打开文件。
    • 这取决于查询——条件和要检索的数据。有时查询会扫描索引进行第一次过滤,只检索索引信息标识的少量记录的完整行(如果是仅索引查询,甚至根本不接触主要数据)。有时查询会扫描表——或者可能是表的范围分区片段——以获取数据。没有哪个最快的简单规则;这取决于统计数据和对每种策略成本的最佳估计。
    • 用户能否绕过优化器,定义自己的详细查询计划?这在某些情况下可能很有价值。
    • 这取决于 DBMS。您可能永远无法完全控制任何东西;他们只会按照他们允许的方式执行查询。您可以通过提示影响但不一定控制查询的执行方式——DBMS 之间的细节差异很大。不过,一般来说,您无法定义自己的详细查询计划。
    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多