【问题标题】:Database choice for large data volume?大数据量的数据库选择?
【发布时间】:2010-10-12 09:09:37
【问题描述】:

我即将开始一个新项目,该项目应该有一个相当大的数据库。

表的数量不会很大(

估计该表中的数据量将以每天 500.000 条记录的速度增长,我们应该至少保留 1 年 以便能够做各种报告。

需要有(只读)复制的数据库作为备份/故障转移,并且可能用于在高峰时间卸载报告。

我没有使用大型数据库的第一手经验,所以我问那些拥有哪种数据库的数据库是这种情况下的最佳选择。我知道 Oracle 是安全的选择,但如果有人有类似设置的 PostgresqlMysql 经验,我会更感兴趣。

【问题讨论】:

    标签: database data-warehouse evaluation


    【解决方案1】:

    我在每天看到 100K-2M 新行的环境中使用 PostgreSQL,大多数都添加到一个表中。但是,这些行往往会缩减为样本,然后在几天内删除,因此我无法谈论超过 1 亿行的长期性能。

    我发现插入性能相当合理,尤其是在您使用批量复制的情况下。查询性能很好,虽然计划者做出的选择有时让我感到困惑;特别是在执行 JOIN/EXISTS 时。我们的数据库需要定期维护(VACUUM/ANALYZE)以保持其平稳运行。我可以通过更仔细地优化 autovacuum 和其他设置来避免其中的一些问题,如果你不做很多 DELETE,这不是什么大问题。总的来说,我觉得在某些方面配置和维护起来比应有的要困难。

    我没有用过Oracle,MySQL只用于小数据集,所以无法比较性能。但 PostgreSQL 对于大型数据集确实工作

    【讨论】:

      【解决方案2】:

      您有“The Data Warehouse Toolkit”的副本吗?

      建议执行以下操作。

      1. 将事实(可测量的、数字的)值与限定或组织这些事实的维度分开。一张大桌子并不是最好的主意。它是一个主导设计的事实表,加上许多小维度表以允许对事实进行“切片和切块”。

      2. 将事实保存在简单的平面文件中,直到您想要执行 SQL 样式的报告。不要创建和备份数据库。创建和备份文件;仅为必须从 SQL 执行的报告加载数据库。

      3. 在可能的情况下创建摘要或额外数据集市以进行分析。在某些情况下,您可能需要将整个内容加载到数据库中。如果您的文件反映了您的表设计,则所有数据库都有批量加载工具,可以从文件中填充和索引 SQL 表。

      【讨论】:

      • 目前,我只将数据存储到文件中,每天大约有 50k 新条目。现在我想使用这些数据进行报告。大多数情况下,报告查询将是聚合的,因为它只包含 3 到 4 个字段,所以没有加入。你有什么建议??
      【解决方案3】:

      Google 的BigTable databaseHadoop 是两个可以处理大量数据的数据库引擎。

      【讨论】:

      • 那些不是 SQL 数据库。他们在报道方面的表现如何?
      • 我没有直接编程这两个引擎的经验,但是从我在线阅读论文中收集的信息来看,在从大型数据库中选择特定数据时,它们比 SQL 具有优势。我会在家里的硬盘里找文件,看看能不能贴在这里。
      • 可以在 Google AppEngine 之外使用 BigTable 吗?
      【解决方案4】:

      数据量(每年 2 亿条记录)并不大,应该与任何标准数据库引擎一起使用。

      如果您不需要关于它的实时报告,则该案例会更容易。我会在其他服务器上镜像和预聚合数据,例如每日批次。就像 S.Lott 建议的那样,您可能想了解一下数据仓库。

      【讨论】:

      • 还有其他的考虑可以简单的“能不能存储200m条记录”。当然,大多数数据库都可以处理这个问题,但并不是所有数据库都能处理得一样好,这正是 OP 所要求的。我已经为此使用了 MySQL 和 PostgreSQL,而 PostgreSQL 胜出。根据我的经验,PG 在大型表上运行查询(尤其是复杂的查询)的速度更快,并且可以更快地转储/加载其内容。
      【解决方案5】:

      关于 Google BigTable 的一些有趣的点是...

      Bigtable 与 DBMS

      • 查询速度快
      • 无连接,无 SQL 支持,面向列的数据库
      • 使用一个 Bigtable 而不是多个规范化表
      • 在传统观点中甚至不在 1NF 中
      • 旨在支持历史查询时间戳字段 => 这个网页昨天是什么样子的?
      • 数据压缩更容易——行稀疏

      正如您提到的,我强调了联接和无 SQL 支持,您将需要运行一系列报告。如果您在哪里使用它,我不知道您没有能力执行此操作会对您运行报告产生多大影响(如果有)。

      【讨论】:

        【解决方案6】:

        我们将Firebird 用于一个非常庞大的数据库(现在保存数据超过 30 年)并且它的扩展性非常好。

        最好的一点是您有要配置的属性,但与 Oracle 不同的是,您安装了它,它运行良好,无需在使用前开始配置。

        【讨论】:

          猜你喜欢
          • 2012-04-18
          • 1970-01-01
          • 2015-04-12
          • 1970-01-01
          • 1970-01-01
          • 2012-06-13
          • 1970-01-01
          • 2013-08-03
          • 2010-12-24
          相关资源
          最近更新 更多