我的应用程序应该使用哪个服务器?(300GB MySQL 数据库和 Sphinx)

YSY*_*YSY 0 mysql configuration sphinx

可能的重复:
你能帮助我进行容量规划吗?

我编写了一个使用 MySQL 和 Sphinx 来搜索和存储信息的应用程序。

该应用程序包含一个权重为 300GB 的数据库(主要是 text、mediumtext 和 varchars)。我的狮身人面像指数权重 30GB。

当我计划拥有一个 100GB~ 的数据库时,我的问题出现了,而我现在有一个 300GB 的数据库,无法加载到内存中(?)。

我正在寻找能够为我提供最高性能的最佳架构。

我的应用程序首先获取一个查询,然后针对 sphinx 索引运行它,从 sphinx 获取大量 ID,在数据库中查询这些 ID 的几个文本字段,并将结果发送到 .NET 排名器(特殊算法)。

为了获得最佳性能,我为 MySQL 使用了带有 2 个 SSD 磁盘(24GB ram)的 Xeon i7 W3520 服务器,这并不便宜,而且我空间不足,无法添加更多磁盘,所以我需要另一台服务器。

如果我使用带有常规磁盘的服务器来运行 mysql,您认为会对性能产生重大影响吗?我知道我需要快速磁盘来进行 sphinx 搜索(这是我的全文搜索引擎),我正在使用索引字段 (ID) 从数据库中选择行而不进行任何复杂的查询,我可能需要将数据库托管在具有足够存储空间的更便宜的服务器。

你能看出我的瓶颈吗?.NET 应用程序主要需要 RAM 和 CPU,DB 需要大量空间和/或 RAM,而 sphinx 需要快速磁盘和 RAM。

  1. 是否可以将 MySQL 索引加载到 RAM 中?
  2. 如果 300GB,我可以做些什么来减轻 DB 的大小这一事实?
  3. 磁盘速度较慢的服务器会对性能产生多大影响?(如果不在硬件上花费数百美元,我就无法对其进行基准测试)。
  4. 如果我为 MySQL 使用 Linux 或 Windows 机器,这有关系吗?

Tom*_*Tom 7

我正在寻找能够为我提供最高性能的最佳架构。

这里的问题是什么?不要误会我的意思,但只有一种方法可以做到这一点 - 将数据库放在您可以获得的最快的 SSD 中。

可能有意义吗?不知道,但您不要求足够快的场景,而是要求最高的性能。

我现在有一个 300GB 的,无法加载到内存中(?)。

你知道,这不是真的。按照今天的标准,512GB 服务器并不是特别大。

磁盘速度较慢的服务器会对性能产生多大影响?

当然会。通常,当数据库未加载到 RAM 中时,IOPS - IO 性能 - 是数据库的限制因素。

如果我使用带有常规磁盘的服务器来运行 mysql,您认为会对性能产生重大影响吗?一世

定义“普通光盘”。一个 15k RPM SAS 磁盘阵列对于高性能数据库来说是“常规”的,每个磁盘的 IOPS 大约是普通磁盘的 3-4 倍,但是……使用这样的小型数据库将其放入 512GB SSD并获得 50.000 IOPS 而不是 500 左右的 15k SAS 驱动器为您提供。

DB 需要大量空间和/或 RAM,而 sphinx 需要快速磁盘和 RAM。

任何不能从 RAM 中填写所有内容的数据库通常都会受到磁盘的限制,主要是因为磁盘非常慢 SLOW SLOW。获得尽可能快的磁盘子系统是大型数据库安装的标准配置,但您有一个小型数据库,因此一个简单的 SSD 就足够了。遗憾的是,它的性能仍然比 RAM 低很多。

如果 300GB,我可以做些什么来减轻 DB 的大小这一事实?

意识到这很小吗?我家里有一个 850gb 的数据库,而我的最后一个项目是一个 21000gb 的数据库。根据我现在可以访问的一些数据的处理方式,我只获得了需要处理的 44000gb 高度压缩的数据。300GB 是“获取内存”小。

如果我为 MySQL 使用 Linux 或 Windows 机器,这有关系吗?

也许确实如此,但这与这个问题完全无关。Windows 可能有 - 取决于配置 - 更大的开销,但它不会有什么不同。当您处理这样的系统时,残酷地说额外的 128M 开销会产生零差异。