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

时间:2010-11-20 15:32:57

标签: mysql scalability mysql-management

嗨朋友们 我正在使用MySQL DB作为我的产品之一,现在约有250所学校被烧毁,每小时约150万次插入,每天大约12000000次插入,我认为我当前的设置就像一台服务器可能会在数小时内崩溃,并且读取也和写入一样,我怎么能让它崩溃免费的数据库服务器,我现在面临的主要问题是写入和读取数据的速度慢,我怎么能超过这个,我很难得到一个解决方案。请帮助我......这是做解决方案的好模型吗?

3 个答案:

答案 0 :(得分:3)

实际上,每秒约500次插入没什么可打喷嚏的。

对于灵活的解决方案,您可能希望实现某种分片。可能最简单的解决方案是将学校分成小组,并为不同服务器上的不同学校组存储数据。例如,学校1-10的数据存储在服务器A,服务器B上的学校11-20,等等。这几乎是无限可扩展的,假设来自不同学校的数据之间的关系很少。

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

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

答案 1 :(得分:2)

很难同时进行快速读写。要获得快速读取,您需要添加索引。要获得快速写入,您需要拥有少量索引。为了让两者都快,他们不能互相锁定。

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

答案 2 :(得分:1)

我的悠闲建议是:

  • 构建应用程序轻量级。不要使用像Active Record这样的高级数据库抽象层。他们很容易缩放。
  • 了解很多关于mysql性能的知识。
  • 了解mysql复制。
  • 了解负载平衡。
  • 了解内存缓存。 (分布式缓存)
  • 聘请管理员(具有不错的mysql知识)或网络应用程序性能大师/顾问。

具体策略取决于您的应用程序及其使用方式。 Mysql复制,可能适用也可能不适用(同样适用于所提到的分片策略)。但这是实现某种扩展的一种相当简单的方法,因为它不会对您的应用程序设计产生太大影响。在内存中,缓存可以避免数据库中的一些负载,但是它们需要一些工作来应用和一些权衡。最后,您需要全面了解如何在高负载下处理数据库驱动的应用程序。如果您的截止日期很紧,请增加外部人力,因为如果没有经验,您将无法在6周内完成此任务。