我们有一个GDBM键值数据库,作为在C++中实现的面向web的负载平衡应用程序的后端。应用程序提供的数据变得非常大,因此我们的管理员已经将GDBM文件从“本地”存储(在NFS服务器上,或者非常接近地)转移到一个大型的、共享的、远程的、安装在NFS上的文件系统。
这影响了性能。我们的性能测试(在测试环境中)显示页面加载时间从数百毫秒(对于本地磁盘)跳到了几秒(通过NFS,本地网络),有时高达30秒。我认为很大一部分问题在于应用程序对GDBM文件进行了大量随机读取,而且这些读取速度比NFS慢,而且在生产中(前端和后端之间有更多的网络硬件)以及随着我们的数据库变得更大,这将更加糟糕。
虽然这不是一个关键的应用程序,但我希望提高性能,并有一些可用的资源,包括应用程序开发人员时间和Unix管理员。我的主要限制是时间只有几个星期的资源。
在我看来,我的选择是:
我应该如何处理这个问题?
发布于 2009-03-29 22:52:08
不要太执着于“关系与非关系”的比较。这似乎与这一问题无关。
您的应用程序跨越的是另一条线:从本地快速文件存储上的小型数据库到通过网络访问的大型数据库。跨越这条线意味着您现在更好地使用了一个专用的、网络服务的数据库管理系统。管理服务器是否管理关系数据库与该方面无关。
为了快速启动和运行,MariaDB (MySQL的接班人)可能是您的最佳选择。如果你预见到它会远远超出现在的位置,你最好把它放在PostgreSQL中,因为它最终还是需要去的:-)
发布于 2009-03-29 21:54:13
这似乎不是您想要听到的,但老实说,如果我是您,我会把它扔到mysql表中。这并不是说使用起来要困难得多,而且您可以从中获得很多好处,尤其是针对您实际情况的远程访问协议,而不是GDBM。
发布于 2009-07-13 19:55:32
如果您想坚持使用非关系数据库,可以尝试BDB或DJB的CDB。到目前为止,我已经使用了这两种方法,我认为在性能方面,它们的性能优于GDBM。
但是请记住大鼻子的答案,因为我也认为您的瓶颈可能不是您正在使用的数据结构(GDBM),而是您的基础结构。
https://stackoverflow.com/questions/695415
复制相似问题