Home
entries friends calendar user info Previous Previous Next Next
spupyrev - Large Scale BFS

Advertisement

spupyrev
[info]spupyrev
Add to Memories
Tell a Friend
Large Scale BFS
Решаю сейчас следующую задачу. У меня есть граф, в котором около 10 миллионов вершин и в 100 раз больше ребер. На моем компьютере стоит 512Mb оперативки. Требуется запустить на графе поиск в ширину, глубину или сделать что-то подобное. В более сложном варианте хочется научиться считать какую-нибудь несложную функцию от ребер этого графа (вроде pagerank'а), т.е. уметь многократно и быстро получать список ребер для вершины.
Как это можно сделать? Идея пока следующая. Граф хранится на харде и в память подгружаются только те ребра, обработка которых происходит в данный момент. Реализуется это чем-то вроде LRU-map'а.
Собственно, вопросов несколько.
  1. Не умеет ли сама ОС осуществлять 'подгрузку' в оперативную память нужных данных (при помощи, например, своих виртуальных страниц)? Не будет ли такой способ сильно хуже по производительности, чем 'ручной', описанный выше?
  2. Может есть стандартные библиотеки/техники для решения задач подобного сорта?
  3. Как бы Вы стали решать эту задачу?
Фидбэк приветствуется.
Comments
no_gritzko_here From: [info]no_gritzko_here Date: April 18th, 2008 08:12 pm (UTC) (Link)
Попробовать свести всё что можно к однопроходным операциям на отсортированных данных?
spupyrev From: [info]spupyrev Date: April 18th, 2008 08:33 pm (UTC) (Link)
Что-то я плохо понял, что имеется ввиду. 'Однопроходные операции' - это такие, где доступ к ребрам каждой вершины осуществляется один раз за весь алгоритм?
no_gritzko_here From: [info]no_gritzko_here Date: April 18th, 2008 08:58 pm (UTC) (Link)
k раз за итерацию.
Кво итераций ~ диаметру графа или типа того.
Мне кажется, что BFS так делается.
no_gritzko_here From: [info]no_gritzko_here Date: April 18th, 2008 10:55 pm (UTC) (Link)
BFS так делается, причем на утилитах типа sort, awk итп, без кода.
spupyrev From: [info]spupyrev Date: April 19th, 2008 06:07 am (UTC) (Link)
Да, про BFS полностью согласен. Его можно выполнять с минимальными затратами разными утилитами. За awk спасибо, удобная вещь.
Просто у меня изначально немного другая задача стояла (и я зря, наверное, вынес в пост именно BFS) - научиться выполнять на больших графах любые алгоритмы. Вот захочется мне, например, запускать A*. В этом случае, боюсь, "без кода" не обойтись.
shadow_aka_hf From: [info]shadow_aka_hf Date: April 20th, 2008 07:42 pm (UTC) (Link)
Что приводит задачу к mapreduce и преимуществам уже существующего ПО и алгоритмов.
368ad538_bcdf From: [info]368ad538_bcdf Date: April 18th, 2008 09:18 pm (UTC) (Link)
По первому вопросу - умеет. См. memory mapped files, mmap(). Но для того, чтобы замапить всю эту кучу данных целиком, наверняка не хватит 32-битных адресов. Производительность зависит от реализации в конкретной ОС; и вообще не стоит мапить большой файл в память, если он в основном просто последовательно читается.
А вообще, нельзя ли разбить этот граф на компоненты, которые будет связывать относительно небольшое число ребер?
no_gritzko_here From: [info]no_gritzko_here Date: April 18th, 2008 10:53 pm (UTC) (Link)
> А вообще, нельзя ли разбить этот граф на компоненты, которые будет связывать относительно небольшое число ребер?
Увы, но сие невозможно...
Впрочем, что-то подобное осуществимо, если ... но это сложнее, чем другие решения... да.
spupyrev From: [info]spupyrev Date: April 19th, 2008 06:12 am (UTC) (Link)
Вообще-то я еще не решил, как и где хранить граф. Совсем не уверен, что будет один большой файл с данными. Не исключаю возможность положить граф просто в БД.
koudesnik From: [info]koudesnik Date: April 19th, 2008 03:57 pm (UTC) (Link)
koudesnik From: [info]koudesnik Date: April 19th, 2008 04:01 pm (UTC) (Link)
Delayut ego zdes:
http://law.dsi.unimi.it/index.php?option=com_frontpage&Itemid=1

Ya pochemu znayu - potomu chto s ihnimi datasets rabotal (no grafy ne stroil), i v nekotoryh iz nih bol'she chem 10 millionov uzlov bylo
11 comments or Leave a comment

Advertisement

Customize