我们有一个 GDBM 关键价值的数据库作为后端负载平衡的网络应用程序面临的,是在实现C++。数据服务通过应用已非常大,使我们的管理员拥有移动的GDBM文件从"当地"储存(在网络服务器,或非常接近通过)向一个大型、分享远程NFS载文件系统。

这已经影响到绩效。我们的性能试验(在测试环境中)表明页面装载时间跳跃的数百毫秒(地盘)到几秒(NFS,当地网络),并且有时高达30秒。我相信一大部分问题是,应用程序使得很多随机读GDBM文件,这些都是缓慢的过NFS,这将甚至更糟糕的是在生产(其中前端和后端有更多的网络硬件,它们之间)并为我们数据库中获取更大。

虽然这不是一个至关重要的应用程序,我谨提高绩效,并具有一定的可用资源,包括应用开发的时间和Unix管理员。我的主要制约因素是时间仅有的资源,用于几个星期。

因为我看到它,我的选择是:

  1. 提高NFS性能通过调整参数。我的直觉是,我们不会得到多出了这一点,但是我错了之前,我真的不知道很多关于NFS的调整。

  2. 移动到不同的关键价值的数据库,例如 memcachedb东京内阁.

  3. 替换NFS与其他一些协议(iSCSI已经提到,但我不熟悉的话)。

我应该怎么处理这个问题?

有帮助吗?

解决方案

不要太挂在"关系与非关系"进行比较。它似乎是无关紧要的这个问题。

行你的应用程序已经越过了一个不同的一种: 从一个小型的数据库对当地快速的文件存储,到一个大型数据库通过网络访问.越过这条线意味着你现在是更好的服务通过专用网络服务、数据库管理系统。是否管理服务器管理的关系数据库是不是有关这一方面。

让它运行起来迅速, (继任者MySQL)可能是你最好的选择。如果你预见到它的增长远远超出它是现在,你也可以把它放在 PostgreSQL 因为这就是它将需要最终无论如何:-)

其他提示

这似乎不是你想听到什么,但说实话,如果我是你我会把它扔在mysql表。这并不是因为如果它是有意义的更难的工作,以及你获得很多好处,不少远程访问协议,实际上是旨在对于你的情况,与不同的GDBM过NFS。

如果你想要坚持非关系数据库的你可以试试 或DJB的 CDB.我已经使用这两个迄今为止,我认为当它下来的表现,他们超越GDBM.

但是,保持bignose的答复中心,因为我也认为你的瓶颈可能不是数据结构(GDBM)您使用的是但是您的基础设施。

文件系统i/o平面文件通过一个网络不是一个好主意,但是你应该考虑编写一个多螺纹tcp服务器,使得i/o,查询,等等。在这台机器,然后返回你的结果。转让小块的数据不完整数据库文件..

我设计的高速缓存的持久性机制以克服的高可用性问题。我会的代码,在蟒蛇。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top