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