Есть ли у кого-нибудь какие-нибудь отличные идеи для создания масштабируемого иерархического хранилища данных? Требуется быстрое добавление и возможность иметь много пользователей сайта, запрашивающих отчеты о количестве узлов ниже определенного узла в иерархии.
Это сценарий ....
У меня будет очень большое количество добавляемых узлов в час. Допустим, я хочу добавить 1 миллион узлов в час. Они, вероятно, будут появляться по всей иерархии. В идеале масштаб должен составлять миллиарды узлов, но цель - 50 миллионов. Мне нужно иметь возможность в любое время рассчитать количество узлов ниже любой заданной точки, и, скорее всего, многие люди будут делать это одновременно. Думайте об этом как о отчете, к которому многие пользователи (возможно, 100 000 одновременно) будут звонить одновременно. они могут запрашивать все узлы ниже определенного узла.
База данных может быть либо создана с помощью одного процесса, считывающего плоскую таблицу, отформатированную в виде списка смежности (быстрые вставки, медленные отчеты), либо это может быть стандартная схема, где пользователи веб-сайта обновляют иерархию напрямую, если хранилище данных существует, чтобы справиться с огромным количеством создаваемых узлов.
Я уже реализовал это в Django, используя Treebeard и MySQL. Я использую метод Materialized Path, и он довольно хорош, но я хочу молниеносной скорости в сравнении. Имея хранилище данных в 30000 узлов, я выполняю 120 вставок в нижней части дерева в минуту, работая на 2-летнем ноутбуке. Я хочу гораздо большего, чем это, и думаю, что, возможно, есть лучшее хранилище данных для использования. Может быть, PyTables, BigTable, MongoDB или Cassandra?
Хорошо бы интегрировать в Python / Django, но я всегда могу написать эту часть системы на другом языке, если придется. Если бы мы использовали единый процесс, считанный из единого хранилища данных, и превратили его в действительно эффективное иерархическое хранилище данных, которое идеально подходит для создания отчетов, я думаю, у меня не будет проблем с параллелизмом, которые сведут на нет необходимость транзакций.
Во всяком случае, достаточно информации, чтобы начать нас. Легко ли использовать правильную технологию?