0

我想开发一个在线路径搜索网络服务。它在图 G 中搜索两个顶点 V1、V2 之间的边距离和最小的路径。

问题是G 非常大。它包含近 1000 万条边。

如果 G 足够小,它可能很简单。我宁愿...

  1. 列出 G 中的所有边/顶点以及它与某些 RDB(例如 MySQL 或 PostgreSQL)的关系。
  2. 用 PHP 或在 G 中搜索最短路径的东西实现我自己的 Web 服务

我自己的 PHP 脚本将...

  1. 从 RDB 中选择所有边/顶点,使用 PHP 的类或虚构数组或其他东西在内存上构建 G。
  2. 将 Dijkstra 算法应用于内存 G,并回复最短路径。

由于以下原因,这种方法不适用于巨大的 G。

  • 构建内存 G 需要很多时间。
  • 它为每个边缘使用大量内存。PHP 的对象很智能,但现在不需要。

这意味着构建的网络应该在搜索请求之前在内存上准备好,并且每个顶点/边对象应该更轻量级

我决定用 C 来实现这个服务。我认为实现一个 Apache 模块比从头开始实现一个并发的、高性能的网络守护进程要容易得多(如果有更好的解决方案,我想知道) .

那么,我应该在哪里构建内存 G?

如您所知,Apache Web 服务器是多线程、多处理的守护进程。如果你开发一个为每个进程构建内存 G 的愚蠢模块,它将为 10 个处理的服务器在内存上构建近 1 亿条边(10 个相同的结构)。

我希望模块更智能,无论有多少进程运行,每个进程都共享 1 个单一的内存 G。

您认为在 Apache 模块中构建数据结构的最佳位置是哪里?

4

0 回答 0