我有一个图表,每个Edge
有一些weight
。
我已经实现了dijkstra的算法来找到从Vertex
A到B的最短路径。
Weights
从键/值DB中读取。 [redis.io
]。
Weights DB
大约为2 GB。weights
有50个数据库。 [或者50个不同的文件,每个2 GB具有我存储在Redis.io中的重量值]。function FindPath(Start, End, DB_name)
。Dijkstras从内存中读取权重值[Redio.io是内存中的键值存储]。但我的RAM只有6GB。无法同时将2GB * 50个DB存储到内存中。
Path的请求可以是Random和Concurrent。
存储权重数据库的最佳方法是什么?
是否仅增加RAM选项以提高程序执行速度?
修改
边数:4,62,505
答案 0 :(得分:2)
如果涉及速度,主要选择是增加内存。使用nosql DB(例如mongodb)无法实现类似的性能。另一种选择是尝试在多核系统上并行化算法。但这是非常艰难的,因为最终的解决方案是全球性的。
[编辑] 存储权重的最快方法是由边数编号索引的连续权重数组。每个DB一个数组。如果所有阵列都不适合你的ram,你可以设计一些基本的缓存机制,将DB从文件交换到数组(希望不是所有的数据库都可以同时访问)。