开源数据库中行数的上限?

时间:2009-07-16 21:19:39

标签: sql mysql database postgresql relational-database

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

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:2)

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

我相信PostgreSQL可以使用开箱即用的行级锁定,MySQL将依赖于您选择的存储引擎。 MyISAM只锁定在表级别,因此并发性受到影响,但是InnoDB for MySQL等存储引擎可以并将使用行级锁定来提高吞吐量。我的建议是从MyISAM开始,只有当你发现需要行级锁定时才转移到InnoDB。 MyISAM在大多数情况下运行良好,重量极轻。我使用MyISAM在MySQL中拥有超过10亿行的表,并且具有良好的索引和分区功能,您可以获得出色的性能。您可以在MySQL中阅读有关MySQL存储引擎的更多信息 MySQL Storage Engines以及Table Partitioning处的表格分区。这是一篇关于partitions in practice on a table of 113M rows的文章,您可能会觉得它很有用。

我认为将数据存储在关系数据库中的好处远大于成本。一旦数据在数据库中,您就可以执行许多操作。及时恢复,确保数据完整性,更细粒度的安全访问,数据分区,通过通用语言对其他应用程序的可用性。 (SQL)等等。

祝你的项目好运。