数百万行的mysql硬盘效率

标签 mysql performance

我有一个程序每秒从某个来源接收大约 20 个任意测量值。每个测量值都有类型、时间戳、最小值、平均值和最大值。然后,我需要为每种测量类型创建最多 X 个聚合。

该程序可以同时设置 100 个源,这导致我需要快速存储和快速检索大量数据。

这将在其上运行的系统没有内存/存储/cpu 限制,但那里有另一个服务正在几乎以其能力限制写入硬盘。对于这个问题,我们假设这是一个“顶级”硬盘,我将无法升级到硬盘。

我现在正在做的是为每个测量类型(20x 源)生成一个表,并在遇到新的测量类型时沿着每个测量的时间戳值进行分区。我这样做是为了不分散 HDD 上的测量数据,这将允许我以最少的“搜索”量插入或查询数据。

这有意义吗?我不需要进行任何连接或复杂的查询,它要么是直接的批量插入,要么是按时间戳范围的单一测量类型查询。

MySql如何跨硬盘存储表中的数据?我怎样才能更好地设计数据库以最大限度地减少插入和查询期间的 HDD 寻道?

最佳答案

您问的是一般性问题,可以通过使用 google 或您喜欢的任何搜索引擎阅读文档或浏览知识库文章来发现这些问题。如果您使用的是默认的 MyISAM 引擎,那么每个表都存储为 db-specific 目录中的三个文件,其中最大的是行数据的 MYD 文件和所有索引的 MYI 文件。

您可以做的最重要的事情是让您的配置参数正确,以便它可以优化访问和缓存。 MySQL 会比您实际期望的做得更好。参见 http://dev.mysql.com/doc/refman/5.1/en/option-files.html了解更多信息并比较您将在本节讨论的系统上找到的 my-small.cnf 和 my-large.cnf 的设置。

关于数百万行的mysql硬盘效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9685170/

相关文章:

php - 检查哪些名称在数据库中具有相同的字段

mysql - 我可以不强制 MySQL 中的引用完整性吗

php - Codeigniter 将复选框数组值传递给 mysql 数据库

c - 递减渐近时间复杂度

Android:while 循环是否高效?

c# - 实体 VS Id 作为参数

mysql - 将 MYSQL 表索引到 solr 5

php - 比较来自 MySql 和 Datepicker 的日期

WCF 性能 net.tcp 与命名管道

android - XML 驱动的 GUI 和性能