【问题标题】:Data Structures: Checking if a record exists in a database?数据结构:检查数据库中是否存在记录?
【发布时间】:2015-02-09 22:35:47
【问题描述】:

这是一个面试问题:“您将使用哪种数据结构来检查数据库中是否存在记录?”

我的直接答案是二叉搜索树。

面试官没有评论,继续下一个问题。这个问题的答案是什么?

【问题讨论】:

  • 关系型数据库使用的数据结构通常是B-Tree。
  • 您是否被问及将如何构建数据库,或使用数据库?
  • 其实是在建数据库的上下文中。
  • 在这类面试中,自信地迅速给出可接受的答案比给出完美的答案更重要。所以你肯定在这里标记点!话虽这么说,B-tree 会是一个更好的答案(b-tree 是二叉树的概括:en.wikipedia.org/wiki/B-tree,它可以有两个以上的节点)

标签: java c++ database data-structures


【解决方案1】:

有很多可以接受的答案,在这样的面试中,迅速而自信地提供一个可以接受的答案比给出完美的答案更重要。

Binary trees 绝对是一个有效的答案。那么恭喜!

但是对于数据库,更推荐B-trees(“B”代表“平衡”)。 B-tree 是二叉树的推广,其中每个节点有两个以上的子节点。这使得该数据结构更有效地优化磁盘读取访问。与二叉树相比,该结构还需要更少的重新平衡,这再次意味着更少的磁盘写入访问。

如果您对性能考虑感兴趣,this SO answer 会对两种结构进行有趣的比较。

现在,仅用于记录,在某些应用领域有更专业的结构,例如用于 3D 空间数据的 R-trees 或哈希表,如果您考虑寻找唯一键并准备牺牲一些空间以获得更快的速度.

编辑:一些流行数据库的例子(不详尽!):

  • sqllite 使用 b-trees(并具有 r-tree 扩展)
  • BerkleyDB 使用 B 树和哈希索引
  • MySQL 使用 B-trees 和 hashes(ans 也有 r-trees)
  • Postgresql 使用 B-tree、r-tree、哈希和其他几种
  • SQLserver 显然也使用了 B 树

【讨论】:

  • 那么,数据库是使用平衡二叉搜索树实现的吗?
  • 高级数据库使用多种索引技术来利用数据特性)。但是 B-tree 及其变体被大量使用。例如,您可以看看 sqllite (sqlite.org/fileformat2.html#btree)
【解决方案2】:

这个问题有很多答案,这完全取决于这条记录究竟包含什么以及你想用它做什么。

我会回答 hash table,因为摊销案件的搜索时间非常快( O(1) )。它还具有快速插入和删除的额外好处。

如果您计划对整个记录进行操作(即第 n 个最小的薪水),二叉搜索树效果很好,但如果您所做的只是搜索数据库是否存在,那么您将查看更长的时间搜索的运行时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多