我可以使用多台服务器来增加mysql';s的数据上传性能?

我可以使用多台服务器来增加mysql';s的数据上传性能?,mysql,database,Mysql,Database,我正在设置一个mysql服务器来存储一些数据,但意识到(在本周末读了一点之后)我可能在及时上传数据时遇到问题 我基本上有多台服务器生成每日数据,然后将其发送到共享队列进行处理/分析。数据大约有50亿行(尽管数据非常小,一列中有一个ID号,另一列中有一个INT字典)。我看到的大多数性能报告都显示插入速度为60到100k/秒,这需要10个多小时。我们需要很快地输入数据,这样我们就可以在当天处理它,然后我们可以丢弃它(或者将表转换为S3或其他内容) 我能做什么?我有8台服务器供我使用(除了数据库服务器

我正在设置一个mysql服务器来存储一些数据,但意识到(在本周末读了一点之后)我可能在及时上传数据时遇到问题

我基本上有多台服务器生成每日数据,然后将其发送到共享队列进行处理/分析。数据大约有50亿行(尽管数据非常小,一列中有一个ID号,另一列中有一个INT字典)。我看到的大多数性能报告都显示插入速度为60到100k/秒,这需要10个多小时。我们需要很快地输入数据,这样我们就可以在当天处理它,然后我们可以丢弃它(或者将表转换为S3或其他内容)

我能做什么?我有8台服务器供我使用(除了数据库服务器之外),我可以用它们来加快上传速度吗?起初,我想用它们同时将数据推送到服务器上,但我也在想,也许我可以将数据加载到每个服务器上,然后以某种方式尝试将所有分离的数据合并到一台服务器上


我本来打算在innodb中使用mysql(我可以使用它帮助的任何其他设置),但它还没有最终确定,所以如果mysql不工作,是否还有其他东西可以使用(我以前使用过hbase,但在遇到问题时先寻找mysql解决方案,以防我的问题被更广泛地使用,更容易获得帮助)?

哇。你正在加载的数据太多了。这可能是值得一点设计思考,以获得正确的

多个mySQL服务器实例无助于提高加载速度。不同之处在于mySQL服务器上的快速处理器芯片和非常快的磁盘IO子系统。如果您可以使用64位处理器并为其提供大量RAM,那么您就可以为您的大表使用内存访问方法,这将非常快。(但如果这对您有效,那么一个巨大的Java HashMap可能会更好。)

问问自己:为什么需要将这些信息存储在SQL查询表中?加载数据后,您将如何使用数据?您会运行大量检索单行的查询,还是只检索数十亿行中的几行?或者您会运行聚合查询(例如,
SUM(something)…groupbysomething\u-else
)来遍历表中的大部分内容吗

您是否必须在数据未完全加载时访问数据?或者,您可以在第一次访问之前加载一整批数据吗

如果all您的查询需要研磨整个表,那么不要使用任何索引。否则,我会这样做。但不要加入任何你不需要的索引。它们将大大降低您的负载性能

考虑在这个表中使用myISAM而不是InnoDB;myISAM缺乏事务语义,因此加载速度更快。myISAM可以很好地处理聚合查询或少量行查询

您可能希望为每天的数据创建一个单独的表,因此您可以通过重命名该表或访问一个新表来“删除”昨天的数据

应考虑使用加载数据加密命令。

此命令使mySQL服务器从mySQL服务器的文件系统中读取文件,并将其直接大容量加载到表中。这比在另一台机器上从客户端程序插入命令要快得多。但在生产环境中进行设置也很麻烦:您的共享队列需要访问mySQL服务器的文件系统,才能写入数据文件以进行加载

您应该考虑禁用索引,然后加载整个表,然后重新启用索引,但前提是不需要查询部分加载的表。