我测试mysql全默认设置,我没改过也不懂怎么改mysql参数,一个表已有10亿条数据了,继续测试批量插入1万次插入一次,结果是每秒插入60-70万条。
但单条插入的话,则每秒只有一两千了。但我觉得这是业务场景问题,远远达不到mysql的上限,也许可以改造下插入逻辑,改为批量插入可行吗。
分表的意义是不是为了好维护,以及非主键查询的情况,其他原因我想不出来。至于统计什么的,应该再用个olap数据库做吧,搜索则用搜索引擎了是吗。
MySQL分表分库的主要目的是为了提高系统的性能和可扩展性。
当单张表数据量达到一定程度时,查询和更新操作的效率都会受到影响。这是由于单张表的数据量过大,导致需要花费更长的时间才能找到需要的数据,同时在执行更新和删除操作时也需要扫描整个表,这会导致SQL执行速度变慢,影响整个系统的性能表现。
分表操作可以将单张表的数据拆分为多张表,这样就可以将原本需要耗费很长时间才能完成的查询和更新操作,拆分为多个较小的操作,从而提升了系统性能。此外,分表也能够让数据库的数据可以更好地水平拆分,提高了系统的可扩展性。
总结来说,MySQL分表分库的主要目的是为了提高系统性能和可扩展性,批量插入可以提高数据插入的效率。而数据统计和搜索等功能,则需要结合其他工具来实现。
看看这篇《我们为什么要分库分表》
不知道你这个问题是否已经解决, 如果还没有解决的话:MySQL使用分表分库的技术是为了解决数据量庞大时查询性能下降的问题,通过将数据分散在不同的表或者数据库中,可以减轻查询负担。通常将数据按照某种规则进行分片,比如按照用户ID hash分片,或者按照时间戳进行分片等等。除了提高查询性能之外,分表分库还可以提高数据的可用性和可扩展性,避免单点故障。
至于你所遇到的问题,单次插入速度很慢,但批量插入速度非常快,这是因为MySQL为了保证事务的原子性和隔离性,在每次插入操作时都会进行一次提交,这个过程需要耗费时间。而批量插入可以一次性提交多条记录,减少了提交的次数,从而提高了速度。修改插入逻辑也许可以优化速度,比如使用LOAD DATA INFILE命令进行数据导入等等。
分表的作用除了提高维护和查询性能之外,还可以避免数据冗余和数据集中风险,比如某个表因为某些原因崩溃无法使用时,其他表仍然可以正常使用。而通过按照不同的规则进行分片,在多台服务器上分别部署多个分片数据库,可以实现高可用的数据存储和查询服务。
对于统计数据和搜索数据的处理,OLAP数据库通常应用于处理数据仓库,主要用于对历史数据进行高维度、大规模的查询和分析,一般不用于在线的数据处理。而搜索引擎一般采用全文检索和索引技术,可以快速高效地检索数据,但不适用于复杂的数据分析。针对具体的业务需求和数据特点,需要综合考虑采用不同的技术和工具进行数据处理和分析。