41

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

表的数量不会很大(<15),大部分数据(99%)将包含在一个大表中,几乎是插入/只读(无更新)。

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

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

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

4

6 回答 6

28

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

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

我没有使用 Oracle,MySQL 仅用于小数据集,因此无法比较性能。但 PostgreSQL 确实适用于大型数据集。

于 2009-03-10T15:02:16.523 回答
8

您有“数据仓库工具包”的副本吗?

那里的建议是执行以下操作。

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

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

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

于 2009-03-10T10:05:23.227 回答
6

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

于 2009-03-10T09:36:42.453 回答
6

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

Bigtable 与 DBMS

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

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

于 2009-03-10T10:00:07.343 回答
6

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

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

于 2009-03-10T10:43:17.910 回答
5

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

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

于 2009-03-10T09:41:26.203 回答