У меня есть приложение, которое хранит информацию об отношениях в таблице MySQL (contact_id, other_contact_id, сила, записанный_ат).Это нормально, если все, что мне нужно сделать, это показать, кем являются контакты контакта, или даже создать список взаимных контактов для двух контактов.
Но теперь мне нужно сгенерировать статистику типа: «Каково было общее число?двусторонних соединений уровня 3 или лучше в январе 2011 года или (при условии, что каждый контакт является частью группы), какая группа имеет наибольшее количество соединений с другими группами и т. д.
Я быстро нашелчто SQL для генерации этой статистики стал очень громоздким.
Так что я написал скрипт, который для любой конкретной даты будет генерировать граф в памяти.Затем я мог запустить любой график, который я хотел против этого графика.Гораздо проще для понимания и, в целом, гораздо более производительным - кроме генерации части графика.
Моя следующая мысль заключалась в том, чтобы кэшировать эти графики, чтобы я мог вызывать их всякий раз, когда мне нужно было запустить новую статистику.(или создайте более поздний график: например, для сегодняшнего графика я беру вчерашний график и применяю любые изменения, которые произошли со вчерашнего дня).Я пробовал memcached, который работал отлично, пока графики не выросли> 1 МБ.
Так что теперь я думаю об использовании базы данных графов, такой как Neo4J.
Единственная проблема в том, что у меня нет толькоодин график.Или я делаю, но это то, что меняется со временем, и мне нужно иметь возможность запрашивать его с разными ссылочными временами.
Итак, могу ли я:
- хранить несколько графиков вNeo4J и повторно / взаимодействовать с ними отдельно?Затем я бы создал и сохранил отдельные социальные графики для каждой даты.
или
- добавьте действительные к и из отметок времени к каждому ребру и отфильтруйте график соответствующим образом: так что если яхотел график для «1 мая», я бы следовал только за самым новым ребром между двумя узлами, которые были созданы до «1 мая» (и если все ребра были созданы после 1 мая, то эти узлы не были бы соединены).
Я довольно плохо знаком с графическими базами данных, поэтому любая помощь / указатели / подсказки приветствуются.