【问题标题】:How do the newer database models achieve better scalability and performance as compared to a traditional RDBMS implementation?与传统的 RDBMS 实现相比,较新的数据库模型如何实现更好的可扩展性和性能?
【发布时间】:2010-08-15 20:00:10
【问题描述】:

我们有

所有目标都朝着一个共同目标 - 使数据管理尽可能具有可扩展性。

我理解的可扩展性是,当数据量增加时,使用成本不应大幅上升。

当数据量很大时,RDBMS 会很慢,因为间接数不变的增加会导致更多的 IO。

这些自定义可扩展的友好数据管理系统如何解决问题?

这是来自this document 解释 Google BigTable 的图:

在我看来是一样的。 超可扩展性是如何实现的?

【问题讨论】:

  • 他们放弃了“R”。它们是键/值对数据库。没有 SQL
  • 那么,它如何更好地扩展?
  • 无连接。但是它们通常存储非常非结构化的数据。 youtube.com/watch?v=LhnGarRsKnA
  • 考虑 RDBMS 中的 b*tree 索引的大小随着数据量线性增加而呈对数增加。所以我们不要假装 RDBMS 不能扩展;它们不能很好地扩展相对非结构化的数据,人们想要搜索任何东西。
  • @Adam 没有什么可以很好地适应“相对非结构化的数据,人们想要搜索任何东西”。事实上,RDBMS 比非相关数据库更能回答这样的查询(尽管速度很慢)。

标签: database algorithm database-design rdbms bigtable


【解决方案1】:

“传统的”SQL DBMS 市场实际上意味着极少数产品,这些产品传统上针对企业环境中的业务应用程序。大规模的无共享可扩展性历来不是这些产品或其客户的优先事项。因此很自然地出现了替代产品来支持互联网规模的数据库应用程序。

这与这些新产品不是“关系”数据库管理系统这一事实无关。关系模型可以像任何其他模型一样进行扩展。可以说,关系模型比网络(基于图)模型更适合这些类型的大规模可扩展应用程序更好。只是SQL语言有很多缺点,目前还没有人提出合适的relational NOSQL(非SQL)替代方案。

【讨论】:

    【解决方案2】:

    具体谈到您关于 Bigtable 的问题,不同之处在于上图中的层次结构就是全部。每个 Bigtable tabletserver 负责一组 tablet(来自表的连续行范围);从 row range 到 tablet 的映射保存在 metadata 表中,而从 tablet 到 tabletserver 的映射在 Bigtable master 的内存中维护。查找一行或一系列行需要查找元数据条目(几乎肯定会在托管它的服务器上的内存中),然后使用它来查找负责它的服务器上的实际行 - 导致只有一次或几次磁盘寻道。

    简而言之,它可以很好地扩展的原因是因为它可以投入更多的硬件:给定足够的资源,元数据总是在内存中,因此不需要为它去磁盘,只为数据(也并非总是如此!)。

    【讨论】:

      【解决方案3】:

      这是关于使用廉价的商品硬件来构建网络/网格/云并传播数据和负载(例如使用 map/reduce)。

      在我看来,RDBMS 数据库就像(最初)设计为在一台超级计算机上运行的软件。您可以使用各种硬盘阵列、数据库集群,但仍然......

      数据量增加了,因此在设计新的数据存储时考虑到这一点还有一个理由 - 可扩展性、高可用性、TB 级数据。

      另一件事 - 如果您使用便宜的服务器构建网格/云,它具有容错性,因为您将所有数据存储在三个 (?) 不同的位置,同时它很便宜。

      回到您的图片 - 第一张来自一台计算机(通常),第二张来自计算机网络。

      【讨论】:

        【解决方案4】:

        关于可扩展性的一个理论答案是http://queue.acm.org/detail.cfm?id=1394128 - ACID 保证很昂贵。请参阅http://database.cs.brown.edu/papers/stonebraker-cacm2010.pdf 以获得反驳。

        事实上,仅仅在电源故障中幸存下来是很昂贵的。多年前,我将 MySQL 与 Oracle 进行了比较。 MySQL 比 Oracle 快得令人难以置信,但我们无法使用它。那时的 MySQL 是建立在 Berkeley 之上的 DB,它比 Oracle 完整的基于日志的数据库要快几英里,但是如果在基于 Berkely DB 的 MySQL 运行时断电,当电源重新打开时,这是一个手动过程来使数据库再次保持一致,而你' ld 可能会永远丢失最近的更新。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-06
          • 2014-07-09
          • 1970-01-01
          • 2013-12-02
          • 2013-12-23
          • 2012-01-03
          • 1970-01-01
          相关资源
          最近更新 更多