Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中快速读写数据?_Mysql_Scalability_Mysql Management - Fatal编程技术网

如何在mysql中快速读写数据?

如何在mysql中快速读写数据?,mysql,scalability,mysql-management,Mysql,Scalability,Mysql Management,嗨,朋友们 我使用MySQL DB作为我的一个产品,现在大约有250所学校为其签约,每小时大约有1500000次插入,每天大约有12000000次插入,我认为我目前的设置就像一台服务器一样,可能会在几个小时内崩溃,读和写也是一样的,我如何使它成为无崩溃的DB服务器,我现在面临的主要问题是写入和读取数据的速度都很慢。如何克服这一问题,我很难找到解决方案。伙计们,请帮帮我。哪种解决方案是最好的模式?很难同时快速读取和写入数据。要快速读取,需要添加索引。要获得快速写入,您需要很少的索引。为了让两者都快

嗨,朋友们
我使用MySQL DB作为我的一个产品,现在大约有250所学校为其签约,每小时大约有1500000次插入,每天大约有12000000次插入,我认为我目前的设置就像一台服务器一样,可能会在几个小时内崩溃,读和写也是一样的,我如何使它成为无崩溃的DB服务器,我现在面临的主要问题是写入和读取数据的速度都很慢。如何克服这一问题,我很难找到解决方案。伙计们,请帮帮我。哪种解决方案是最好的模式?

很难同时快速读取和写入数据。要快速读取,需要添加索引。要获得快速写入,您需要很少的索引。为了让两者都快起来,它们不能互相锁住


根据您的需要,一种解决方案是使用两个数据库。将新数据写入实时数据库,并且每隔一段时间,当数据库处于安静状态时,可以将数据同步到另一个数据库,以便执行查询。这种方法的缺点是,您读取的数据将有点旧。这可能是问题,也可能不是问题,这取决于您需要执行的操作。

很难同时实现快速读取和写入。要快速读取,需要添加索引。要获得快速写入,您需要很少的索引。为了让两者都快起来,它们不能互相锁住


根据您的需要,一种解决方案是使用两个数据库。将新数据写入实时数据库,并且每隔一段时间,当数据库处于安静状态时,可以将数据同步到另一个数据库,以便执行查询。这种方法的缺点是,您读取的数据将有点旧。这可能是问题,也可能不是问题,这取决于您需要做什么。

~500次每秒插入确实不值得一提

对于灵活的解决方案,您可能需要实现某种切分。可能最简单的解决方案是预先将学校分成若干组,并将不同学校组的数据存储在不同的服务器上。例如,学校1-10的数据存储在服务器A上,学校11-20存储在服务器B上,等等。这几乎是无限可扩展的,假设不同学校的数据之间几乎没有关系

此外,您可以尝试在这个问题上投入更多的马力,并投资于SSD驱动器的RAID,并且假设您有足够的处理能力,您应该可以。当然,如果是一个巨大的数据库,SSD驱动器的容量可能不够


最后,看看是否可以减少插入次数,例如通过对数据库进行非规范化。比方说,不是将每个学生的出勤率存储在单独的一行中,而是将整个班级的出勤率作为向量放在一行中。当然,这样的更改会严重限制您的查询能力。

~500次每秒的插入确实不值得一提

对于灵活的解决方案,您可能需要实现某种切分。可能最简单的解决方案是预先将学校分成若干组,并将不同学校组的数据存储在不同的服务器上。例如,学校1-10的数据存储在服务器A上,学校11-20存储在服务器B上,等等。这几乎是无限可扩展的,假设不同学校的数据之间几乎没有关系

此外,您可以尝试在这个问题上投入更多的马力,并投资于SSD驱动器的RAID,并且假设您有足够的处理能力,您应该可以。当然,如果是一个巨大的数据库,SSD驱动器的容量可能不够


最后,看看是否可以减少插入次数,例如通过对数据库进行非规范化。比方说,不是将每个学生的出勤率存储在单独的一行中,而是将整个班级的出勤率作为向量放在一行中。当然,这些更改将严重限制您的查询能力。

我的建议是:

  • 构建轻量级应用程序。不要使用像活动记录这样的高级数据库抽象层。他们在缩放方面很差劲
  • 了解很多有关mysql性能的信息
  • 了解mysql复制
  • 了解负载平衡
  • 了解内存缓存。(memcached)
  • 聘请管理员(具备良好的mysql知识)或web应用性能专家/顾问

具体策略取决于您的应用程序及其使用方式。Mysql复制可能合适,也可能不合适(同样适用于上述分片策略)。但这是一种实现一定伸缩性的非常简单的方法,因为它不会对应用程序设计产生太大影响。内存中的缓存可以避免数据库中的一些负载,但它们需要进行一些应用和权衡。最后,您需要全面了解如何在高负载下处理数据库驱动的应用程序。如果你的最后期限很紧,请增加外部人力,因为如果没有经验,你将无法在6周内完成这项工作。

我的建议是:

  • 构建轻量级应用程序。不要使用像活动记录这样的高级数据库抽象层。他们在缩放方面很差劲
  • 了解很多有关mysql性能的信息
  • 了解mysql复制
  • 了解负载平衡
  • 了解内存缓存。(memcached)
  • 聘请管理员(具备良好的mysql知识)或web应用性能专家/顾问
具体策略取决于您的应用程序及其使用方式。Mysql复制可能合适,也可能不合适(同样适用于上述分片策略)。但这是一种实现一定伸缩性的非常简单的方法,因为它不会对应用程序设计产生太大影响。内存中的缓存可以避免数据库中的一些负载,但它们需要进行一些应用和权衡。最后,您需要全面了解如何在高负载下处理数据库驱动的应用程序。如果你手头紧