У меня есть несколько графиков.Ширина и глубина каждого графика могут варьироваться и будут подвергаться изменениям и изменениям во время выполнения.См. Пример графика.
Существует корневой узел для захвата всего графа (т. Е. Дерева).Узел может иметь несколько дочерних элементов, и каждый дочерний объект выполняет специальную функцию.Кроме того, узел может получить доступ ко всем своим прямым дочерним элементам, чтобы получить определенную информацию.С другой стороны, дочерний узел может не знать ни своего родительского узла, ни других братьев и сестер.Пока ничего впечатляющего.
Сохранение каждого графика и обновление его с помощью объектной базы данных (в данном случае DB4O) выглядит довольно просто.Я мог бы использовать реляционную базу данных для обеспечения сохранности данных (включая триггеры базы данных и т. Д.), Но вместо этого я хотел реализовать ее с помощью объектной базы данных.
В моих графиках есть одна особенность.См. Другой пример графика.
Для правильного выполнения вычислений некоторые узлы требуют информации от других узлов.Эти другие узлы могут быть братьями и сестрами, детьми / внуками или связаны в каком-либо другом виде.В этом случае конкретный узел знает и другие соответствующие узлы (и, таким образом, может получать необходимую информацию непосредственно от них).Ради простоты первое изображение не показывало все потенциальные связи.
Если один узел имеет изменение состояния (например, вызванное внутренним таймером или запущенное каким-либо другим узлом), он сообщит другим узлам (заинтересованным наблюдателям, см. Также образец наблюдателя ) оменять.Каждый информированный узел затем предпримет соответствующие действия для обновления своего собственного состояния (и, в свою очередь, при необходимости проинформирует других наблюдателей).Корневой узел не будет знать о каждом происходящем изменении, поскольку только вовлеченные узлы будут знать, что что-то изменилось.Если такая цепочка событий запускается корневым узлом, то, конечно, это не является большой проблемой.
Цель состоит в том, чтобы обеспечить постоянство данных в объектной базе данных.Данные в памяти должны синхронизироваться с данными, хранящимися в базе данных.Что добавляет сложности, так это тот факт, что графы не состоят из простых (и глупых) узлов данных, но в каждом узле интегрировано множество функций (т. Е. События, которые вызывают изменения состояния по всему графу).
У меня есть несколько грубых идей о том, как справиться с представленной проблемой (например, (1) более сильное разделение данных и функциональности или (2) более сильная интеграция базы данных или (3) установить произвольный интервал времени для обновления данных и принять этоданные могут быть не синхронизированы в течение определенного периода времени).Мне нужны дополнительные входные данные и варианты, касающиеся такой ключевой проблемы (которая определенно оставит значительные следы в конкретной реализации).
(отредактировано) Есть еще один аспект, который я забыл упомянуть.График не должен постоянно находиться в памяти.Графы, которые не нужны, будут присутствовать только в базе данных и, таким образом, будут переведены в состояние приостановки.Это еще одна проблема, требующая рассмотрения.В то время как в режиме ожидания механизмы обновления, вероятно, будут также переведены в режим сна, и это не предназначено.