嗨,朋友们,我正在使用MySQL DB为我的一个产品,大约250所学校现在是烧焦了它,它大约每小时1500000插入和大约每天12000000插入,我认为我目前的设置就像一个单一的服务器可能在几个小时内崩溃,读也是一样的写,我怎么才能使它崩溃无崩溃的DB服务器,我现在面临的主要问题是写入和读取数据的速度都很慢我如何克服这个问题,这对我来说很难得到一个solution.guys请帮助me..which是做解决方案的好模型?
发布于 2010-11-21 00:50:29
我的建议是:
具体的策略取决于您的应用程序以及如何使用它。Mysql复制,可能适合也可能不合适(同样适用于前面提到的分片策略)。但这是实现一定程度缩放的一种相当简单的方法,因为它不会对应用程序设计产生太大影响。在内存缓存中,可以从数据库中保留一些负载,但它们需要一些工作来应用和一些权衡。最后,您需要全面了解如何在高负载下处理数据库驱动的应用程序。如果你有一个紧迫的最后期限,增加外部人力,因为如果没有经验,你不会在6周内做好这件事。
发布于 2010-11-20 23:50:48
每秒大约500次插入确实不是小菜一碟。
对于灵活的解决方案,您可能希望实现某种类型的分片。可能最简单的解决方案是预先将学校分成组,并将不同学校组的数据存储在不同的服务器上。例如,学校1-10的数据存储在服务器A上,学校11-20存储在服务器B上,等等。这几乎是无限可扩展的,假设来自不同学校的数据之间几乎没有关系。
此外,您可以尝试在问题上投入更多的马力,并投资于SSD驱动器的RAID,假设您有足够的处理能力,您应该可以。当然,如果它是一个巨大的数据库,SSD驱动器的容量可能不够。
最后,看看是否可以减少插入的次数,例如,通过非规范化数据库。比方说,不是将每个学生的出勤率存储在单独的行中,而是将整个班级的出勤率作为向量放在一行中。当然,这样的更改将严重限制您的查询能力。
发布于 2010-11-20 23:50:08
很难同时获得快速读取和写入。要获得快速读取,您需要添加索引。要获得快速写入,您需要使用较少的索引。而且,为了让两者都更快,它们不能相互锁定。
根据您的需要,一种解决方案是拥有两个数据库。将新数据写入您的实时数据库,并且偶尔当它处于安静状态时,您可以将数据同步到另一个数据库,在那里您可以执行查询。这种方法的缺点是您读取的数据会有点旧。这可能是问题,也可能不是问题,这取决于你需要做什么。
https://stackoverflow.com/questions/4233492
复制相似问题