代码之家  ›  专栏  ›  技术社区  ›  Anon Gordon

GDBM的替代或继承者

  •  4
  • Anon Gordon  · 技术社区  · 15 年前

    我们有一个 GDBM 键值数据库作为在C++中实现的负载均衡Web面向应用程序的后端。应用程序提供的数据已经变得非常大,因此我们的管理员已经将gdbm文件从“本地”存储(在Web服务器上,或非常靠近)移动到一个大型的、共享的、远程的、安装了NFS的文件系统。

    这影响了性能。我们的性能测试(在测试环境中)显示页面加载时间从数百毫秒(对于本地磁盘)跳到几秒(通过NFS、本地网络),有时高达30秒。我相信很大一部分的问题是,应用程序从gdbm文件中随机读取大量数据,这些数据在NFS上速度很慢,而且在生产环境中(在生产环境中,前端和后端之间有更多的网络硬件),随着我们的数据库越来越大,情况会更糟。

    虽然这不是一个关键的应用程序,但我希望提高性能,并拥有一些可用的资源,包括应用程序开发人员时间和Unix管理员。我的主要限制是时间只有几个星期的资源。

    如我所见,我的选择是:

    1. 通过调整参数来提高NFS性能。我的直觉是我们不会从中得到太多,但是我以前犯过错误,我对NFS调优的了解也不多。

    2. 移动到其他键值数据库,例如 memcachedb Tokyo Cabinet .

    3. 用其他一些协议替换NFS(已经提到了iscsi,但我不熟悉它)。

    我应该如何处理这个问题?

    4 回复  |  直到 6 年前
        1
  •  10
  •   bignose    6 年前

    不要太沉迷于“关系”与“非关系”的比较。这似乎与这个问题无关。

    您的申请所跨越的行是另一行: 从本地快速文件存储上的小型数据库到通过网络访问的大型数据库 . 跨越这条线意味着你现在可以更好地得到一个专用的、网络服务的、数据库管理系统的服务。管理服务器是否管理关系数据库与此方面无关。

    为了快速启动和运行, MariaDB (MySQL的继承者)可能是你最好的选择。如果你预见到它的发展远远超出了现在的水平,你不妨把它放进去。 PostgreSQL 因为这正是它最终需要去的地方——)

        2
  •  2
  •   chaos    15 年前

    这似乎不是你想听到的,但老实说,如果我是你,我会把它扔到一个MySQL表中。这并不是说它有意义地更难处理,而且您可以从中获得很多好处,尤其是远程访问协议,它实际上是为您的情况而设计的,不像通过NFS的gdbm。

        3
  •  1
  •   tr9sh    15 年前

    如果你想坚持使用非关系数据库,你可以尝试 BDB 或DJB的 CDB . 到目前为止,我已经使用了这两种方法,并且我认为在性能方面,它们优于GDBM。

    但是请记住Bignose的答案,因为我也认为您的瓶颈可能不是您正在使用的数据结构(GDBM),而是您的基础结构。

        4
  •  0
  •   Baris CUHADAR    14 年前

    通过网络使用平面文件的文件系统I/O不是一个好主意,但是您应该考虑在该计算机上编写一个多线程TCP服务器,该服务器可以进行I/O、查询等操作,然后将结果返回给您。传输小数据块而不是整个数据库文件。

    我正在设计一个缓存持久性机制来解决一个高可用性问题,我将用python编写代码。

    推荐文章