庞大的MySQL数据库——Do';s和Don';ts?

庞大的MySQL数据库——Do';s和Don';ts?,mysql,database,linux,ubuntu,Mysql,Database,Linux,Ubuntu,我感兴趣的是使用MySQL构建一个巨大的数据库(1亿条记录),以1分钟的间隔包含股票数据。该数据库将包含5000只股票的数据,比如说10年的数据 两个问题: (1) 在过去,我有一个“缓慢插入”的问题——也就是说,在开始时插入的速度是好的,但是当表中充满了数百万条记录时,插入变得缓慢(太慢了!)。当时我用的是Windows,现在我用的是Linux——这会有所不同吗 (2) 我知道索引技术将帮助查询(数据检索)更快。问题是,有没有办法加快插入速度?我知道可以在插入时关闭索引,但是插入后“构建”索引

我感兴趣的是使用MySQL构建一个巨大的数据库(1亿条记录),以1分钟的间隔包含股票数据。该数据库将包含5000只股票的数据,比如说10年的数据

两个问题:

(1) 在过去,我有一个“缓慢插入”的问题——也就是说,在开始时插入的速度是好的,但是当表中充满了数百万条记录时,插入变得缓慢(太慢了!)。当时我用的是Windows,现在我用的是Linux——这会有所不同吗

(2) 我知道索引技术将帮助查询(数据检索)更快。问题是,有没有办法加快插入速度?我知道可以在插入时关闭索引,但是插入后“构建”索引(对于100万条记录!)也需要大量时间。有什么建议吗


还有其他的注意事项吗?提前感谢您的帮助。

您可以将数据保存在没有索引的表中,然后使用Lucene(或类似工具)对数据进行索引。这将使插入保持快速,并允许您查询Lucene以进行快速数据检索

这取决于您需要什么类型的索引以及如何生成数据。如果您对单索引的准时性感到满意,只需坚持这一点,并且在生成数据时,继续按升序插入(相对于您拥有索引的插入时间)。这样,在插入过程中所需的重新排序是最小的。此外,考虑分区优化查询。它可以显著提高性能。使用auto increment column有助于快速索引,但如果auto increment column是唯一的索引,那么您就无法及时获得索引。确保使用innodb存储引擎以获得良好的性能。如果您在Linux上正确地调整数据库引擎并保持设计简单,它将顺利地扩展而不会出现太多问题。我认为,您提到的巨大数据需求并不像最初看起来那么难构建。但是,如果您计划运行聚合查询(使用表的联接),那么这将更具挑战性

考虑使用SSD驱动器(或阵列)来存储数据,尤其是当您无法创建一个内存为Gig的盒子时。有关它的一切都应该更快。

您需要什么样的插入速率?一般来说,大型数据集需要大量的内存来进行快速操作,因此所有索引都可以一直保存在内存中。我有一个ms sql server中有3.5亿行的表,没有插入问题,但我们最多每秒插入大约100行,更新和选择的数量大致相同。此外,我们使用48 GB的内存来确保索引在内存中,表上的索引超过24 GB;)谢谢你,大卫,这很有帮助。@user54009只是好奇,这些数据是免费提供的吗?如果是的话,从哪里可以得到呢?谢谢。Lucene索引是否比MySQL索引更快/更好?一般来说,当询问者考虑到一个特定的产品/解决方案时,推荐另一个产品/解决方案不是一个好的做法。这有助于回答提问者实际提出的问题。这也有助于避免发生“忘记ABC,改用XYZ!”的战争。@user3262424使用Lucene或ElasticSearch之类的工具的好处是它们可以扩展,而mysql索引仅限于磁盘上的文件,它必须适合RAM。我们的建议不是要取代MySQL,而是要增强它有限的索引功能。假设其中一个正在处理许多具有时间戳的记录,插入许多具有2001—2010年时间戳的记录。如何“按顺序”插入带有(比如)2006年时间戳的新记录?