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

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 的盒子。

有帮助吗?

解决方案

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

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

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

祝你的项目好运。

其他提示

Postgresql 应该能够充分容纳您的数据 - 每张桌子等最多32吨等。 ),因此几乎所有数据库实际上都应该能够轻松容纳您。

仅供参考:Postgres比MySQL在多处理器 /重叠请求上要好,从几个月前阅读的评论来看(对不起,没有链接)。

我从您的个人资料中假设,这是某种生物识别(密码子序列,酶与蛋白氨基酸序列或某些此类问题)。如果您要通过并发请求攻击此问题,我会选择Postgres。

OTOH,如果将数据加载一次,然后用单个线程进行扫描,则可能是“酸不需要”模式中的mySQL是最好的匹配。

在选择“最佳”堆栈之前,您已经有一些计划要做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top