2010-04-21 11 views
5

Я собираюсь написать общий класс объектов для использования с zodb. Эти объекты добавят себя к индексу btree, как только они будут сохранены в графе объектов zodb.Любые хорошие руководства и/или советы по индексированию моих объектов в зодбе?

Я никогда не работал с этим раньше, но есть ли у кого-нибудь какие-либо ресурсы и/или советы по этому поводу?

С силой zodb при работе с объектными ссылками и хорошей стратегией индексирования я мог бы получить лучшее из обоих миров базы данных.

Любые другие мысли более чем приветствуются, спасибо!

+0

Одним из возможных ответов будет zcatalog или его автономный эквивалент. Тем не менее, я недостаточно знаком с зопой в целом, чтобы понять, буду ли я вынужден принимать некоторые из его собственных подходов. Если у кого есть рекомендации по этому вопросу, пожалуйста, отправьте ответ! –

ответ

2

Посмотрите repoze.catalog:

repoze.catalog является индексация Python и поиска рамки. Он основан на zope.index, и большинство его внутренних элементов взяты из каталога zope.app.catalog. Однако, в отличие от zope.app.catalog, он предназначен для использования вне большей структуры Zope в произвольных приложениях Python.

+0

Кажется, я не могу найти исчерпывающие учебники для zope.index? Это домашняя страница, по-видимому, страничка pypi, а не zope ... Хммм ... –

0

В зависимости от потребностей индексации, но когда все, что вам нужно, - это доступность по идентификатору, вероятно, вам не нужен какой-либо причудливый индексный пакет.

Эти объекты добавят себя к индексу btree, как только они будут сохранены в графе объектов zodb.

Ну, «добавить себя» означало бы, что они содержат ссылку на их решение по методу BTree/index. С другой стороны, вы говорите о том, «как только они будут сохранены», что подразумевает какую-то «помещать их в БД» -функцию. Поэтому я предлагаю, просто сделать сохраняющуюся и индексирование объектов на одном дыхании с чем-то вроде этого:

def persist_obj(db, obj): 
    tree = db.root()['mybtree'] 
    id = tree.maxKey() + 1 
    obj.id = id 
    tree[id] = obj 

Если у вас есть оболочка для вашей базы данных, помещая это в функции-члене wour обертки будет естественным место для этого.