我有一个项目,我正在对一个大型数据库进行数据挖掘。我目前将所有数据存储在文本文件中,我试图了解存储数据关系数据库的成本和好处。这些点看起来像这样:
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的盒子。
答案 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)等等。
祝你的项目好运。