Иерархия 50 миллионов узлов или больше - PullRequest
1 голос
/ 27 августа 2010

Есть ли у кого-нибудь какие-нибудь отличные идеи для создания масштабируемого иерархического хранилища данных? Требуется быстрое добавление и возможность иметь много пользователей сайта, запрашивающих отчеты о количестве узлов ниже определенного узла в иерархии.

Это сценарий ....

У меня будет очень большое количество добавляемых узлов в час. Допустим, я хочу добавить 1 миллион узлов в час. Они, вероятно, будут появляться по всей иерархии. В идеале масштаб должен составлять миллиарды узлов, но цель - 50 миллионов. Мне нужно иметь возможность в любое время рассчитать количество узлов ниже любой заданной точки, и, скорее всего, многие люди будут делать это одновременно. Думайте об этом как о отчете, к которому многие пользователи (возможно, 100 000 одновременно) будут звонить одновременно. они могут запрашивать все узлы ниже определенного узла.

База данных может быть либо создана с помощью одного процесса, считывающего плоскую таблицу, отформатированную в виде списка смежности (быстрые вставки, медленные отчеты), либо это может быть стандартная схема, где пользователи веб-сайта обновляют иерархию напрямую, если хранилище данных существует, чтобы справиться с огромным количеством создаваемых узлов.

Я уже реализовал это в Django, используя Treebeard и MySQL. Я использую метод Materialized Path, и он довольно хорош, но я хочу молниеносной скорости в сравнении. Имея хранилище данных в 30000 узлов, я выполняю 120 вставок в нижней части дерева в минуту, работая на 2-летнем ноутбуке. Я хочу гораздо большего, чем это, и думаю, что, возможно, есть лучшее хранилище данных для использования. Может быть, PyTables, BigTable, MongoDB или Cassandra?

Хорошо бы интегрировать в Python / Django, но я всегда могу написать эту часть системы на другом языке, если придется. Если бы мы использовали единый процесс, считанный из единого хранилища данных, и превратили его в действительно эффективное иерархическое хранилище данных, которое идеально подходит для создания отчетов, я думаю, у меня не будет проблем с параллелизмом, которые сведут на нет необходимость транзакций.

Во всяком случае, достаточно информации, чтобы начать нас. Легко ли использовать правильную технологию?

1 Ответ

1 голос
/ 27 августа 2010

Вы смотрели на графическую базу данных Neo4J ?Кажется, он чертовски способен и имеет оболочку Python и некоторую поддержку (в разработке) для Django .Neo работает на Java, и вы можете использовать его либо с Jython, либо с JPype и CPython.

...