3

我有一个项目,我正在对一个大型数据库进行数据挖掘。我目前将所有数据存储在文本文件中,我试图了解存储数据关系数据库的成本和收益。这些点看起来像这样:

CREATE TABLE data (
    source1 CHAR(5),
    source2 CHAR(5),
    idx11   INT,
    idx12   INT,
    idx21   INT,
    idx22   INT,
    point1  FLOAT,
    point2  FLOAT
);

我可以在合理的表现下获得多少分?我目前有大约 1.5 亿个数据点,我可能不会超过 3 亿个。假设我使用的是具有 4 个双核 2ghz Xeon CPU 和 8GB RAM 的盒子。

4

3 回答 3

7

PostgreSQL应该能够充分容纳您的数据——每个表最多 32 TB,等​​等。如果我理解正确,您说的是当前 5 GB,最大 10 GB(大约 36 字节/行,最多 3 亿行),因此几乎任何数据库实际上都应该能够轻松容纳您。

于 2009-07-16T21:30:57.327 回答
3

仅供参考:Postgres 在多处理器/重叠请求上的扩展性比 MySQL 更好,这是我几个月前阅读的一篇评论(抱歉,没有链接)。

我从您的个人资料中假设这是某种生物特征(密码子序列、酶与蛋白质氨基酸序列或类似的)问题。如果你打算用并发请求来攻击这个,我会选择 Postgres。

OTOH,如果数据将被加载一次,然后由单个线程扫描,那么“不需要 ACID”模式下的 MySQL 可能是最佳匹配。

在选择“最佳”堆栈之前,您已经计划好在访问用例的情况下做一些事情。

于 2009-07-17T18:36:55.273 回答
2

MySQL 完全能够满足您的需求以及 Alex 对 PostgreSQL 的建议。合理的性能应该不难实现,但是如果表将被大量访问并且有大量的 DML,您将想更多地了解您最终选择的数据库使用的锁定。

我相信 PostgreSQL 可以开箱即用地使用行级锁定,而 MySQL 将取决于您选择的存储引擎。MyISAM 仅在表级别锁定,因此并发性受到影响,但 InnoDB for MySQL 等存储引擎可以并且将使用行级锁定来增加吞吐量。我的建议是从 MyISAM 开始,仅当您发现需要行级锁定时才迁移到 InnoDB。MyISAM 在大多数情况下都能很好地工作,并且非常轻巧。我使用 MyISAM 在 MySQL 中拥有超过 10 亿行的表,并且通过良好的索引和分区,您可以获得出色的性能。您可以在 MySQL Storage Engines中阅读有关 MySQL 中存储引擎的更多信息,在Table Partitioning中了解有关表分区的信息。这是一篇关于实际上,您可能会发现在 113M 行的表上的分区也很有用。

我认为将数据存储在关系数据库中的好处远远超过成本。一旦您的数据在数据库中,您可以做很多事情。时间点恢复、确保数据完整性、更细粒度的安全访问、数据分区、通过通用语言对其他应用程序的可用性。(SQL) 等等等等。

祝你的项目好运。

于 2009-07-17T00:09:09.097 回答