我们有一个GDBM键值数据库作为负载平衡的面向 Web 的应用程序的后端,该应用程序是用 C++ 实现的。应用程序提供的数据变得非常庞大,因此我们的管理员已将 GDBM 文件从“本地”存储(在网络服务器上,或非常靠近)移动到大型、共享、远程、NFS 挂载的文件系统。
这影响了性能。我们的性能测试(在测试环境中)显示页面加载时间从数百毫秒(对于本地磁盘)跳跃到几秒(通过 NFS、本地网络),有时甚至高达 30 秒。我相信问题的很大一部分是应用程序从 GDBM 文件中进行了大量随机读取,并且这些读取比 NFS 慢,这在生产中会更糟(前端和后端甚至它们之间的网络硬件更多)并且随着我们的数据库变得更大。
虽然这不是一个关键应用程序,但我想提高性能,并提供一些可用资源,包括应用程序开发人员时间和 Unix 管理员。我的主要限制是时间只有几周的资源。
在我看来,我的选择是:
通过调整参数提高 NFS 性能。我的直觉是我们不会从中得到太多,但我以前错了,我对 NFS 调优并不是很了解。
移动到不同的键值对数据库,例如memcachedb或Tokyo Cabinet。
用其他一些协议替换 NFS(iSCSI 已经提到,但我不熟悉)。
我应该如何解决这个问题?