我们有一个GDBM键值数据库作为负载均衡的面向Web的应用程序的后端,该应用程序是用C++实现的.应用程序提供的数据已经变得非常大,因此我们的管理员已将GDBM文件从"本地"存储(在Web服务器上,或非常接近)移动到大型,共享,远程,NFS挂载的文件系统.
这影响了性能.我们的性能测试(在测试环境中)显示页面加载时间从数百毫秒(对于本地磁盘)跳跃到几秒(通过NFS,本地网络),有时甚至高达30秒.我相信问题的很大一部分是应用程序从GDBM文件中进行大量随机读取,并且这些在NFS上比较慢,而且在生产中会更糟糕(前端和后端都有甚至更差)他们之间的网络硬件更多)和我们的数据库变得更大.
虽然这不是一个关键的应用程序,但我希望提高性能,并提供一些资源,包括应用程序开发人员时间和Unix管理员.我的主要约束是时间只有几周的资源.
在我看来,我的选择是:
通过调整参数来提高NFS性能.我的直觉是我们不会从中得到很多,但之前我错了,而且我对NFS调优并不是很了解.
移动到其他键值数据库,例如memcachedb或Tokyo Cabinet.
用其他协议替换NFS(已提到iSCSI,但我不熟悉它).
我该如何处理这个问题?
不要过于依赖"关系与非关系"比较.这似乎与这个问题无关.
您的应用程序划过的行是一个不同的行:从本地快速文件存储上的小型数据库到通过网络访问的大型数据库.跨越该行意味着您现在可以通过专用的网络服务数据库管理系统获得更好的服务.管理服务器是否管理关系数据库与该方面无关.
为了快速启动和运行,MariaDB(MySQL的继任者)可能是你最好的选择.如果你预见它的增长速度远远超过它现在的水平,你可能会把它放在PostgreSQL中,因为它最终还是需要去的地方:-)