Метод индексации базы данных объектов

Я использую базу данных объектов (ZODB) для хранения сложных отношений между многими объектами, но у меня возникают проблемы с производительностью. В результате я начал создавать индексы, чтобы ускорить извлечение и вставку объектов. Вот моя история, и я надеюсь, что вы можете помочь.

Первоначально, когда я добавлял объект в базу данных, я вставлял его в ветку, посвященную этому типу объекта. Чтобы не допустить, чтобы несколько объектов представляли одну и ту же сущность, я добавил метод, который будет перебирать существующие объекты в ветке, чтобы найти дубликаты. Сначала это сработало, но по мере роста базы данных время, необходимое для загрузки каждого объекта в память и проверки атрибутов, росло экспоненциально и неприемлемо.

Чтобы решить эту проблему, я начал создавать индексы на основе атрибутов в объекте, чтобы когда объект будет добавлен, он будет сохранен в ветви типа, а также в ветви индекса значения атрибута. Например, предположим, что я сохранял объект человека с атрибутами firstName = 'John' и lastName = 'Smith', объект будет добавлен в ветку типа объекта person, а также будет добавлен в списки в ветке индекса атрибута с ключами ' John 'и' Smith '.

Это сэкономило много времени за счет повторной проверки, поскольку новый объект мог быть проанализирован, и нужно было проверять только набор объектов, которые пересекаются в индексах атрибутов.

Однако я быстро столкнулся с другой проблемой, связанной с обновлением объектов. Индексы необходимо обновить, чтобы отразить тот факт, что они могут больше не быть точными. Это требует либо запоминания старых значений, чтобы к ним можно было получить прямой доступ и удаления объекта, либо перебора всех значений типа атрибута, чтобы найти и удалить объект. В любом случае производительность снова начинает быстро ухудшаться, и я не могу найти способ решить эту проблему.

Были ли у вас подобные проблемы раньше? Что вы сделали, или это просто то, с чем мне приходится иметь дело при использовании OODBMS?

Заранее благодарю за помощь.

5
задан Evrim 12 July 2011 в 17:14
поделиться