关于在ZODB中索引对象的好指南或建议?
我打算为zodb写一个通用的对象类。这些对象在保存到zodb对象图后,会自动添加到一个btree索引中。
我之前从来没有接触过这些东西,不知道有没有人能提供一些资源或者建议来帮助我实现这个?
利用zodb在处理对象引用方面的强大功能,以及一个好的索引策略,我可能会同时享受到两种数据库的优势。
如果有其他想法也非常欢迎,感谢大家!
2 个回答
0
这要看你对索引的需求。如果你只需要通过一个ID来访问数据,那其实不需要什么复杂的索引工具。
这些对象在被保存到zodb对象图后,会自动加入到一个B树索引中。
这里说的“自动加入”意味着这些对象会和它们的B树或索引有个联系。另一方面,你提到的“被保存”又暗示着有一个“放入数据库”的功能。所以我建议,可以把对象的保存和索引合并在一起,一次性完成,像这样:
def persist_obj(db, obj):
tree = db.root()['mybtree']
id = tree.maxKey() + 1
obj.id = id
tree[id] = obj
如果你有一个数据库的封装器,把这个功能放在封装器的成员函数里是最合适的。
2
看看这个 repoze.catalog:
repoze.catalog 是一个用 Python 写的索引和搜索框架。它依赖于 zope.index,内部大部分内容来自 zope.app.catalog。不过,与 zope.app.catalog 不同的是,它的设计目的是为了在更广泛的 Python 应用中使用,而不仅仅局限于 Zope 框架。